├── .gitignore ├── .vscode └── settings.json ├── Procfile ├── README.md ├── client ├── .gitignore ├── index.html ├── package.json ├── pnpm-lock.yaml ├── postcss.config.cjs ├── public │ └── vite.svg ├── src │ ├── App.css │ ├── App.jsx │ ├── api │ │ └── tasks.api.js │ ├── assets │ │ └── react.svg │ ├── components │ │ ├── Navigation.jsx │ │ ├── TaskCard.jsx │ │ └── TasksList.jsx │ ├── index.css │ ├── main.jsx │ └── pages │ │ ├── TaskFormPage.jsx │ │ └── TasksPage.jsx ├── tailwind.config.cjs └── vite.config.js ├── django_crud_api ├── __init__.py ├── asgi.py ├── settings.py ├── urls.py └── wsgi.py ├── manage.py ├── nixpacks.toml ├── requirements.txt ├── runtime.txt └── tasks ├── __init__.py ├── admin.py ├── apps.py ├── migrations ├── 0001_initial.py └── __init__.py ├── models.py ├── serializer.py ├── tests.py ├── urls.py └── views.py /.gitignore: -------------------------------------------------------------------------------- 1 | db.sqlite3 2 | venv 3 | __pycache__ 4 | staticfiles/ 5 | 6 | # environment variables 7 | .env.local -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "python.formatting.provider": "yapf" 3 | } -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | web: cd client && npm install && npm run build && cd .. && python manage.py migrate && python manage.py collectstatic && gunicorn django_crud_api.wsgi -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Django React CRUD 2 | 3 | This is a simple Django React CRUD application. 4 | 5 | # Environment variables 6 | 7 | - VITE_BACKEND_URL, this is neccessary in production, it should be the url of the backend server -------------------------------------------------------------------------------- /client/.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 | -------------------------------------------------------------------------------- /client/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite + React 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /client/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "client", 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 | "axios": "^1.3.4", 13 | "react": "^18.2.0", 14 | "react-dom": "^18.2.0", 15 | "react-hook-form": "^7.43.5", 16 | "react-hot-toast": "^2.4.0", 17 | "react-router-dom": "^6.9.0" 18 | }, 19 | "devDependencies": { 20 | "@types/react": "^18.0.27", 21 | "@types/react-dom": "^18.0.10", 22 | "@vitejs/plugin-react": "^3.1.0", 23 | "autoprefixer": "^10.4.14", 24 | "postcss": "^8.4.21", 25 | "tailwindcss": "^3.2.7", 26 | "vite": "^4.1.0" 27 | } 28 | } -------------------------------------------------------------------------------- /client/pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.4 2 | 3 | specifiers: 4 | '@types/react': ^18.0.27 5 | '@types/react-dom': ^18.0.10 6 | '@vitejs/plugin-react': ^3.1.0 7 | autoprefixer: ^10.4.14 8 | axios: ^1.3.4 9 | postcss: ^8.4.21 10 | react: ^18.2.0 11 | react-dom: ^18.2.0 12 | react-hook-form: ^7.43.5 13 | react-hot-toast: ^2.4.0 14 | react-router-dom: ^6.9.0 15 | tailwindcss: ^3.2.7 16 | vite: ^4.1.0 17 | 18 | dependencies: 19 | axios: 1.3.4 20 | react: 18.2.0 21 | react-dom: 18.2.0_react@18.2.0 22 | react-hook-form: 7.43.5_react@18.2.0 23 | react-hot-toast: 2.4.0_biqbaboplfbrettd7655fr4n2y 24 | react-router-dom: 6.9.0_biqbaboplfbrettd7655fr4n2y 25 | 26 | devDependencies: 27 | '@types/react': 18.0.28 28 | '@types/react-dom': 18.0.11 29 | '@vitejs/plugin-react': 3.1.0_vite@4.1.4 30 | autoprefixer: 10.4.14_postcss@8.4.21 31 | postcss: 8.4.21 32 | tailwindcss: 3.2.7_postcss@8.4.21 33 | vite: 4.1.4 34 | 35 | packages: 36 | 37 | /@ampproject/remapping/2.2.0: 38 | resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} 39 | engines: {node: '>=6.0.0'} 40 | dependencies: 41 | '@jridgewell/gen-mapping': 0.1.1 42 | '@jridgewell/trace-mapping': 0.3.17 43 | dev: true 44 | 45 | /@babel/code-frame/7.18.6: 46 | resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==} 47 | engines: {node: '>=6.9.0'} 48 | dependencies: 49 | '@babel/highlight': 7.18.6 50 | dev: true 51 | 52 | /@babel/compat-data/7.21.0: 53 | resolution: {integrity: sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==} 54 | engines: {node: '>=6.9.0'} 55 | dev: true 56 | 57 | /@babel/core/7.21.0: 58 | resolution: {integrity: sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA==} 59 | engines: {node: '>=6.9.0'} 60 | dependencies: 61 | '@ampproject/remapping': 2.2.0 62 | '@babel/code-frame': 7.18.6 63 | '@babel/generator': 7.21.1 64 | '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.21.0 65 | '@babel/helper-module-transforms': 7.21.2 66 | '@babel/helpers': 7.21.0 67 | '@babel/parser': 7.21.2 68 | '@babel/template': 7.20.7 69 | '@babel/traverse': 7.21.2 70 | '@babel/types': 7.21.2 71 | convert-source-map: 1.9.0 72 | debug: 4.3.4 73 | gensync: 1.0.0-beta.2 74 | json5: 2.2.3 75 | semver: 6.3.0 76 | transitivePeerDependencies: 77 | - supports-color 78 | dev: true 79 | 80 | /@babel/generator/7.21.1: 81 | resolution: {integrity: sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==} 82 | engines: {node: '>=6.9.0'} 83 | dependencies: 84 | '@babel/types': 7.21.2 85 | '@jridgewell/gen-mapping': 0.3.2 86 | '@jridgewell/trace-mapping': 0.3.17 87 | jsesc: 2.5.2 88 | dev: true 89 | 90 | /@babel/helper-compilation-targets/7.20.7_@babel+core@7.21.0: 91 | resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==} 92 | engines: {node: '>=6.9.0'} 93 | peerDependencies: 94 | '@babel/core': ^7.0.0 95 | dependencies: 96 | '@babel/compat-data': 7.21.0 97 | '@babel/core': 7.21.0 98 | '@babel/helper-validator-option': 7.21.0 99 | browserslist: 4.21.5 100 | lru-cache: 5.1.1 101 | semver: 6.3.0 102 | dev: true 103 | 104 | /@babel/helper-environment-visitor/7.18.9: 105 | resolution: {integrity: sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==} 106 | engines: {node: '>=6.9.0'} 107 | dev: true 108 | 109 | /@babel/helper-function-name/7.21.0: 110 | resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==} 111 | engines: {node: '>=6.9.0'} 112 | dependencies: 113 | '@babel/template': 7.20.7 114 | '@babel/types': 7.21.2 115 | dev: true 116 | 117 | /@babel/helper-hoist-variables/7.18.6: 118 | resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} 119 | engines: {node: '>=6.9.0'} 120 | dependencies: 121 | '@babel/types': 7.21.2 122 | dev: true 123 | 124 | /@babel/helper-module-imports/7.18.6: 125 | resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} 126 | engines: {node: '>=6.9.0'} 127 | dependencies: 128 | '@babel/types': 7.21.2 129 | dev: true 130 | 131 | /@babel/helper-module-transforms/7.21.2: 132 | resolution: {integrity: sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==} 133 | engines: {node: '>=6.9.0'} 134 | dependencies: 135 | '@babel/helper-environment-visitor': 7.18.9 136 | '@babel/helper-module-imports': 7.18.6 137 | '@babel/helper-simple-access': 7.20.2 138 | '@babel/helper-split-export-declaration': 7.18.6 139 | '@babel/helper-validator-identifier': 7.19.1 140 | '@babel/template': 7.20.7 141 | '@babel/traverse': 7.21.2 142 | '@babel/types': 7.21.2 143 | transitivePeerDependencies: 144 | - supports-color 145 | dev: true 146 | 147 | /@babel/helper-plugin-utils/7.20.2: 148 | resolution: {integrity: sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==} 149 | engines: {node: '>=6.9.0'} 150 | dev: true 151 | 152 | /@babel/helper-simple-access/7.20.2: 153 | resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} 154 | engines: {node: '>=6.9.0'} 155 | dependencies: 156 | '@babel/types': 7.21.2 157 | dev: true 158 | 159 | /@babel/helper-split-export-declaration/7.18.6: 160 | resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} 161 | engines: {node: '>=6.9.0'} 162 | dependencies: 163 | '@babel/types': 7.21.2 164 | dev: true 165 | 166 | /@babel/helper-string-parser/7.19.4: 167 | resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==} 168 | engines: {node: '>=6.9.0'} 169 | dev: true 170 | 171 | /@babel/helper-validator-identifier/7.19.1: 172 | resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} 173 | engines: {node: '>=6.9.0'} 174 | dev: true 175 | 176 | /@babel/helper-validator-option/7.21.0: 177 | resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==} 178 | engines: {node: '>=6.9.0'} 179 | dev: true 180 | 181 | /@babel/helpers/7.21.0: 182 | resolution: {integrity: sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==} 183 | engines: {node: '>=6.9.0'} 184 | dependencies: 185 | '@babel/template': 7.20.7 186 | '@babel/traverse': 7.21.2 187 | '@babel/types': 7.21.2 188 | transitivePeerDependencies: 189 | - supports-color 190 | dev: true 191 | 192 | /@babel/highlight/7.18.6: 193 | resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} 194 | engines: {node: '>=6.9.0'} 195 | dependencies: 196 | '@babel/helper-validator-identifier': 7.19.1 197 | chalk: 2.4.2 198 | js-tokens: 4.0.0 199 | dev: true 200 | 201 | /@babel/parser/7.21.2: 202 | resolution: {integrity: sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ==} 203 | engines: {node: '>=6.0.0'} 204 | hasBin: true 205 | dependencies: 206 | '@babel/types': 7.21.2 207 | dev: true 208 | 209 | /@babel/plugin-transform-react-jsx-self/7.21.0_@babel+core@7.21.0: 210 | resolution: {integrity: sha512-f/Eq+79JEu+KUANFks9UZCcvydOOGMgF7jBrcwjHa5jTZD8JivnhCJYvmlhR/WTXBWonDExPoW0eO/CR4QJirA==} 211 | engines: {node: '>=6.9.0'} 212 | peerDependencies: 213 | '@babel/core': ^7.0.0-0 214 | dependencies: 215 | '@babel/core': 7.21.0 216 | '@babel/helper-plugin-utils': 7.20.2 217 | dev: true 218 | 219 | /@babel/plugin-transform-react-jsx-source/7.19.6_@babel+core@7.21.0: 220 | resolution: {integrity: sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==} 221 | engines: {node: '>=6.9.0'} 222 | peerDependencies: 223 | '@babel/core': ^7.0.0-0 224 | dependencies: 225 | '@babel/core': 7.21.0 226 | '@babel/helper-plugin-utils': 7.20.2 227 | dev: true 228 | 229 | /@babel/template/7.20.7: 230 | resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} 231 | engines: {node: '>=6.9.0'} 232 | dependencies: 233 | '@babel/code-frame': 7.18.6 234 | '@babel/parser': 7.21.2 235 | '@babel/types': 7.21.2 236 | dev: true 237 | 238 | /@babel/traverse/7.21.2: 239 | resolution: {integrity: sha512-ts5FFU/dSUPS13tv8XiEObDu9K+iagEKME9kAbaP7r0Y9KtZJZ+NGndDvWoRAYNpeWafbpFeki3q9QoMD6gxyw==} 240 | engines: {node: '>=6.9.0'} 241 | dependencies: 242 | '@babel/code-frame': 7.18.6 243 | '@babel/generator': 7.21.1 244 | '@babel/helper-environment-visitor': 7.18.9 245 | '@babel/helper-function-name': 7.21.0 246 | '@babel/helper-hoist-variables': 7.18.6 247 | '@babel/helper-split-export-declaration': 7.18.6 248 | '@babel/parser': 7.21.2 249 | '@babel/types': 7.21.2 250 | debug: 4.3.4 251 | globals: 11.12.0 252 | transitivePeerDependencies: 253 | - supports-color 254 | dev: true 255 | 256 | /@babel/types/7.21.2: 257 | resolution: {integrity: sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw==} 258 | engines: {node: '>=6.9.0'} 259 | dependencies: 260 | '@babel/helper-string-parser': 7.19.4 261 | '@babel/helper-validator-identifier': 7.19.1 262 | to-fast-properties: 2.0.0 263 | dev: true 264 | 265 | /@esbuild/android-arm/0.16.17: 266 | resolution: {integrity: sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==} 267 | engines: {node: '>=12'} 268 | cpu: [arm] 269 | os: [android] 270 | requiresBuild: true 271 | dev: true 272 | optional: true 273 | 274 | /@esbuild/android-arm64/0.16.17: 275 | resolution: {integrity: sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==} 276 | engines: {node: '>=12'} 277 | cpu: [arm64] 278 | os: [android] 279 | requiresBuild: true 280 | dev: true 281 | optional: true 282 | 283 | /@esbuild/android-x64/0.16.17: 284 | resolution: {integrity: sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==} 285 | engines: {node: '>=12'} 286 | cpu: [x64] 287 | os: [android] 288 | requiresBuild: true 289 | dev: true 290 | optional: true 291 | 292 | /@esbuild/darwin-arm64/0.16.17: 293 | resolution: {integrity: sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==} 294 | engines: {node: '>=12'} 295 | cpu: [arm64] 296 | os: [darwin] 297 | requiresBuild: true 298 | dev: true 299 | optional: true 300 | 301 | /@esbuild/darwin-x64/0.16.17: 302 | resolution: {integrity: sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==} 303 | engines: {node: '>=12'} 304 | cpu: [x64] 305 | os: [darwin] 306 | requiresBuild: true 307 | dev: true 308 | optional: true 309 | 310 | /@esbuild/freebsd-arm64/0.16.17: 311 | resolution: {integrity: sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==} 312 | engines: {node: '>=12'} 313 | cpu: [arm64] 314 | os: [freebsd] 315 | requiresBuild: true 316 | dev: true 317 | optional: true 318 | 319 | /@esbuild/freebsd-x64/0.16.17: 320 | resolution: {integrity: sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==} 321 | engines: {node: '>=12'} 322 | cpu: [x64] 323 | os: [freebsd] 324 | requiresBuild: true 325 | dev: true 326 | optional: true 327 | 328 | /@esbuild/linux-arm/0.16.17: 329 | resolution: {integrity: sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==} 330 | engines: {node: '>=12'} 331 | cpu: [arm] 332 | os: [linux] 333 | requiresBuild: true 334 | dev: true 335 | optional: true 336 | 337 | /@esbuild/linux-arm64/0.16.17: 338 | resolution: {integrity: sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==} 339 | engines: {node: '>=12'} 340 | cpu: [arm64] 341 | os: [linux] 342 | requiresBuild: true 343 | dev: true 344 | optional: true 345 | 346 | /@esbuild/linux-ia32/0.16.17: 347 | resolution: {integrity: sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==} 348 | engines: {node: '>=12'} 349 | cpu: [ia32] 350 | os: [linux] 351 | requiresBuild: true 352 | dev: true 353 | optional: true 354 | 355 | /@esbuild/linux-loong64/0.16.17: 356 | resolution: {integrity: sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==} 357 | engines: {node: '>=12'} 358 | cpu: [loong64] 359 | os: [linux] 360 | requiresBuild: true 361 | dev: true 362 | optional: true 363 | 364 | /@esbuild/linux-mips64el/0.16.17: 365 | resolution: {integrity: sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==} 366 | engines: {node: '>=12'} 367 | cpu: [mips64el] 368 | os: [linux] 369 | requiresBuild: true 370 | dev: true 371 | optional: true 372 | 373 | /@esbuild/linux-ppc64/0.16.17: 374 | resolution: {integrity: sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==} 375 | engines: {node: '>=12'} 376 | cpu: [ppc64] 377 | os: [linux] 378 | requiresBuild: true 379 | dev: true 380 | optional: true 381 | 382 | /@esbuild/linux-riscv64/0.16.17: 383 | resolution: {integrity: sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==} 384 | engines: {node: '>=12'} 385 | cpu: [riscv64] 386 | os: [linux] 387 | requiresBuild: true 388 | dev: true 389 | optional: true 390 | 391 | /@esbuild/linux-s390x/0.16.17: 392 | resolution: {integrity: sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==} 393 | engines: {node: '>=12'} 394 | cpu: [s390x] 395 | os: [linux] 396 | requiresBuild: true 397 | dev: true 398 | optional: true 399 | 400 | /@esbuild/linux-x64/0.16.17: 401 | resolution: {integrity: sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==} 402 | engines: {node: '>=12'} 403 | cpu: [x64] 404 | os: [linux] 405 | requiresBuild: true 406 | dev: true 407 | optional: true 408 | 409 | /@esbuild/netbsd-x64/0.16.17: 410 | resolution: {integrity: sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==} 411 | engines: {node: '>=12'} 412 | cpu: [x64] 413 | os: [netbsd] 414 | requiresBuild: true 415 | dev: true 416 | optional: true 417 | 418 | /@esbuild/openbsd-x64/0.16.17: 419 | resolution: {integrity: sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==} 420 | engines: {node: '>=12'} 421 | cpu: [x64] 422 | os: [openbsd] 423 | requiresBuild: true 424 | dev: true 425 | optional: true 426 | 427 | /@esbuild/sunos-x64/0.16.17: 428 | resolution: {integrity: sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==} 429 | engines: {node: '>=12'} 430 | cpu: [x64] 431 | os: [sunos] 432 | requiresBuild: true 433 | dev: true 434 | optional: true 435 | 436 | /@esbuild/win32-arm64/0.16.17: 437 | resolution: {integrity: sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==} 438 | engines: {node: '>=12'} 439 | cpu: [arm64] 440 | os: [win32] 441 | requiresBuild: true 442 | dev: true 443 | optional: true 444 | 445 | /@esbuild/win32-ia32/0.16.17: 446 | resolution: {integrity: sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==} 447 | engines: {node: '>=12'} 448 | cpu: [ia32] 449 | os: [win32] 450 | requiresBuild: true 451 | dev: true 452 | optional: true 453 | 454 | /@esbuild/win32-x64/0.16.17: 455 | resolution: {integrity: sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==} 456 | engines: {node: '>=12'} 457 | cpu: [x64] 458 | os: [win32] 459 | requiresBuild: true 460 | dev: true 461 | optional: true 462 | 463 | /@jridgewell/gen-mapping/0.1.1: 464 | resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} 465 | engines: {node: '>=6.0.0'} 466 | dependencies: 467 | '@jridgewell/set-array': 1.1.2 468 | '@jridgewell/sourcemap-codec': 1.4.14 469 | dev: true 470 | 471 | /@jridgewell/gen-mapping/0.3.2: 472 | resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} 473 | engines: {node: '>=6.0.0'} 474 | dependencies: 475 | '@jridgewell/set-array': 1.1.2 476 | '@jridgewell/sourcemap-codec': 1.4.14 477 | '@jridgewell/trace-mapping': 0.3.17 478 | dev: true 479 | 480 | /@jridgewell/resolve-uri/3.1.0: 481 | resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} 482 | engines: {node: '>=6.0.0'} 483 | dev: true 484 | 485 | /@jridgewell/set-array/1.1.2: 486 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} 487 | engines: {node: '>=6.0.0'} 488 | dev: true 489 | 490 | /@jridgewell/sourcemap-codec/1.4.14: 491 | resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} 492 | dev: true 493 | 494 | /@jridgewell/trace-mapping/0.3.17: 495 | resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} 496 | dependencies: 497 | '@jridgewell/resolve-uri': 3.1.0 498 | '@jridgewell/sourcemap-codec': 1.4.14 499 | dev: true 500 | 501 | /@nodelib/fs.scandir/2.1.5: 502 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 503 | engines: {node: '>= 8'} 504 | dependencies: 505 | '@nodelib/fs.stat': 2.0.5 506 | run-parallel: 1.2.0 507 | dev: true 508 | 509 | /@nodelib/fs.stat/2.0.5: 510 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 511 | engines: {node: '>= 8'} 512 | dev: true 513 | 514 | /@nodelib/fs.walk/1.2.8: 515 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 516 | engines: {node: '>= 8'} 517 | dependencies: 518 | '@nodelib/fs.scandir': 2.1.5 519 | fastq: 1.15.0 520 | dev: true 521 | 522 | /@remix-run/router/1.4.0: 523 | resolution: {integrity: sha512-BJ9SxXux8zAg991UmT8slpwpsd31K1dHHbD3Ba4VzD+liLQ4WAMSxQp2d2ZPRPfN0jN2NPRowcSSoM7lCaF08Q==} 524 | engines: {node: '>=14'} 525 | dev: false 526 | 527 | /@types/prop-types/15.7.5: 528 | resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} 529 | dev: true 530 | 531 | /@types/react-dom/18.0.11: 532 | resolution: {integrity: sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==} 533 | dependencies: 534 | '@types/react': 18.0.28 535 | dev: true 536 | 537 | /@types/react/18.0.28: 538 | resolution: {integrity: sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==} 539 | dependencies: 540 | '@types/prop-types': 15.7.5 541 | '@types/scheduler': 0.16.2 542 | csstype: 3.1.1 543 | dev: true 544 | 545 | /@types/scheduler/0.16.2: 546 | resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==} 547 | dev: true 548 | 549 | /@vitejs/plugin-react/3.1.0_vite@4.1.4: 550 | resolution: {integrity: sha512-AfgcRL8ZBhAlc3BFdigClmTUMISmmzHn7sB2h9U1odvc5U/MjWXsAaz18b/WoppUTDBzxOJwo2VdClfUcItu9g==} 551 | engines: {node: ^14.18.0 || >=16.0.0} 552 | peerDependencies: 553 | vite: ^4.1.0-beta.0 554 | dependencies: 555 | '@babel/core': 7.21.0 556 | '@babel/plugin-transform-react-jsx-self': 7.21.0_@babel+core@7.21.0 557 | '@babel/plugin-transform-react-jsx-source': 7.19.6_@babel+core@7.21.0 558 | magic-string: 0.27.0 559 | react-refresh: 0.14.0 560 | vite: 4.1.4 561 | transitivePeerDependencies: 562 | - supports-color 563 | dev: true 564 | 565 | /acorn-node/1.8.2: 566 | resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==} 567 | dependencies: 568 | acorn: 7.4.1 569 | acorn-walk: 7.2.0 570 | xtend: 4.0.2 571 | dev: true 572 | 573 | /acorn-walk/7.2.0: 574 | resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} 575 | engines: {node: '>=0.4.0'} 576 | dev: true 577 | 578 | /acorn/7.4.1: 579 | resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} 580 | engines: {node: '>=0.4.0'} 581 | hasBin: true 582 | dev: true 583 | 584 | /ansi-styles/3.2.1: 585 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 586 | engines: {node: '>=4'} 587 | dependencies: 588 | color-convert: 1.9.3 589 | dev: true 590 | 591 | /anymatch/3.1.3: 592 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 593 | engines: {node: '>= 8'} 594 | dependencies: 595 | normalize-path: 3.0.0 596 | picomatch: 2.3.1 597 | dev: true 598 | 599 | /arg/5.0.2: 600 | resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} 601 | dev: true 602 | 603 | /asynckit/0.4.0: 604 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} 605 | dev: false 606 | 607 | /autoprefixer/10.4.14_postcss@8.4.21: 608 | resolution: {integrity: sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==} 609 | engines: {node: ^10 || ^12 || >=14} 610 | hasBin: true 611 | peerDependencies: 612 | postcss: ^8.1.0 613 | dependencies: 614 | browserslist: 4.21.5 615 | caniuse-lite: 1.0.30001464 616 | fraction.js: 4.2.0 617 | normalize-range: 0.1.2 618 | picocolors: 1.0.0 619 | postcss: 8.4.21 620 | postcss-value-parser: 4.2.0 621 | dev: true 622 | 623 | /axios/1.3.4: 624 | resolution: {integrity: sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==} 625 | dependencies: 626 | follow-redirects: 1.15.2 627 | form-data: 4.0.0 628 | proxy-from-env: 1.1.0 629 | transitivePeerDependencies: 630 | - debug 631 | dev: false 632 | 633 | /binary-extensions/2.2.0: 634 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 635 | engines: {node: '>=8'} 636 | dev: true 637 | 638 | /braces/3.0.2: 639 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 640 | engines: {node: '>=8'} 641 | dependencies: 642 | fill-range: 7.0.1 643 | dev: true 644 | 645 | /browserslist/4.21.5: 646 | resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} 647 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 648 | hasBin: true 649 | dependencies: 650 | caniuse-lite: 1.0.30001464 651 | electron-to-chromium: 1.4.328 652 | node-releases: 2.0.10 653 | update-browserslist-db: 1.0.10_browserslist@4.21.5 654 | dev: true 655 | 656 | /camelcase-css/2.0.1: 657 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} 658 | engines: {node: '>= 6'} 659 | dev: true 660 | 661 | /caniuse-lite/1.0.30001464: 662 | resolution: {integrity: sha512-oww27MtUmusatpRpCGSOneQk2/l5czXANDSFvsc7VuOQ86s3ANhZetpwXNf1zY/zdfP63Xvjz325DAdAoES13g==} 663 | dev: true 664 | 665 | /chalk/2.4.2: 666 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 667 | engines: {node: '>=4'} 668 | dependencies: 669 | ansi-styles: 3.2.1 670 | escape-string-regexp: 1.0.5 671 | supports-color: 5.5.0 672 | dev: true 673 | 674 | /chokidar/3.5.3: 675 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} 676 | engines: {node: '>= 8.10.0'} 677 | dependencies: 678 | anymatch: 3.1.3 679 | braces: 3.0.2 680 | glob-parent: 5.1.2 681 | is-binary-path: 2.1.0 682 | is-glob: 4.0.3 683 | normalize-path: 3.0.0 684 | readdirp: 3.6.0 685 | optionalDependencies: 686 | fsevents: 2.3.2 687 | dev: true 688 | 689 | /color-convert/1.9.3: 690 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 691 | dependencies: 692 | color-name: 1.1.3 693 | dev: true 694 | 695 | /color-name/1.1.3: 696 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 697 | dev: true 698 | 699 | /color-name/1.1.4: 700 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 701 | dev: true 702 | 703 | /combined-stream/1.0.8: 704 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} 705 | engines: {node: '>= 0.8'} 706 | dependencies: 707 | delayed-stream: 1.0.0 708 | dev: false 709 | 710 | /convert-source-map/1.9.0: 711 | resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} 712 | dev: true 713 | 714 | /cssesc/3.0.0: 715 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 716 | engines: {node: '>=4'} 717 | hasBin: true 718 | dev: true 719 | 720 | /csstype/3.1.1: 721 | resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==} 722 | dev: true 723 | 724 | /debug/4.3.4: 725 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 726 | engines: {node: '>=6.0'} 727 | peerDependencies: 728 | supports-color: '*' 729 | peerDependenciesMeta: 730 | supports-color: 731 | optional: true 732 | dependencies: 733 | ms: 2.1.2 734 | dev: true 735 | 736 | /defined/1.0.1: 737 | resolution: {integrity: sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==} 738 | dev: true 739 | 740 | /delayed-stream/1.0.0: 741 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} 742 | engines: {node: '>=0.4.0'} 743 | dev: false 744 | 745 | /detective/5.2.1: 746 | resolution: {integrity: sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==} 747 | engines: {node: '>=0.8.0'} 748 | hasBin: true 749 | dependencies: 750 | acorn-node: 1.8.2 751 | defined: 1.0.1 752 | minimist: 1.2.8 753 | dev: true 754 | 755 | /didyoumean/1.2.2: 756 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} 757 | dev: true 758 | 759 | /dlv/1.1.3: 760 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} 761 | dev: true 762 | 763 | /electron-to-chromium/1.4.328: 764 | resolution: {integrity: sha512-DE9tTy2PNmy1v55AZAO542ui+MLC2cvINMK4P2LXGsJdput/ThVG9t+QGecPuAZZSgC8XoI+Jh9M1OG9IoNSCw==} 765 | dev: true 766 | 767 | /esbuild/0.16.17: 768 | resolution: {integrity: sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==} 769 | engines: {node: '>=12'} 770 | hasBin: true 771 | requiresBuild: true 772 | optionalDependencies: 773 | '@esbuild/android-arm': 0.16.17 774 | '@esbuild/android-arm64': 0.16.17 775 | '@esbuild/android-x64': 0.16.17 776 | '@esbuild/darwin-arm64': 0.16.17 777 | '@esbuild/darwin-x64': 0.16.17 778 | '@esbuild/freebsd-arm64': 0.16.17 779 | '@esbuild/freebsd-x64': 0.16.17 780 | '@esbuild/linux-arm': 0.16.17 781 | '@esbuild/linux-arm64': 0.16.17 782 | '@esbuild/linux-ia32': 0.16.17 783 | '@esbuild/linux-loong64': 0.16.17 784 | '@esbuild/linux-mips64el': 0.16.17 785 | '@esbuild/linux-ppc64': 0.16.17 786 | '@esbuild/linux-riscv64': 0.16.17 787 | '@esbuild/linux-s390x': 0.16.17 788 | '@esbuild/linux-x64': 0.16.17 789 | '@esbuild/netbsd-x64': 0.16.17 790 | '@esbuild/openbsd-x64': 0.16.17 791 | '@esbuild/sunos-x64': 0.16.17 792 | '@esbuild/win32-arm64': 0.16.17 793 | '@esbuild/win32-ia32': 0.16.17 794 | '@esbuild/win32-x64': 0.16.17 795 | dev: true 796 | 797 | /escalade/3.1.1: 798 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 799 | engines: {node: '>=6'} 800 | dev: true 801 | 802 | /escape-string-regexp/1.0.5: 803 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 804 | engines: {node: '>=0.8.0'} 805 | dev: true 806 | 807 | /fast-glob/3.2.12: 808 | resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} 809 | engines: {node: '>=8.6.0'} 810 | dependencies: 811 | '@nodelib/fs.stat': 2.0.5 812 | '@nodelib/fs.walk': 1.2.8 813 | glob-parent: 5.1.2 814 | merge2: 1.4.1 815 | micromatch: 4.0.5 816 | dev: true 817 | 818 | /fastq/1.15.0: 819 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} 820 | dependencies: 821 | reusify: 1.0.4 822 | dev: true 823 | 824 | /fill-range/7.0.1: 825 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 826 | engines: {node: '>=8'} 827 | dependencies: 828 | to-regex-range: 5.0.1 829 | dev: true 830 | 831 | /follow-redirects/1.15.2: 832 | resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} 833 | engines: {node: '>=4.0'} 834 | peerDependencies: 835 | debug: '*' 836 | peerDependenciesMeta: 837 | debug: 838 | optional: true 839 | dev: false 840 | 841 | /form-data/4.0.0: 842 | resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} 843 | engines: {node: '>= 6'} 844 | dependencies: 845 | asynckit: 0.4.0 846 | combined-stream: 1.0.8 847 | mime-types: 2.1.35 848 | dev: false 849 | 850 | /fraction.js/4.2.0: 851 | resolution: {integrity: sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==} 852 | dev: true 853 | 854 | /fsevents/2.3.2: 855 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 856 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 857 | os: [darwin] 858 | requiresBuild: true 859 | dev: true 860 | optional: true 861 | 862 | /function-bind/1.1.1: 863 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 864 | dev: true 865 | 866 | /gensync/1.0.0-beta.2: 867 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 868 | engines: {node: '>=6.9.0'} 869 | dev: true 870 | 871 | /glob-parent/5.1.2: 872 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 873 | engines: {node: '>= 6'} 874 | dependencies: 875 | is-glob: 4.0.3 876 | dev: true 877 | 878 | /glob-parent/6.0.2: 879 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 880 | engines: {node: '>=10.13.0'} 881 | dependencies: 882 | is-glob: 4.0.3 883 | dev: true 884 | 885 | /globals/11.12.0: 886 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 887 | engines: {node: '>=4'} 888 | dev: true 889 | 890 | /goober/2.1.12: 891 | resolution: {integrity: sha512-yXHAvO08FU1JgTXX6Zn6sYCUFfB/OJSX8HHjDSgerZHZmFKAb08cykp5LBw5QnmyMcZyPRMqkdyHUSSzge788Q==} 892 | peerDependencies: 893 | csstype: ^3.0.10 894 | dev: false 895 | 896 | /has-flag/3.0.0: 897 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 898 | engines: {node: '>=4'} 899 | dev: true 900 | 901 | /has/1.0.3: 902 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 903 | engines: {node: '>= 0.4.0'} 904 | dependencies: 905 | function-bind: 1.1.1 906 | dev: true 907 | 908 | /is-binary-path/2.1.0: 909 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 910 | engines: {node: '>=8'} 911 | dependencies: 912 | binary-extensions: 2.2.0 913 | dev: true 914 | 915 | /is-core-module/2.11.0: 916 | resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} 917 | dependencies: 918 | has: 1.0.3 919 | dev: true 920 | 921 | /is-extglob/2.1.1: 922 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 923 | engines: {node: '>=0.10.0'} 924 | dev: true 925 | 926 | /is-glob/4.0.3: 927 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 928 | engines: {node: '>=0.10.0'} 929 | dependencies: 930 | is-extglob: 2.1.1 931 | dev: true 932 | 933 | /is-number/7.0.0: 934 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 935 | engines: {node: '>=0.12.0'} 936 | dev: true 937 | 938 | /js-tokens/4.0.0: 939 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 940 | 941 | /jsesc/2.5.2: 942 | resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} 943 | engines: {node: '>=4'} 944 | hasBin: true 945 | dev: true 946 | 947 | /json5/2.2.3: 948 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 949 | engines: {node: '>=6'} 950 | hasBin: true 951 | dev: true 952 | 953 | /lilconfig/2.1.0: 954 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} 955 | engines: {node: '>=10'} 956 | dev: true 957 | 958 | /loose-envify/1.4.0: 959 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 960 | hasBin: true 961 | dependencies: 962 | js-tokens: 4.0.0 963 | dev: false 964 | 965 | /lru-cache/5.1.1: 966 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} 967 | dependencies: 968 | yallist: 3.1.1 969 | dev: true 970 | 971 | /magic-string/0.27.0: 972 | resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} 973 | engines: {node: '>=12'} 974 | dependencies: 975 | '@jridgewell/sourcemap-codec': 1.4.14 976 | dev: true 977 | 978 | /merge2/1.4.1: 979 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 980 | engines: {node: '>= 8'} 981 | dev: true 982 | 983 | /micromatch/4.0.5: 984 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 985 | engines: {node: '>=8.6'} 986 | dependencies: 987 | braces: 3.0.2 988 | picomatch: 2.3.1 989 | dev: true 990 | 991 | /mime-db/1.52.0: 992 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 993 | engines: {node: '>= 0.6'} 994 | dev: false 995 | 996 | /mime-types/2.1.35: 997 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 998 | engines: {node: '>= 0.6'} 999 | dependencies: 1000 | mime-db: 1.52.0 1001 | dev: false 1002 | 1003 | /minimist/1.2.8: 1004 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 1005 | dev: true 1006 | 1007 | /ms/2.1.2: 1008 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1009 | dev: true 1010 | 1011 | /nanoid/3.3.4: 1012 | resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==} 1013 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1014 | hasBin: true 1015 | dev: true 1016 | 1017 | /node-releases/2.0.10: 1018 | resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} 1019 | dev: true 1020 | 1021 | /normalize-path/3.0.0: 1022 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1023 | engines: {node: '>=0.10.0'} 1024 | dev: true 1025 | 1026 | /normalize-range/0.1.2: 1027 | resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} 1028 | engines: {node: '>=0.10.0'} 1029 | dev: true 1030 | 1031 | /object-hash/3.0.0: 1032 | resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} 1033 | engines: {node: '>= 6'} 1034 | dev: true 1035 | 1036 | /path-parse/1.0.7: 1037 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1038 | dev: true 1039 | 1040 | /picocolors/1.0.0: 1041 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 1042 | dev: true 1043 | 1044 | /picomatch/2.3.1: 1045 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1046 | engines: {node: '>=8.6'} 1047 | dev: true 1048 | 1049 | /pify/2.3.0: 1050 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} 1051 | engines: {node: '>=0.10.0'} 1052 | dev: true 1053 | 1054 | /postcss-import/14.1.0_postcss@8.4.21: 1055 | resolution: {integrity: sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==} 1056 | engines: {node: '>=10.0.0'} 1057 | peerDependencies: 1058 | postcss: ^8.0.0 1059 | dependencies: 1060 | postcss: 8.4.21 1061 | postcss-value-parser: 4.2.0 1062 | read-cache: 1.0.0 1063 | resolve: 1.22.1 1064 | dev: true 1065 | 1066 | /postcss-js/4.0.1_postcss@8.4.21: 1067 | resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} 1068 | engines: {node: ^12 || ^14 || >= 16} 1069 | peerDependencies: 1070 | postcss: ^8.4.21 1071 | dependencies: 1072 | camelcase-css: 2.0.1 1073 | postcss: 8.4.21 1074 | dev: true 1075 | 1076 | /postcss-load-config/3.1.4_postcss@8.4.21: 1077 | resolution: {integrity: sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==} 1078 | engines: {node: '>= 10'} 1079 | peerDependencies: 1080 | postcss: '>=8.0.9' 1081 | ts-node: '>=9.0.0' 1082 | peerDependenciesMeta: 1083 | postcss: 1084 | optional: true 1085 | ts-node: 1086 | optional: true 1087 | dependencies: 1088 | lilconfig: 2.1.0 1089 | postcss: 8.4.21 1090 | yaml: 1.10.2 1091 | dev: true 1092 | 1093 | /postcss-nested/6.0.0_postcss@8.4.21: 1094 | resolution: {integrity: sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==} 1095 | engines: {node: '>=12.0'} 1096 | peerDependencies: 1097 | postcss: ^8.2.14 1098 | dependencies: 1099 | postcss: 8.4.21 1100 | postcss-selector-parser: 6.0.11 1101 | dev: true 1102 | 1103 | /postcss-selector-parser/6.0.11: 1104 | resolution: {integrity: sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==} 1105 | engines: {node: '>=4'} 1106 | dependencies: 1107 | cssesc: 3.0.0 1108 | util-deprecate: 1.0.2 1109 | dev: true 1110 | 1111 | /postcss-value-parser/4.2.0: 1112 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} 1113 | dev: true 1114 | 1115 | /postcss/8.4.21: 1116 | resolution: {integrity: sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==} 1117 | engines: {node: ^10 || ^12 || >=14} 1118 | dependencies: 1119 | nanoid: 3.3.4 1120 | picocolors: 1.0.0 1121 | source-map-js: 1.0.2 1122 | dev: true 1123 | 1124 | /proxy-from-env/1.1.0: 1125 | resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} 1126 | dev: false 1127 | 1128 | /queue-microtask/1.2.3: 1129 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1130 | dev: true 1131 | 1132 | /quick-lru/5.1.1: 1133 | resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} 1134 | engines: {node: '>=10'} 1135 | dev: true 1136 | 1137 | /react-dom/18.2.0_react@18.2.0: 1138 | resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} 1139 | peerDependencies: 1140 | react: ^18.2.0 1141 | dependencies: 1142 | loose-envify: 1.4.0 1143 | react: 18.2.0 1144 | scheduler: 0.23.0 1145 | dev: false 1146 | 1147 | /react-hook-form/7.43.5_react@18.2.0: 1148 | resolution: {integrity: sha512-YcaXhuFHoOPipu5pC7ckxrLrialiOcU91pKu8P+isAcXZyMgByUK9PkI9j5fENO4+6XU5PwWXRGMIFlk9u9UBQ==} 1149 | engines: {node: '>=12.22.0'} 1150 | peerDependencies: 1151 | react: ^16.8.0 || ^17 || ^18 1152 | dependencies: 1153 | react: 18.2.0 1154 | dev: false 1155 | 1156 | /react-hot-toast/2.4.0_biqbaboplfbrettd7655fr4n2y: 1157 | resolution: {integrity: sha512-qnnVbXropKuwUpriVVosgo8QrB+IaPJCpL8oBI6Ov84uvHZ5QQcTp2qg6ku2wNfgJl6rlQXJIQU5q+5lmPOutA==} 1158 | engines: {node: '>=10'} 1159 | peerDependencies: 1160 | react: '>=16' 1161 | react-dom: '>=16' 1162 | dependencies: 1163 | goober: 2.1.12 1164 | react: 18.2.0 1165 | react-dom: 18.2.0_react@18.2.0 1166 | transitivePeerDependencies: 1167 | - csstype 1168 | dev: false 1169 | 1170 | /react-refresh/0.14.0: 1171 | resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} 1172 | engines: {node: '>=0.10.0'} 1173 | dev: true 1174 | 1175 | /react-router-dom/6.9.0_biqbaboplfbrettd7655fr4n2y: 1176 | resolution: {integrity: sha512-/seUAPY01VAuwkGyVBPCn1OXfVbaWGGu4QN9uj0kCPcTyNYgL1ldZpxZUpRU7BLheKQI4Twtl/OW2nHRF1u26Q==} 1177 | engines: {node: '>=14'} 1178 | peerDependencies: 1179 | react: '>=16.8' 1180 | react-dom: '>=16.8' 1181 | dependencies: 1182 | '@remix-run/router': 1.4.0 1183 | react: 18.2.0 1184 | react-dom: 18.2.0_react@18.2.0 1185 | react-router: 6.9.0_react@18.2.0 1186 | dev: false 1187 | 1188 | /react-router/6.9.0_react@18.2.0: 1189 | resolution: {integrity: sha512-51lKevGNUHrt6kLuX3e/ihrXoXCa9ixY/nVWRLlob4r/l0f45x3SzBvYJe3ctleLUQQ5fVa4RGgJOTH7D9Umhw==} 1190 | engines: {node: '>=14'} 1191 | peerDependencies: 1192 | react: '>=16.8' 1193 | dependencies: 1194 | '@remix-run/router': 1.4.0 1195 | react: 18.2.0 1196 | dev: false 1197 | 1198 | /react/18.2.0: 1199 | resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} 1200 | engines: {node: '>=0.10.0'} 1201 | dependencies: 1202 | loose-envify: 1.4.0 1203 | dev: false 1204 | 1205 | /read-cache/1.0.0: 1206 | resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} 1207 | dependencies: 1208 | pify: 2.3.0 1209 | dev: true 1210 | 1211 | /readdirp/3.6.0: 1212 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 1213 | engines: {node: '>=8.10.0'} 1214 | dependencies: 1215 | picomatch: 2.3.1 1216 | dev: true 1217 | 1218 | /resolve/1.22.1: 1219 | resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} 1220 | hasBin: true 1221 | dependencies: 1222 | is-core-module: 2.11.0 1223 | path-parse: 1.0.7 1224 | supports-preserve-symlinks-flag: 1.0.0 1225 | dev: true 1226 | 1227 | /reusify/1.0.4: 1228 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1229 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1230 | dev: true 1231 | 1232 | /rollup/3.19.1: 1233 | resolution: {integrity: sha512-lAbrdN7neYCg/8WaoWn/ckzCtz+jr70GFfYdlf50OF7387HTg+wiuiqJRFYawwSPpqfqDNYqK7smY/ks2iAudg==} 1234 | engines: {node: '>=14.18.0', npm: '>=8.0.0'} 1235 | hasBin: true 1236 | optionalDependencies: 1237 | fsevents: 2.3.2 1238 | dev: true 1239 | 1240 | /run-parallel/1.2.0: 1241 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1242 | dependencies: 1243 | queue-microtask: 1.2.3 1244 | dev: true 1245 | 1246 | /scheduler/0.23.0: 1247 | resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} 1248 | dependencies: 1249 | loose-envify: 1.4.0 1250 | dev: false 1251 | 1252 | /semver/6.3.0: 1253 | resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} 1254 | hasBin: true 1255 | dev: true 1256 | 1257 | /source-map-js/1.0.2: 1258 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 1259 | engines: {node: '>=0.10.0'} 1260 | dev: true 1261 | 1262 | /supports-color/5.5.0: 1263 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 1264 | engines: {node: '>=4'} 1265 | dependencies: 1266 | has-flag: 3.0.0 1267 | dev: true 1268 | 1269 | /supports-preserve-symlinks-flag/1.0.0: 1270 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1271 | engines: {node: '>= 0.4'} 1272 | dev: true 1273 | 1274 | /tailwindcss/3.2.7_postcss@8.4.21: 1275 | resolution: {integrity: sha512-B6DLqJzc21x7wntlH/GsZwEXTBttVSl1FtCzC8WP4oBc/NKef7kaax5jeihkkCEWc831/5NDJ9gRNDK6NEioQQ==} 1276 | engines: {node: '>=12.13.0'} 1277 | hasBin: true 1278 | peerDependencies: 1279 | postcss: ^8.0.9 1280 | dependencies: 1281 | arg: 5.0.2 1282 | chokidar: 3.5.3 1283 | color-name: 1.1.4 1284 | detective: 5.2.1 1285 | didyoumean: 1.2.2 1286 | dlv: 1.1.3 1287 | fast-glob: 3.2.12 1288 | glob-parent: 6.0.2 1289 | is-glob: 4.0.3 1290 | lilconfig: 2.1.0 1291 | micromatch: 4.0.5 1292 | normalize-path: 3.0.0 1293 | object-hash: 3.0.0 1294 | picocolors: 1.0.0 1295 | postcss: 8.4.21 1296 | postcss-import: 14.1.0_postcss@8.4.21 1297 | postcss-js: 4.0.1_postcss@8.4.21 1298 | postcss-load-config: 3.1.4_postcss@8.4.21 1299 | postcss-nested: 6.0.0_postcss@8.4.21 1300 | postcss-selector-parser: 6.0.11 1301 | postcss-value-parser: 4.2.0 1302 | quick-lru: 5.1.1 1303 | resolve: 1.22.1 1304 | transitivePeerDependencies: 1305 | - ts-node 1306 | dev: true 1307 | 1308 | /to-fast-properties/2.0.0: 1309 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} 1310 | engines: {node: '>=4'} 1311 | dev: true 1312 | 1313 | /to-regex-range/5.0.1: 1314 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1315 | engines: {node: '>=8.0'} 1316 | dependencies: 1317 | is-number: 7.0.0 1318 | dev: true 1319 | 1320 | /update-browserslist-db/1.0.10_browserslist@4.21.5: 1321 | resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} 1322 | hasBin: true 1323 | peerDependencies: 1324 | browserslist: '>= 4.21.0' 1325 | dependencies: 1326 | browserslist: 4.21.5 1327 | escalade: 3.1.1 1328 | picocolors: 1.0.0 1329 | dev: true 1330 | 1331 | /util-deprecate/1.0.2: 1332 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 1333 | dev: true 1334 | 1335 | /vite/4.1.4: 1336 | resolution: {integrity: sha512-3knk/HsbSTKEin43zHu7jTwYWv81f8kgAL99G5NWBcA1LKvtvcVAC4JjBH1arBunO9kQka+1oGbrMKOjk4ZrBg==} 1337 | engines: {node: ^14.18.0 || >=16.0.0} 1338 | hasBin: true 1339 | peerDependencies: 1340 | '@types/node': '>= 14' 1341 | less: '*' 1342 | sass: '*' 1343 | stylus: '*' 1344 | sugarss: '*' 1345 | terser: ^5.4.0 1346 | peerDependenciesMeta: 1347 | '@types/node': 1348 | optional: true 1349 | less: 1350 | optional: true 1351 | sass: 1352 | optional: true 1353 | stylus: 1354 | optional: true 1355 | sugarss: 1356 | optional: true 1357 | terser: 1358 | optional: true 1359 | dependencies: 1360 | esbuild: 0.16.17 1361 | postcss: 8.4.21 1362 | resolve: 1.22.1 1363 | rollup: 3.19.1 1364 | optionalDependencies: 1365 | fsevents: 2.3.2 1366 | dev: true 1367 | 1368 | /xtend/4.0.2: 1369 | resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} 1370 | engines: {node: '>=0.4'} 1371 | dev: true 1372 | 1373 | /yallist/3.1.1: 1374 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 1375 | dev: true 1376 | 1377 | /yaml/1.10.2: 1378 | resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} 1379 | engines: {node: '>= 6'} 1380 | dev: true 1381 | -------------------------------------------------------------------------------- /client/postcss.config.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /client/public/vite.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/App.css: -------------------------------------------------------------------------------- 1 | #root { 2 | max-width: 1280px; 3 | margin: 0 auto; 4 | padding: 2rem; 5 | text-align: center; 6 | } 7 | 8 | .logo { 9 | height: 6em; 10 | padding: 1.5em; 11 | will-change: filter; 12 | transition: filter 300ms; 13 | } 14 | .logo:hover { 15 | filter: drop-shadow(0 0 2em #646cffaa); 16 | } 17 | .logo.react:hover { 18 | filter: drop-shadow(0 0 2em #61dafbaa); 19 | } 20 | 21 | @keyframes logo-spin { 22 | from { 23 | transform: rotate(0deg); 24 | } 25 | to { 26 | transform: rotate(360deg); 27 | } 28 | } 29 | 30 | @media (prefers-reduced-motion: no-preference) { 31 | a:nth-of-type(2) .logo { 32 | animation: logo-spin infinite 20s linear; 33 | } 34 | } 35 | 36 | .card { 37 | padding: 2em; 38 | } 39 | 40 | .read-the-docs { 41 | color: #888; 42 | } 43 | -------------------------------------------------------------------------------- /client/src/App.jsx: -------------------------------------------------------------------------------- 1 | import { BrowserRouter, Routes, Route, Navigate } from "react-router-dom"; 2 | import { Navigation } from "./components/Navigation"; 3 | import { TaskFormPage } from "./pages/TaskFormPage"; 4 | import { TasksPage } from "./pages/TasksPage"; 5 | import { Toaster } from "react-hot-toast"; 6 | 7 | function App() { 8 | return ( 9 | 10 |
11 | 12 | 13 | {/* redirect to tasks */} 14 | } /> 15 | } /> 16 | } /> 17 | } /> 18 | 19 | 20 |
21 |
22 | ); 23 | } 24 | 25 | export default App; 26 | -------------------------------------------------------------------------------- /client/src/api/tasks.api.js: -------------------------------------------------------------------------------- 1 | import axios from "axios"; 2 | 3 | const URL = 4 | process.env.NODE_ENV === "production" 5 | ? import.meta.env.VITE_BACKEND_URL 6 | : "http://localhost:8000"; 7 | 8 | console.log(URL); 9 | const tasksApi = axios.create({ 10 | baseURL: `${URL}/tasks/api/v1/tasks`, 11 | }); 12 | 13 | export const getAllTasks = () => tasksApi.get("/"); 14 | 15 | export const getTask = (id) => tasksApi.get(`/${id}`); 16 | 17 | export const createTask = (task) => tasksApi.post("/", task); 18 | 19 | export const updateTask = (id, task) => tasksApi.put(`/${id}/`, task); 20 | 21 | export const deleteTask = (id) => tasksApi.delete(`/${id}`); 22 | -------------------------------------------------------------------------------- /client/src/assets/react.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /client/src/components/Navigation.jsx: -------------------------------------------------------------------------------- 1 | import { Link } from "react-router-dom"; 2 | 3 | export function Navigation() { 4 | return ( 5 |
6 | 7 |

Tasks App

8 | 9 | 12 |
13 | ); 14 | } 15 | -------------------------------------------------------------------------------- /client/src/components/TaskCard.jsx: -------------------------------------------------------------------------------- 1 | import { useNavigate } from "react-router-dom"; 2 | 3 | export function TaskCard({ task }) { 4 | const navigate = useNavigate(); 5 | 6 | return ( 7 |
{ 10 | navigate(`/tasks/${task.id}`); 11 | }} 12 | > 13 |

14 | {task.title} 15 |

16 |

{task.description}

17 |
18 | ); 19 | } 20 | -------------------------------------------------------------------------------- /client/src/components/TasksList.jsx: -------------------------------------------------------------------------------- 1 | import { useEffect, useState } from "react"; 2 | import { getAllTasks } from "../api/tasks.api"; 3 | import { TaskCard } from "./TaskCard"; 4 | 5 | export function TasksList() { 6 | const [tasks, setTasks] = useState([]); 7 | 8 | useEffect(() => { 9 | async function loadTasks() { 10 | const res = await getAllTasks(); 11 | setTasks(res.data); 12 | } 13 | loadTasks(); 14 | }, []); 15 | 16 | return ( 17 |
18 | {tasks.map((task) => ( 19 | 20 | ))} 21 |
22 | ); 23 | } 24 | -------------------------------------------------------------------------------- /client/src/index.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | body { 6 | background-color: #202020; 7 | color: aliceblue; 8 | } -------------------------------------------------------------------------------- /client/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 | -------------------------------------------------------------------------------- /client/src/pages/TaskFormPage.jsx: -------------------------------------------------------------------------------- 1 | import { useEffect } from "react"; 2 | import { useForm } from "react-hook-form"; 3 | import { useNavigate, useParams } from "react-router-dom"; 4 | import { createTask, deleteTask, getTask, updateTask } from "../api/tasks.api"; 5 | import { toast } from "react-hot-toast"; 6 | 7 | export function TaskFormPage() { 8 | const { 9 | register, 10 | handleSubmit, 11 | formState: { errors }, 12 | setValue, 13 | } = useForm(); 14 | const navigate = useNavigate(); 15 | const params = useParams(); 16 | 17 | const onSubmit = handleSubmit(async (data) => { 18 | if (params.id) { 19 | await updateTask(params.id, data); 20 | toast.success("Task updated", { 21 | position: "bottom-right", 22 | style: { 23 | background: "#101010", 24 | color: "#fff", 25 | }, 26 | }); 27 | } else { 28 | await createTask(data); 29 | toast.success("New Task Added", { 30 | position: "bottom-right", 31 | style: { 32 | background: "#101010", 33 | color: "#fff", 34 | }, 35 | }); 36 | } 37 | 38 | navigate("/tasks"); 39 | }); 40 | 41 | useEffect(() => { 42 | async function loadTask() { 43 | if (params.id) { 44 | const { data } = await getTask(params.id); 45 | setValue("title", data.title); 46 | setValue("description", data.description); 47 | } 48 | } 49 | loadTask(); 50 | }, []); 51 | 52 | return ( 53 |
54 |
55 | 62 | 63 | {errors.title && This field is required} 64 | 65 |