├── .eslintrc.cjs ├── .gitignore ├── index.html ├── package.json ├── pnpm-lock.yaml ├── public └── vite.svg ├── src ├── App.css ├── App.jsx ├── assets │ └── react.svg ├── components │ ├── Navbar.jsx │ ├── TaskCard.jsx │ ├── TaskForm.jsx │ ├── TasksDoneList.jsx │ └── TasksList.jsx ├── context │ ├── AuthContext.jsx │ └── TaskContext.jsx ├── index.css ├── main.jsx ├── pages │ ├── Home.jsx │ ├── Login.jsx │ └── NotFound.jsx └── supabase │ └── client.js └── vite.config.js /.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | env: { browser: true, es2020: true }, 3 | extends: [ 4 | 'eslint:recommended', 5 | 'plugin:react/recommended', 6 | 'plugin:react/jsx-runtime', 7 | 'plugin:react-hooks/recommended', 8 | ], 9 | parserOptions: { ecmaVersion: 'latest', sourceType: 'module' }, 10 | settings: { react: { version: '18.2' } }, 11 | plugins: ['react-refresh'], 12 | rules: { 13 | 'react-refresh/only-export-components': 'warn', 14 | }, 15 | } 16 | -------------------------------------------------------------------------------- /.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 | 7 | Vite + React 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /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 | "lint": "eslint src --ext js,jsx --report-unused-disable-directives --max-warnings 0", 10 | "preview": "vite preview" 11 | }, 12 | "dependencies": { 13 | "@supabase/supabase-js": "^2.22.0", 14 | "react": "^18.2.0", 15 | "react-dom": "^18.2.0", 16 | "react-router-dom": "^6.11.1" 17 | }, 18 | "devDependencies": { 19 | "@types/react": "^18.0.28", 20 | "@types/react-dom": "^18.0.11", 21 | "@vitejs/plugin-react-swc": "^3.0.0", 22 | "eslint": "^8.38.0", 23 | "eslint-plugin-react": "^7.32.2", 24 | "eslint-plugin-react-hooks": "^4.6.0", 25 | "eslint-plugin-react-refresh": "^0.3.4", 26 | "vite": "^4.3.2" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.4 2 | 3 | specifiers: 4 | '@supabase/supabase-js': ^2.22.0 5 | '@types/react': ^18.0.28 6 | '@types/react-dom': ^18.0.11 7 | '@vitejs/plugin-react-swc': ^3.0.0 8 | eslint: ^8.38.0 9 | eslint-plugin-react: ^7.32.2 10 | eslint-plugin-react-hooks: ^4.6.0 11 | eslint-plugin-react-refresh: ^0.3.4 12 | react: ^18.2.0 13 | react-dom: ^18.2.0 14 | react-router-dom: ^6.11.1 15 | vite: ^4.3.2 16 | 17 | dependencies: 18 | '@supabase/supabase-js': 2.22.0 19 | react: 18.2.0 20 | react-dom: 18.2.0_react@18.2.0 21 | react-router-dom: 6.11.1_biqbaboplfbrettd7655fr4n2y 22 | 23 | devDependencies: 24 | '@types/react': 18.2.6 25 | '@types/react-dom': 18.2.4 26 | '@vitejs/plugin-react-swc': 3.3.1_vite@4.3.6 27 | eslint: 8.40.0 28 | eslint-plugin-react: 7.32.2_eslint@8.40.0 29 | eslint-plugin-react-hooks: 4.6.0_eslint@8.40.0 30 | eslint-plugin-react-refresh: 0.3.5_eslint@8.40.0 31 | vite: 4.3.6 32 | 33 | packages: 34 | 35 | /@esbuild/android-arm/0.17.19: 36 | resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==} 37 | engines: {node: '>=12'} 38 | cpu: [arm] 39 | os: [android] 40 | requiresBuild: true 41 | dev: true 42 | optional: true 43 | 44 | /@esbuild/android-arm64/0.17.19: 45 | resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} 46 | engines: {node: '>=12'} 47 | cpu: [arm64] 48 | os: [android] 49 | requiresBuild: true 50 | dev: true 51 | optional: true 52 | 53 | /@esbuild/android-x64/0.17.19: 54 | resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==} 55 | engines: {node: '>=12'} 56 | cpu: [x64] 57 | os: [android] 58 | requiresBuild: true 59 | dev: true 60 | optional: true 61 | 62 | /@esbuild/darwin-arm64/0.17.19: 63 | resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==} 64 | engines: {node: '>=12'} 65 | cpu: [arm64] 66 | os: [darwin] 67 | requiresBuild: true 68 | dev: true 69 | optional: true 70 | 71 | /@esbuild/darwin-x64/0.17.19: 72 | resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==} 73 | engines: {node: '>=12'} 74 | cpu: [x64] 75 | os: [darwin] 76 | requiresBuild: true 77 | dev: true 78 | optional: true 79 | 80 | /@esbuild/freebsd-arm64/0.17.19: 81 | resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==} 82 | engines: {node: '>=12'} 83 | cpu: [arm64] 84 | os: [freebsd] 85 | requiresBuild: true 86 | dev: true 87 | optional: true 88 | 89 | /@esbuild/freebsd-x64/0.17.19: 90 | resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==} 91 | engines: {node: '>=12'} 92 | cpu: [x64] 93 | os: [freebsd] 94 | requiresBuild: true 95 | dev: true 96 | optional: true 97 | 98 | /@esbuild/linux-arm/0.17.19: 99 | resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==} 100 | engines: {node: '>=12'} 101 | cpu: [arm] 102 | os: [linux] 103 | requiresBuild: true 104 | dev: true 105 | optional: true 106 | 107 | /@esbuild/linux-arm64/0.17.19: 108 | resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==} 109 | engines: {node: '>=12'} 110 | cpu: [arm64] 111 | os: [linux] 112 | requiresBuild: true 113 | dev: true 114 | optional: true 115 | 116 | /@esbuild/linux-ia32/0.17.19: 117 | resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==} 118 | engines: {node: '>=12'} 119 | cpu: [ia32] 120 | os: [linux] 121 | requiresBuild: true 122 | dev: true 123 | optional: true 124 | 125 | /@esbuild/linux-loong64/0.17.19: 126 | resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==} 127 | engines: {node: '>=12'} 128 | cpu: [loong64] 129 | os: [linux] 130 | requiresBuild: true 131 | dev: true 132 | optional: true 133 | 134 | /@esbuild/linux-mips64el/0.17.19: 135 | resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==} 136 | engines: {node: '>=12'} 137 | cpu: [mips64el] 138 | os: [linux] 139 | requiresBuild: true 140 | dev: true 141 | optional: true 142 | 143 | /@esbuild/linux-ppc64/0.17.19: 144 | resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==} 145 | engines: {node: '>=12'} 146 | cpu: [ppc64] 147 | os: [linux] 148 | requiresBuild: true 149 | dev: true 150 | optional: true 151 | 152 | /@esbuild/linux-riscv64/0.17.19: 153 | resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==} 154 | engines: {node: '>=12'} 155 | cpu: [riscv64] 156 | os: [linux] 157 | requiresBuild: true 158 | dev: true 159 | optional: true 160 | 161 | /@esbuild/linux-s390x/0.17.19: 162 | resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==} 163 | engines: {node: '>=12'} 164 | cpu: [s390x] 165 | os: [linux] 166 | requiresBuild: true 167 | dev: true 168 | optional: true 169 | 170 | /@esbuild/linux-x64/0.17.19: 171 | resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==} 172 | engines: {node: '>=12'} 173 | cpu: [x64] 174 | os: [linux] 175 | requiresBuild: true 176 | dev: true 177 | optional: true 178 | 179 | /@esbuild/netbsd-x64/0.17.19: 180 | resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==} 181 | engines: {node: '>=12'} 182 | cpu: [x64] 183 | os: [netbsd] 184 | requiresBuild: true 185 | dev: true 186 | optional: true 187 | 188 | /@esbuild/openbsd-x64/0.17.19: 189 | resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==} 190 | engines: {node: '>=12'} 191 | cpu: [x64] 192 | os: [openbsd] 193 | requiresBuild: true 194 | dev: true 195 | optional: true 196 | 197 | /@esbuild/sunos-x64/0.17.19: 198 | resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==} 199 | engines: {node: '>=12'} 200 | cpu: [x64] 201 | os: [sunos] 202 | requiresBuild: true 203 | dev: true 204 | optional: true 205 | 206 | /@esbuild/win32-arm64/0.17.19: 207 | resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==} 208 | engines: {node: '>=12'} 209 | cpu: [arm64] 210 | os: [win32] 211 | requiresBuild: true 212 | dev: true 213 | optional: true 214 | 215 | /@esbuild/win32-ia32/0.17.19: 216 | resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==} 217 | engines: {node: '>=12'} 218 | cpu: [ia32] 219 | os: [win32] 220 | requiresBuild: true 221 | dev: true 222 | optional: true 223 | 224 | /@esbuild/win32-x64/0.17.19: 225 | resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==} 226 | engines: {node: '>=12'} 227 | cpu: [x64] 228 | os: [win32] 229 | requiresBuild: true 230 | dev: true 231 | optional: true 232 | 233 | /@eslint-community/eslint-utils/4.4.0_eslint@8.40.0: 234 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 235 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 236 | peerDependencies: 237 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 238 | dependencies: 239 | eslint: 8.40.0 240 | eslint-visitor-keys: 3.4.1 241 | dev: true 242 | 243 | /@eslint-community/regexpp/4.5.1: 244 | resolution: {integrity: sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==} 245 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 246 | dev: true 247 | 248 | /@eslint/eslintrc/2.0.3: 249 | resolution: {integrity: sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==} 250 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 251 | dependencies: 252 | ajv: 6.12.6 253 | debug: 4.3.4 254 | espree: 9.5.2 255 | globals: 13.20.0 256 | ignore: 5.2.4 257 | import-fresh: 3.3.0 258 | js-yaml: 4.1.0 259 | minimatch: 3.1.2 260 | strip-json-comments: 3.1.1 261 | transitivePeerDependencies: 262 | - supports-color 263 | dev: true 264 | 265 | /@eslint/js/8.40.0: 266 | resolution: {integrity: sha512-ElyB54bJIhXQYVKjDSvCkPO1iU1tSAeVQJbllWJq1XQSmmA4dgFk8CbiBGpiOPxleE48vDogxCtmMYku4HSVLA==} 267 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 268 | dev: true 269 | 270 | /@humanwhocodes/config-array/0.11.8: 271 | resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==} 272 | engines: {node: '>=10.10.0'} 273 | dependencies: 274 | '@humanwhocodes/object-schema': 1.2.1 275 | debug: 4.3.4 276 | minimatch: 3.1.2 277 | transitivePeerDependencies: 278 | - supports-color 279 | dev: true 280 | 281 | /@humanwhocodes/module-importer/1.0.1: 282 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 283 | engines: {node: '>=12.22'} 284 | dev: true 285 | 286 | /@humanwhocodes/object-schema/1.2.1: 287 | resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} 288 | dev: true 289 | 290 | /@nodelib/fs.scandir/2.1.5: 291 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 292 | engines: {node: '>= 8'} 293 | dependencies: 294 | '@nodelib/fs.stat': 2.0.5 295 | run-parallel: 1.2.0 296 | dev: true 297 | 298 | /@nodelib/fs.stat/2.0.5: 299 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 300 | engines: {node: '>= 8'} 301 | dev: true 302 | 303 | /@nodelib/fs.walk/1.2.8: 304 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 305 | engines: {node: '>= 8'} 306 | dependencies: 307 | '@nodelib/fs.scandir': 2.1.5 308 | fastq: 1.15.0 309 | dev: true 310 | 311 | /@remix-run/router/1.6.1: 312 | resolution: {integrity: sha512-YUkWj+xs0oOzBe74OgErsuR3wVn+efrFhXBWrit50kOiED+pvQe2r6MWY0iJMQU/mSVKxvNzL4ZaYvjdX+G7ZA==} 313 | engines: {node: '>=14'} 314 | dev: false 315 | 316 | /@supabase/functions-js/2.1.1: 317 | resolution: {integrity: sha512-bIR1Puae6W+1/MzPfYBWOG/SCWGo4B5CB7c0ZZksvliNEAzhxNBJ0UFKYINcGdGtxG8ZC+1xr3utWpNZNwnoRw==} 318 | dependencies: 319 | cross-fetch: 3.1.6 320 | transitivePeerDependencies: 321 | - encoding 322 | dev: false 323 | 324 | /@supabase/gotrue-js/2.26.0: 325 | resolution: {integrity: sha512-orxz8nwaF5D1nY/9H5xxTfFSCTvYeDLx24UO/Mxsx83xFP0t5RNxQZ0lEHBOhHhXJ4vR/COv79AxoWCOTu/7Rg==} 326 | dependencies: 327 | cross-fetch: 3.1.6 328 | transitivePeerDependencies: 329 | - encoding 330 | dev: false 331 | 332 | /@supabase/postgrest-js/1.6.1: 333 | resolution: {integrity: sha512-WDBUPOCOwcZonaCwEodwdA8hwWYOiXroDF9vWGxZxKAnuSVE2Ieci/kvhR4EsWvgGST2h90LRowgO+msXe8+fA==} 334 | dependencies: 335 | cross-fetch: 3.1.6 336 | transitivePeerDependencies: 337 | - encoding 338 | dev: false 339 | 340 | /@supabase/realtime-js/2.7.2: 341 | resolution: {integrity: sha512-Fi6xAl5PUkqnjl3wo4rdcQIbMG3+yTRX1aUZe/yfvTG84RMvmCXJ1yN6MmafVLeZpU1xkaz5Vx4L0tnHcLiy6w==} 342 | dependencies: 343 | '@types/phoenix': 1.5.6 344 | '@types/websocket': 1.0.5 345 | websocket: 1.0.34 346 | transitivePeerDependencies: 347 | - supports-color 348 | dev: false 349 | 350 | /@supabase/storage-js/2.5.1: 351 | resolution: {integrity: sha512-nkR0fQA9ScAtIKA3vNoPEqbZv1k5B5HVRYEvRWdlP6mUpFphM9TwPL2jZ/ztNGMTG5xT6SrHr+H7Ykz8qzbhjw==} 352 | dependencies: 353 | cross-fetch: 3.1.6 354 | transitivePeerDependencies: 355 | - encoding 356 | dev: false 357 | 358 | /@supabase/supabase-js/2.22.0: 359 | resolution: {integrity: sha512-omkgSWL1HwnpXZZy+yshFLx/qqxwk9kx9jbRM6IHNEylKrH/sz6JX7rGyIOmN9niDxMRjsCu1nwuBhD6IiF2xg==} 360 | dependencies: 361 | '@supabase/functions-js': 2.1.1 362 | '@supabase/gotrue-js': 2.26.0 363 | '@supabase/postgrest-js': 1.6.1 364 | '@supabase/realtime-js': 2.7.2 365 | '@supabase/storage-js': 2.5.1 366 | cross-fetch: 3.1.6 367 | transitivePeerDependencies: 368 | - encoding 369 | - supports-color 370 | dev: false 371 | 372 | /@swc/core-darwin-arm64/1.3.58: 373 | resolution: {integrity: sha512-NwX9768gcM4HjBEE+2VCMB+h/5bwNDF4DngOTJa9w02l3AwGZXWE66X4ulJQ3Oxv8EAz1nzWb8lbi3XT+WCtmQ==} 374 | engines: {node: '>=10'} 375 | cpu: [arm64] 376 | os: [darwin] 377 | requiresBuild: true 378 | dev: true 379 | optional: true 380 | 381 | /@swc/core-darwin-x64/1.3.58: 382 | resolution: {integrity: sha512-XUdKXRIu8S7N5kmrtd0Nxf3uPIgZhQbgVHPhkvYH+Qwb+uXsdltKPiRwhvLI9M0yF3fvIrKtGJ8qUJdH5ih4zw==} 383 | engines: {node: '>=10'} 384 | cpu: [x64] 385 | os: [darwin] 386 | requiresBuild: true 387 | dev: true 388 | optional: true 389 | 390 | /@swc/core-linux-arm-gnueabihf/1.3.58: 391 | resolution: {integrity: sha512-9M3/5RzjCXnz94a1kxb+0eBzqyZkxzeYTMmvcjIJSy7MVvWNuy0wHuh+x96X/6197g40P9LkzAiZ7q0DvxSPQQ==} 392 | engines: {node: '>=10'} 393 | cpu: [arm] 394 | os: [linux] 395 | requiresBuild: true 396 | dev: true 397 | optional: true 398 | 399 | /@swc/core-linux-arm64-gnu/1.3.58: 400 | resolution: {integrity: sha512-hRjJIJdnYUAZlUi9ACCrsfS/hSFP4MmZRaUVOlQOif578Rw4kQlxsxFd1Rh1bhzUCid0KyZOyCvRzHSD/2ONgw==} 401 | engines: {node: '>=10'} 402 | cpu: [arm64] 403 | os: [linux] 404 | requiresBuild: true 405 | dev: true 406 | optional: true 407 | 408 | /@swc/core-linux-arm64-musl/1.3.58: 409 | resolution: {integrity: sha512-3wrqZbRhbTKtxcQebMAMGKtyypL6BQU0OwqzAk4dBIgm9GaH45xu7sH2OekfHMp3vuj4uWuere+tYtr9HU7xcQ==} 410 | engines: {node: '>=10'} 411 | cpu: [arm64] 412 | os: [linux] 413 | requiresBuild: true 414 | dev: true 415 | optional: true 416 | 417 | /@swc/core-linux-x64-gnu/1.3.58: 418 | resolution: {integrity: sha512-yOI5ucB+8g+gtp4L2AydPBThobZ2I3WR/dU2T+x2DFIE5Qpe/fqt6HPTFb02qmvqvOw36TLT45pRwAe4cY5LAw==} 419 | engines: {node: '>=10'} 420 | cpu: [x64] 421 | os: [linux] 422 | requiresBuild: true 423 | dev: true 424 | optional: true 425 | 426 | /@swc/core-linux-x64-musl/1.3.58: 427 | resolution: {integrity: sha512-xPwxgPLxSWXsK9Yf792SsUmLKISdShAI9o/Kk6jjv0r7PRBS25hZ5FyOjAb/rMbAzDcmyGKHevKc3TMUPSMjwg==} 428 | engines: {node: '>=10'} 429 | cpu: [x64] 430 | os: [linux] 431 | requiresBuild: true 432 | dev: true 433 | optional: true 434 | 435 | /@swc/core-win32-arm64-msvc/1.3.58: 436 | resolution: {integrity: sha512-HW61trwkYGiaFprc+fJay6IKJ3scdquSdJaXsyumGF+jc/5kokQzNfY+JH6RWpk0/8zHnUWI4e+iNGuMYxYGeA==} 437 | engines: {node: '>=10'} 438 | cpu: [arm64] 439 | os: [win32] 440 | requiresBuild: true 441 | dev: true 442 | optional: true 443 | 444 | /@swc/core-win32-ia32-msvc/1.3.58: 445 | resolution: {integrity: sha512-nODSJgHCY8GU6qHR9ieoxshaFD5GYGrPen/6VUvQkGwnV/yMI2Yvecgd1vLSUV4v67ZruPhIkP9OJruD+Juwhg==} 446 | engines: {node: '>=10'} 447 | cpu: [ia32] 448 | os: [win32] 449 | requiresBuild: true 450 | dev: true 451 | optional: true 452 | 453 | /@swc/core-win32-x64-msvc/1.3.58: 454 | resolution: {integrity: sha512-If/uQ3MW6Pdtah2FHhfBY2xBdBXBJzOusXpFQAkwNbaxnrJgpqIIxpYphwsJMDQp6ooSS3U90YizW7mJNxb6UA==} 455 | engines: {node: '>=10'} 456 | cpu: [x64] 457 | os: [win32] 458 | requiresBuild: true 459 | dev: true 460 | optional: true 461 | 462 | /@swc/core/1.3.58: 463 | resolution: {integrity: sha512-tSDcHXMBQIo2ohQ/0ryZnUA+0mBrVhe49+cR+QsFru+XEhCok1BLqdE6cZ2a+sgZ1I+Dmw8aTxYm8Ox64PSKPQ==} 464 | engines: {node: '>=10'} 465 | requiresBuild: true 466 | peerDependencies: 467 | '@swc/helpers': ^0.5.0 468 | peerDependenciesMeta: 469 | '@swc/helpers': 470 | optional: true 471 | optionalDependencies: 472 | '@swc/core-darwin-arm64': 1.3.58 473 | '@swc/core-darwin-x64': 1.3.58 474 | '@swc/core-linux-arm-gnueabihf': 1.3.58 475 | '@swc/core-linux-arm64-gnu': 1.3.58 476 | '@swc/core-linux-arm64-musl': 1.3.58 477 | '@swc/core-linux-x64-gnu': 1.3.58 478 | '@swc/core-linux-x64-musl': 1.3.58 479 | '@swc/core-win32-arm64-msvc': 1.3.58 480 | '@swc/core-win32-ia32-msvc': 1.3.58 481 | '@swc/core-win32-x64-msvc': 1.3.58 482 | dev: true 483 | 484 | /@types/node/20.1.4: 485 | resolution: {integrity: sha512-At4pvmIOki8yuwLtd7BNHl3CiWNbtclUbNtScGx4OHfBd4/oWoJC8KRCIxXwkdndzhxOsPXihrsOoydxBjlE9Q==} 486 | dev: false 487 | 488 | /@types/phoenix/1.5.6: 489 | resolution: {integrity: sha512-e7jZ6I9uyRGsg7MNwQcarmBvRlbGb9DibbocE9crVnxqsy6C23RMxLWbJ2CQ3vgCW7taoL1L+F02EcjA6ld7XA==} 490 | dev: false 491 | 492 | /@types/prop-types/15.7.5: 493 | resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} 494 | dev: true 495 | 496 | /@types/react-dom/18.2.4: 497 | resolution: {integrity: sha512-G2mHoTMTL4yoydITgOGwWdWMVd8sNgyEP85xVmMKAPUBwQWm9wBPQUmvbeF4V3WBY1P7mmL4BkjQ0SqUpf1snw==} 498 | dependencies: 499 | '@types/react': 18.2.6 500 | dev: true 501 | 502 | /@types/react/18.2.6: 503 | resolution: {integrity: sha512-wRZClXn//zxCFW+ye/D2qY65UsYP1Fpex2YXorHc8awoNamkMZSvBxwxdYVInsHOZZd2Ppq8isnSzJL5Mpf8OA==} 504 | dependencies: 505 | '@types/prop-types': 15.7.5 506 | '@types/scheduler': 0.16.3 507 | csstype: 3.1.2 508 | dev: true 509 | 510 | /@types/scheduler/0.16.3: 511 | resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==} 512 | dev: true 513 | 514 | /@types/websocket/1.0.5: 515 | resolution: {integrity: sha512-NbsqiNX9CnEfC1Z0Vf4mE1SgAJ07JnRYcNex7AJ9zAVzmiGHmjKFEk7O4TJIsgv2B1sLEb6owKFZrACwdYngsQ==} 516 | dependencies: 517 | '@types/node': 20.1.4 518 | dev: false 519 | 520 | /@vitejs/plugin-react-swc/3.3.1_vite@4.3.6: 521 | resolution: {integrity: sha512-ZoYjGxMniXP7X+5ry/W1tpY7w0OeLUEsBF5RHFPmAhpgwwNWie8OF4056MRXRi9QgvYYoZPDzdOXGK3wlCoTfQ==} 522 | peerDependencies: 523 | vite: ^4 524 | dependencies: 525 | '@swc/core': 1.3.58 526 | vite: 4.3.6 527 | transitivePeerDependencies: 528 | - '@swc/helpers' 529 | dev: true 530 | 531 | /acorn-jsx/5.3.2_acorn@8.8.2: 532 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 533 | peerDependencies: 534 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 535 | dependencies: 536 | acorn: 8.8.2 537 | dev: true 538 | 539 | /acorn/8.8.2: 540 | resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} 541 | engines: {node: '>=0.4.0'} 542 | hasBin: true 543 | dev: true 544 | 545 | /ajv/6.12.6: 546 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 547 | dependencies: 548 | fast-deep-equal: 3.1.3 549 | fast-json-stable-stringify: 2.1.0 550 | json-schema-traverse: 0.4.1 551 | uri-js: 4.4.1 552 | dev: true 553 | 554 | /ansi-regex/5.0.1: 555 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 556 | engines: {node: '>=8'} 557 | dev: true 558 | 559 | /ansi-styles/4.3.0: 560 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 561 | engines: {node: '>=8'} 562 | dependencies: 563 | color-convert: 2.0.1 564 | dev: true 565 | 566 | /argparse/2.0.1: 567 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 568 | dev: true 569 | 570 | /array-buffer-byte-length/1.0.0: 571 | resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} 572 | dependencies: 573 | call-bind: 1.0.2 574 | is-array-buffer: 3.0.2 575 | dev: true 576 | 577 | /array-includes/3.1.6: 578 | resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==} 579 | engines: {node: '>= 0.4'} 580 | dependencies: 581 | call-bind: 1.0.2 582 | define-properties: 1.2.0 583 | es-abstract: 1.21.2 584 | get-intrinsic: 1.2.1 585 | is-string: 1.0.7 586 | dev: true 587 | 588 | /array.prototype.flatmap/1.3.1: 589 | resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==} 590 | engines: {node: '>= 0.4'} 591 | dependencies: 592 | call-bind: 1.0.2 593 | define-properties: 1.2.0 594 | es-abstract: 1.21.2 595 | es-shim-unscopables: 1.0.0 596 | dev: true 597 | 598 | /array.prototype.tosorted/1.1.1: 599 | resolution: {integrity: sha512-pZYPXPRl2PqWcsUs6LOMn+1f1532nEoPTYowBtqLwAW+W8vSVhkIGnmOX1t/UQjD6YGI0vcD2B1U7ZFGQH9jnQ==} 600 | dependencies: 601 | call-bind: 1.0.2 602 | define-properties: 1.2.0 603 | es-abstract: 1.21.2 604 | es-shim-unscopables: 1.0.0 605 | get-intrinsic: 1.2.1 606 | dev: true 607 | 608 | /available-typed-arrays/1.0.5: 609 | resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} 610 | engines: {node: '>= 0.4'} 611 | dev: true 612 | 613 | /balanced-match/1.0.2: 614 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 615 | dev: true 616 | 617 | /brace-expansion/1.1.11: 618 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 619 | dependencies: 620 | balanced-match: 1.0.2 621 | concat-map: 0.0.1 622 | dev: true 623 | 624 | /bufferutil/4.0.7: 625 | resolution: {integrity: sha512-kukuqc39WOHtdxtw4UScxF/WVnMFVSQVKhtx3AjZJzhd0RGZZldcrfSEbVsWWe6KNH253574cq5F+wpv0G9pJw==} 626 | engines: {node: '>=6.14.2'} 627 | requiresBuild: true 628 | dependencies: 629 | node-gyp-build: 4.6.0 630 | dev: false 631 | 632 | /call-bind/1.0.2: 633 | resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} 634 | dependencies: 635 | function-bind: 1.1.1 636 | get-intrinsic: 1.2.1 637 | dev: true 638 | 639 | /callsites/3.1.0: 640 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 641 | engines: {node: '>=6'} 642 | dev: true 643 | 644 | /chalk/4.1.2: 645 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 646 | engines: {node: '>=10'} 647 | dependencies: 648 | ansi-styles: 4.3.0 649 | supports-color: 7.2.0 650 | dev: true 651 | 652 | /color-convert/2.0.1: 653 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 654 | engines: {node: '>=7.0.0'} 655 | dependencies: 656 | color-name: 1.1.4 657 | dev: true 658 | 659 | /color-name/1.1.4: 660 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 661 | dev: true 662 | 663 | /concat-map/0.0.1: 664 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 665 | dev: true 666 | 667 | /cross-fetch/3.1.6: 668 | resolution: {integrity: sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==} 669 | dependencies: 670 | node-fetch: 2.6.11 671 | transitivePeerDependencies: 672 | - encoding 673 | dev: false 674 | 675 | /cross-spawn/7.0.3: 676 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 677 | engines: {node: '>= 8'} 678 | dependencies: 679 | path-key: 3.1.1 680 | shebang-command: 2.0.0 681 | which: 2.0.2 682 | dev: true 683 | 684 | /csstype/3.1.2: 685 | resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} 686 | dev: true 687 | 688 | /d/1.0.1: 689 | resolution: {integrity: sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==} 690 | dependencies: 691 | es5-ext: 0.10.62 692 | type: 1.2.0 693 | dev: false 694 | 695 | /debug/2.6.9: 696 | resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} 697 | peerDependencies: 698 | supports-color: '*' 699 | peerDependenciesMeta: 700 | supports-color: 701 | optional: true 702 | dependencies: 703 | ms: 2.0.0 704 | dev: false 705 | 706 | /debug/4.3.4: 707 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 708 | engines: {node: '>=6.0'} 709 | peerDependencies: 710 | supports-color: '*' 711 | peerDependenciesMeta: 712 | supports-color: 713 | optional: true 714 | dependencies: 715 | ms: 2.1.2 716 | dev: true 717 | 718 | /deep-is/0.1.4: 719 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 720 | dev: true 721 | 722 | /define-properties/1.2.0: 723 | resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==} 724 | engines: {node: '>= 0.4'} 725 | dependencies: 726 | has-property-descriptors: 1.0.0 727 | object-keys: 1.1.1 728 | dev: true 729 | 730 | /doctrine/2.1.0: 731 | resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} 732 | engines: {node: '>=0.10.0'} 733 | dependencies: 734 | esutils: 2.0.3 735 | dev: true 736 | 737 | /doctrine/3.0.0: 738 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 739 | engines: {node: '>=6.0.0'} 740 | dependencies: 741 | esutils: 2.0.3 742 | dev: true 743 | 744 | /es-abstract/1.21.2: 745 | resolution: {integrity: sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==} 746 | engines: {node: '>= 0.4'} 747 | dependencies: 748 | array-buffer-byte-length: 1.0.0 749 | available-typed-arrays: 1.0.5 750 | call-bind: 1.0.2 751 | es-set-tostringtag: 2.0.1 752 | es-to-primitive: 1.2.1 753 | function.prototype.name: 1.1.5 754 | get-intrinsic: 1.2.1 755 | get-symbol-description: 1.0.0 756 | globalthis: 1.0.3 757 | gopd: 1.0.1 758 | has: 1.0.3 759 | has-property-descriptors: 1.0.0 760 | has-proto: 1.0.1 761 | has-symbols: 1.0.3 762 | internal-slot: 1.0.5 763 | is-array-buffer: 3.0.2 764 | is-callable: 1.2.7 765 | is-negative-zero: 2.0.2 766 | is-regex: 1.1.4 767 | is-shared-array-buffer: 1.0.2 768 | is-string: 1.0.7 769 | is-typed-array: 1.1.10 770 | is-weakref: 1.0.2 771 | object-inspect: 1.12.3 772 | object-keys: 1.1.1 773 | object.assign: 4.1.4 774 | regexp.prototype.flags: 1.5.0 775 | safe-regex-test: 1.0.0 776 | string.prototype.trim: 1.2.7 777 | string.prototype.trimend: 1.0.6 778 | string.prototype.trimstart: 1.0.6 779 | typed-array-length: 1.0.4 780 | unbox-primitive: 1.0.2 781 | which-typed-array: 1.1.9 782 | dev: true 783 | 784 | /es-set-tostringtag/2.0.1: 785 | resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} 786 | engines: {node: '>= 0.4'} 787 | dependencies: 788 | get-intrinsic: 1.2.1 789 | has: 1.0.3 790 | has-tostringtag: 1.0.0 791 | dev: true 792 | 793 | /es-shim-unscopables/1.0.0: 794 | resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==} 795 | dependencies: 796 | has: 1.0.3 797 | dev: true 798 | 799 | /es-to-primitive/1.2.1: 800 | resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} 801 | engines: {node: '>= 0.4'} 802 | dependencies: 803 | is-callable: 1.2.7 804 | is-date-object: 1.0.5 805 | is-symbol: 1.0.4 806 | dev: true 807 | 808 | /es5-ext/0.10.62: 809 | resolution: {integrity: sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==} 810 | engines: {node: '>=0.10'} 811 | requiresBuild: true 812 | dependencies: 813 | es6-iterator: 2.0.3 814 | es6-symbol: 3.1.3 815 | next-tick: 1.1.0 816 | dev: false 817 | 818 | /es6-iterator/2.0.3: 819 | resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==} 820 | dependencies: 821 | d: 1.0.1 822 | es5-ext: 0.10.62 823 | es6-symbol: 3.1.3 824 | dev: false 825 | 826 | /es6-symbol/3.1.3: 827 | resolution: {integrity: sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==} 828 | dependencies: 829 | d: 1.0.1 830 | ext: 1.7.0 831 | dev: false 832 | 833 | /esbuild/0.17.19: 834 | resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} 835 | engines: {node: '>=12'} 836 | hasBin: true 837 | requiresBuild: true 838 | optionalDependencies: 839 | '@esbuild/android-arm': 0.17.19 840 | '@esbuild/android-arm64': 0.17.19 841 | '@esbuild/android-x64': 0.17.19 842 | '@esbuild/darwin-arm64': 0.17.19 843 | '@esbuild/darwin-x64': 0.17.19 844 | '@esbuild/freebsd-arm64': 0.17.19 845 | '@esbuild/freebsd-x64': 0.17.19 846 | '@esbuild/linux-arm': 0.17.19 847 | '@esbuild/linux-arm64': 0.17.19 848 | '@esbuild/linux-ia32': 0.17.19 849 | '@esbuild/linux-loong64': 0.17.19 850 | '@esbuild/linux-mips64el': 0.17.19 851 | '@esbuild/linux-ppc64': 0.17.19 852 | '@esbuild/linux-riscv64': 0.17.19 853 | '@esbuild/linux-s390x': 0.17.19 854 | '@esbuild/linux-x64': 0.17.19 855 | '@esbuild/netbsd-x64': 0.17.19 856 | '@esbuild/openbsd-x64': 0.17.19 857 | '@esbuild/sunos-x64': 0.17.19 858 | '@esbuild/win32-arm64': 0.17.19 859 | '@esbuild/win32-ia32': 0.17.19 860 | '@esbuild/win32-x64': 0.17.19 861 | dev: true 862 | 863 | /escape-string-regexp/4.0.0: 864 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 865 | engines: {node: '>=10'} 866 | dev: true 867 | 868 | /eslint-plugin-react-hooks/4.6.0_eslint@8.40.0: 869 | resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} 870 | engines: {node: '>=10'} 871 | peerDependencies: 872 | eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 873 | dependencies: 874 | eslint: 8.40.0 875 | dev: true 876 | 877 | /eslint-plugin-react-refresh/0.3.5_eslint@8.40.0: 878 | resolution: {integrity: sha512-61qNIsc7fo9Pp/mju0J83kzvLm0Bsayu7OQSLEoJxLDCBjIIyb87bkzufoOvdDxLkSlMfkF7UxomC4+eztUBSA==} 879 | peerDependencies: 880 | eslint: '>=7' 881 | dependencies: 882 | eslint: 8.40.0 883 | dev: true 884 | 885 | /eslint-plugin-react/7.32.2_eslint@8.40.0: 886 | resolution: {integrity: sha512-t2fBMa+XzonrrNkyVirzKlvn5RXzzPwRHtMvLAtVZrt8oxgnTQaYbU6SXTOO1mwQgp1y5+toMSKInnzGr0Knqg==} 887 | engines: {node: '>=4'} 888 | peerDependencies: 889 | eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 890 | dependencies: 891 | array-includes: 3.1.6 892 | array.prototype.flatmap: 1.3.1 893 | array.prototype.tosorted: 1.1.1 894 | doctrine: 2.1.0 895 | eslint: 8.40.0 896 | estraverse: 5.3.0 897 | jsx-ast-utils: 3.3.3 898 | minimatch: 3.1.2 899 | object.entries: 1.1.6 900 | object.fromentries: 2.0.6 901 | object.hasown: 1.1.2 902 | object.values: 1.1.6 903 | prop-types: 15.8.1 904 | resolve: 2.0.0-next.4 905 | semver: 6.3.0 906 | string.prototype.matchall: 4.0.8 907 | dev: true 908 | 909 | /eslint-scope/7.2.0: 910 | resolution: {integrity: sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==} 911 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 912 | dependencies: 913 | esrecurse: 4.3.0 914 | estraverse: 5.3.0 915 | dev: true 916 | 917 | /eslint-visitor-keys/3.4.1: 918 | resolution: {integrity: sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==} 919 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 920 | dev: true 921 | 922 | /eslint/8.40.0: 923 | resolution: {integrity: sha512-bvR+TsP9EHL3TqNtj9sCNJVAFK3fBN8Q7g5waghxyRsPLIMwL73XSKnZFK0hk/O2ANC+iAoq6PWMQ+IfBAJIiQ==} 924 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 925 | hasBin: true 926 | dependencies: 927 | '@eslint-community/eslint-utils': 4.4.0_eslint@8.40.0 928 | '@eslint-community/regexpp': 4.5.1 929 | '@eslint/eslintrc': 2.0.3 930 | '@eslint/js': 8.40.0 931 | '@humanwhocodes/config-array': 0.11.8 932 | '@humanwhocodes/module-importer': 1.0.1 933 | '@nodelib/fs.walk': 1.2.8 934 | ajv: 6.12.6 935 | chalk: 4.1.2 936 | cross-spawn: 7.0.3 937 | debug: 4.3.4 938 | doctrine: 3.0.0 939 | escape-string-regexp: 4.0.0 940 | eslint-scope: 7.2.0 941 | eslint-visitor-keys: 3.4.1 942 | espree: 9.5.2 943 | esquery: 1.5.0 944 | esutils: 2.0.3 945 | fast-deep-equal: 3.1.3 946 | file-entry-cache: 6.0.1 947 | find-up: 5.0.0 948 | glob-parent: 6.0.2 949 | globals: 13.20.0 950 | grapheme-splitter: 1.0.4 951 | ignore: 5.2.4 952 | import-fresh: 3.3.0 953 | imurmurhash: 0.1.4 954 | is-glob: 4.0.3 955 | is-path-inside: 3.0.3 956 | js-sdsl: 4.4.0 957 | js-yaml: 4.1.0 958 | json-stable-stringify-without-jsonify: 1.0.1 959 | levn: 0.4.1 960 | lodash.merge: 4.6.2 961 | minimatch: 3.1.2 962 | natural-compare: 1.4.0 963 | optionator: 0.9.1 964 | strip-ansi: 6.0.1 965 | strip-json-comments: 3.1.1 966 | text-table: 0.2.0 967 | transitivePeerDependencies: 968 | - supports-color 969 | dev: true 970 | 971 | /espree/9.5.2: 972 | resolution: {integrity: sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==} 973 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 974 | dependencies: 975 | acorn: 8.8.2 976 | acorn-jsx: 5.3.2_acorn@8.8.2 977 | eslint-visitor-keys: 3.4.1 978 | dev: true 979 | 980 | /esquery/1.5.0: 981 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} 982 | engines: {node: '>=0.10'} 983 | dependencies: 984 | estraverse: 5.3.0 985 | dev: true 986 | 987 | /esrecurse/4.3.0: 988 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 989 | engines: {node: '>=4.0'} 990 | dependencies: 991 | estraverse: 5.3.0 992 | dev: true 993 | 994 | /estraverse/5.3.0: 995 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 996 | engines: {node: '>=4.0'} 997 | dev: true 998 | 999 | /esutils/2.0.3: 1000 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1001 | engines: {node: '>=0.10.0'} 1002 | dev: true 1003 | 1004 | /ext/1.7.0: 1005 | resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==} 1006 | dependencies: 1007 | type: 2.7.2 1008 | dev: false 1009 | 1010 | /fast-deep-equal/3.1.3: 1011 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1012 | dev: true 1013 | 1014 | /fast-json-stable-stringify/2.1.0: 1015 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1016 | dev: true 1017 | 1018 | /fast-levenshtein/2.0.6: 1019 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1020 | dev: true 1021 | 1022 | /fastq/1.15.0: 1023 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} 1024 | dependencies: 1025 | reusify: 1.0.4 1026 | dev: true 1027 | 1028 | /file-entry-cache/6.0.1: 1029 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 1030 | engines: {node: ^10.12.0 || >=12.0.0} 1031 | dependencies: 1032 | flat-cache: 3.0.4 1033 | dev: true 1034 | 1035 | /find-up/5.0.0: 1036 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1037 | engines: {node: '>=10'} 1038 | dependencies: 1039 | locate-path: 6.0.0 1040 | path-exists: 4.0.0 1041 | dev: true 1042 | 1043 | /flat-cache/3.0.4: 1044 | resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} 1045 | engines: {node: ^10.12.0 || >=12.0.0} 1046 | dependencies: 1047 | flatted: 3.2.7 1048 | rimraf: 3.0.2 1049 | dev: true 1050 | 1051 | /flatted/3.2.7: 1052 | resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} 1053 | dev: true 1054 | 1055 | /for-each/0.3.3: 1056 | resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} 1057 | dependencies: 1058 | is-callable: 1.2.7 1059 | dev: true 1060 | 1061 | /fs.realpath/1.0.0: 1062 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1063 | dev: true 1064 | 1065 | /fsevents/2.3.2: 1066 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 1067 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1068 | os: [darwin] 1069 | requiresBuild: true 1070 | dev: true 1071 | optional: true 1072 | 1073 | /function-bind/1.1.1: 1074 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 1075 | dev: true 1076 | 1077 | /function.prototype.name/1.1.5: 1078 | resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} 1079 | engines: {node: '>= 0.4'} 1080 | dependencies: 1081 | call-bind: 1.0.2 1082 | define-properties: 1.2.0 1083 | es-abstract: 1.21.2 1084 | functions-have-names: 1.2.3 1085 | dev: true 1086 | 1087 | /functions-have-names/1.2.3: 1088 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} 1089 | dev: true 1090 | 1091 | /get-intrinsic/1.2.1: 1092 | resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} 1093 | dependencies: 1094 | function-bind: 1.1.1 1095 | has: 1.0.3 1096 | has-proto: 1.0.1 1097 | has-symbols: 1.0.3 1098 | dev: true 1099 | 1100 | /get-symbol-description/1.0.0: 1101 | resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} 1102 | engines: {node: '>= 0.4'} 1103 | dependencies: 1104 | call-bind: 1.0.2 1105 | get-intrinsic: 1.2.1 1106 | dev: true 1107 | 1108 | /glob-parent/6.0.2: 1109 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1110 | engines: {node: '>=10.13.0'} 1111 | dependencies: 1112 | is-glob: 4.0.3 1113 | dev: true 1114 | 1115 | /glob/7.2.3: 1116 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 1117 | dependencies: 1118 | fs.realpath: 1.0.0 1119 | inflight: 1.0.6 1120 | inherits: 2.0.4 1121 | minimatch: 3.1.2 1122 | once: 1.4.0 1123 | path-is-absolute: 1.0.1 1124 | dev: true 1125 | 1126 | /globals/13.20.0: 1127 | resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} 1128 | engines: {node: '>=8'} 1129 | dependencies: 1130 | type-fest: 0.20.2 1131 | dev: true 1132 | 1133 | /globalthis/1.0.3: 1134 | resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} 1135 | engines: {node: '>= 0.4'} 1136 | dependencies: 1137 | define-properties: 1.2.0 1138 | dev: true 1139 | 1140 | /gopd/1.0.1: 1141 | resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} 1142 | dependencies: 1143 | get-intrinsic: 1.2.1 1144 | dev: true 1145 | 1146 | /grapheme-splitter/1.0.4: 1147 | resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} 1148 | dev: true 1149 | 1150 | /has-bigints/1.0.2: 1151 | resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} 1152 | dev: true 1153 | 1154 | /has-flag/4.0.0: 1155 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1156 | engines: {node: '>=8'} 1157 | dev: true 1158 | 1159 | /has-property-descriptors/1.0.0: 1160 | resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} 1161 | dependencies: 1162 | get-intrinsic: 1.2.1 1163 | dev: true 1164 | 1165 | /has-proto/1.0.1: 1166 | resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} 1167 | engines: {node: '>= 0.4'} 1168 | dev: true 1169 | 1170 | /has-symbols/1.0.3: 1171 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 1172 | engines: {node: '>= 0.4'} 1173 | dev: true 1174 | 1175 | /has-tostringtag/1.0.0: 1176 | resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} 1177 | engines: {node: '>= 0.4'} 1178 | dependencies: 1179 | has-symbols: 1.0.3 1180 | dev: true 1181 | 1182 | /has/1.0.3: 1183 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 1184 | engines: {node: '>= 0.4.0'} 1185 | dependencies: 1186 | function-bind: 1.1.1 1187 | dev: true 1188 | 1189 | /ignore/5.2.4: 1190 | resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} 1191 | engines: {node: '>= 4'} 1192 | dev: true 1193 | 1194 | /import-fresh/3.3.0: 1195 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1196 | engines: {node: '>=6'} 1197 | dependencies: 1198 | parent-module: 1.0.1 1199 | resolve-from: 4.0.0 1200 | dev: true 1201 | 1202 | /imurmurhash/0.1.4: 1203 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1204 | engines: {node: '>=0.8.19'} 1205 | dev: true 1206 | 1207 | /inflight/1.0.6: 1208 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1209 | dependencies: 1210 | once: 1.4.0 1211 | wrappy: 1.0.2 1212 | dev: true 1213 | 1214 | /inherits/2.0.4: 1215 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1216 | dev: true 1217 | 1218 | /internal-slot/1.0.5: 1219 | resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} 1220 | engines: {node: '>= 0.4'} 1221 | dependencies: 1222 | get-intrinsic: 1.2.1 1223 | has: 1.0.3 1224 | side-channel: 1.0.4 1225 | dev: true 1226 | 1227 | /is-array-buffer/3.0.2: 1228 | resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} 1229 | dependencies: 1230 | call-bind: 1.0.2 1231 | get-intrinsic: 1.2.1 1232 | is-typed-array: 1.1.10 1233 | dev: true 1234 | 1235 | /is-bigint/1.0.4: 1236 | resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} 1237 | dependencies: 1238 | has-bigints: 1.0.2 1239 | dev: true 1240 | 1241 | /is-boolean-object/1.1.2: 1242 | resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} 1243 | engines: {node: '>= 0.4'} 1244 | dependencies: 1245 | call-bind: 1.0.2 1246 | has-tostringtag: 1.0.0 1247 | dev: true 1248 | 1249 | /is-callable/1.2.7: 1250 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} 1251 | engines: {node: '>= 0.4'} 1252 | dev: true 1253 | 1254 | /is-core-module/2.12.0: 1255 | resolution: {integrity: sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==} 1256 | dependencies: 1257 | has: 1.0.3 1258 | dev: true 1259 | 1260 | /is-date-object/1.0.5: 1261 | resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} 1262 | engines: {node: '>= 0.4'} 1263 | dependencies: 1264 | has-tostringtag: 1.0.0 1265 | dev: true 1266 | 1267 | /is-extglob/2.1.1: 1268 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1269 | engines: {node: '>=0.10.0'} 1270 | dev: true 1271 | 1272 | /is-glob/4.0.3: 1273 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1274 | engines: {node: '>=0.10.0'} 1275 | dependencies: 1276 | is-extglob: 2.1.1 1277 | dev: true 1278 | 1279 | /is-negative-zero/2.0.2: 1280 | resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} 1281 | engines: {node: '>= 0.4'} 1282 | dev: true 1283 | 1284 | /is-number-object/1.0.7: 1285 | resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} 1286 | engines: {node: '>= 0.4'} 1287 | dependencies: 1288 | has-tostringtag: 1.0.0 1289 | dev: true 1290 | 1291 | /is-path-inside/3.0.3: 1292 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 1293 | engines: {node: '>=8'} 1294 | dev: true 1295 | 1296 | /is-regex/1.1.4: 1297 | resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} 1298 | engines: {node: '>= 0.4'} 1299 | dependencies: 1300 | call-bind: 1.0.2 1301 | has-tostringtag: 1.0.0 1302 | dev: true 1303 | 1304 | /is-shared-array-buffer/1.0.2: 1305 | resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} 1306 | dependencies: 1307 | call-bind: 1.0.2 1308 | dev: true 1309 | 1310 | /is-string/1.0.7: 1311 | resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} 1312 | engines: {node: '>= 0.4'} 1313 | dependencies: 1314 | has-tostringtag: 1.0.0 1315 | dev: true 1316 | 1317 | /is-symbol/1.0.4: 1318 | resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} 1319 | engines: {node: '>= 0.4'} 1320 | dependencies: 1321 | has-symbols: 1.0.3 1322 | dev: true 1323 | 1324 | /is-typed-array/1.1.10: 1325 | resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} 1326 | engines: {node: '>= 0.4'} 1327 | dependencies: 1328 | available-typed-arrays: 1.0.5 1329 | call-bind: 1.0.2 1330 | for-each: 0.3.3 1331 | gopd: 1.0.1 1332 | has-tostringtag: 1.0.0 1333 | dev: true 1334 | 1335 | /is-typedarray/1.0.0: 1336 | resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} 1337 | dev: false 1338 | 1339 | /is-weakref/1.0.2: 1340 | resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} 1341 | dependencies: 1342 | call-bind: 1.0.2 1343 | dev: true 1344 | 1345 | /isexe/2.0.0: 1346 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1347 | dev: true 1348 | 1349 | /js-sdsl/4.4.0: 1350 | resolution: {integrity: sha512-FfVSdx6pJ41Oa+CF7RDaFmTnCaFhua+SNYQX74riGOpl96x+2jQCqEfQ2bnXu/5DPCqlRuiqyvTJM0Qjz26IVg==} 1351 | dev: true 1352 | 1353 | /js-tokens/4.0.0: 1354 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1355 | 1356 | /js-yaml/4.1.0: 1357 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1358 | hasBin: true 1359 | dependencies: 1360 | argparse: 2.0.1 1361 | dev: true 1362 | 1363 | /json-schema-traverse/0.4.1: 1364 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1365 | dev: true 1366 | 1367 | /json-stable-stringify-without-jsonify/1.0.1: 1368 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1369 | dev: true 1370 | 1371 | /jsx-ast-utils/3.3.3: 1372 | resolution: {integrity: sha512-fYQHZTZ8jSfmWZ0iyzfwiU4WDX4HpHbMCZ3gPlWYiCl3BoeOTsqKBqnTVfH2rYT7eP5c3sVbeSPHnnJOaTrWiw==} 1373 | engines: {node: '>=4.0'} 1374 | dependencies: 1375 | array-includes: 3.1.6 1376 | object.assign: 4.1.4 1377 | dev: true 1378 | 1379 | /levn/0.4.1: 1380 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1381 | engines: {node: '>= 0.8.0'} 1382 | dependencies: 1383 | prelude-ls: 1.2.1 1384 | type-check: 0.4.0 1385 | dev: true 1386 | 1387 | /locate-path/6.0.0: 1388 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1389 | engines: {node: '>=10'} 1390 | dependencies: 1391 | p-locate: 5.0.0 1392 | dev: true 1393 | 1394 | /lodash.merge/4.6.2: 1395 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1396 | dev: true 1397 | 1398 | /loose-envify/1.4.0: 1399 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 1400 | hasBin: true 1401 | dependencies: 1402 | js-tokens: 4.0.0 1403 | 1404 | /minimatch/3.1.2: 1405 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1406 | dependencies: 1407 | brace-expansion: 1.1.11 1408 | dev: true 1409 | 1410 | /ms/2.0.0: 1411 | resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} 1412 | dev: false 1413 | 1414 | /ms/2.1.2: 1415 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1416 | dev: true 1417 | 1418 | /nanoid/3.3.6: 1419 | resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} 1420 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1421 | hasBin: true 1422 | dev: true 1423 | 1424 | /natural-compare/1.4.0: 1425 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1426 | dev: true 1427 | 1428 | /next-tick/1.1.0: 1429 | resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==} 1430 | dev: false 1431 | 1432 | /node-fetch/2.6.11: 1433 | resolution: {integrity: sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==} 1434 | engines: {node: 4.x || >=6.0.0} 1435 | peerDependencies: 1436 | encoding: ^0.1.0 1437 | peerDependenciesMeta: 1438 | encoding: 1439 | optional: true 1440 | dependencies: 1441 | whatwg-url: 5.0.0 1442 | dev: false 1443 | 1444 | /node-gyp-build/4.6.0: 1445 | resolution: {integrity: sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==} 1446 | hasBin: true 1447 | dev: false 1448 | 1449 | /object-assign/4.1.1: 1450 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1451 | engines: {node: '>=0.10.0'} 1452 | dev: true 1453 | 1454 | /object-inspect/1.12.3: 1455 | resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} 1456 | dev: true 1457 | 1458 | /object-keys/1.1.1: 1459 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 1460 | engines: {node: '>= 0.4'} 1461 | dev: true 1462 | 1463 | /object.assign/4.1.4: 1464 | resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} 1465 | engines: {node: '>= 0.4'} 1466 | dependencies: 1467 | call-bind: 1.0.2 1468 | define-properties: 1.2.0 1469 | has-symbols: 1.0.3 1470 | object-keys: 1.1.1 1471 | dev: true 1472 | 1473 | /object.entries/1.1.6: 1474 | resolution: {integrity: sha512-leTPzo4Zvg3pmbQ3rDK69Rl8GQvIqMWubrkxONG9/ojtFE2rD9fjMKfSI5BxW3osRH1m6VdzmqK8oAY9aT4x5w==} 1475 | engines: {node: '>= 0.4'} 1476 | dependencies: 1477 | call-bind: 1.0.2 1478 | define-properties: 1.2.0 1479 | es-abstract: 1.21.2 1480 | dev: true 1481 | 1482 | /object.fromentries/2.0.6: 1483 | resolution: {integrity: sha512-VciD13dswC4j1Xt5394WR4MzmAQmlgN72phd/riNp9vtD7tp4QQWJ0R4wvclXcafgcYK8veHRed2W6XeGBvcfg==} 1484 | engines: {node: '>= 0.4'} 1485 | dependencies: 1486 | call-bind: 1.0.2 1487 | define-properties: 1.2.0 1488 | es-abstract: 1.21.2 1489 | dev: true 1490 | 1491 | /object.hasown/1.1.2: 1492 | resolution: {integrity: sha512-B5UIT3J1W+WuWIU55h0mjlwaqxiE5vYENJXIXZ4VFe05pNYrkKuK0U/6aFcb0pKywYJh7IhfoqUfKVmrJJHZHw==} 1493 | dependencies: 1494 | define-properties: 1.2.0 1495 | es-abstract: 1.21.2 1496 | dev: true 1497 | 1498 | /object.values/1.1.6: 1499 | resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==} 1500 | engines: {node: '>= 0.4'} 1501 | dependencies: 1502 | call-bind: 1.0.2 1503 | define-properties: 1.2.0 1504 | es-abstract: 1.21.2 1505 | dev: true 1506 | 1507 | /once/1.4.0: 1508 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1509 | dependencies: 1510 | wrappy: 1.0.2 1511 | dev: true 1512 | 1513 | /optionator/0.9.1: 1514 | resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} 1515 | engines: {node: '>= 0.8.0'} 1516 | dependencies: 1517 | deep-is: 0.1.4 1518 | fast-levenshtein: 2.0.6 1519 | levn: 0.4.1 1520 | prelude-ls: 1.2.1 1521 | type-check: 0.4.0 1522 | word-wrap: 1.2.3 1523 | dev: true 1524 | 1525 | /p-limit/3.1.0: 1526 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1527 | engines: {node: '>=10'} 1528 | dependencies: 1529 | yocto-queue: 0.1.0 1530 | dev: true 1531 | 1532 | /p-locate/5.0.0: 1533 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1534 | engines: {node: '>=10'} 1535 | dependencies: 1536 | p-limit: 3.1.0 1537 | dev: true 1538 | 1539 | /parent-module/1.0.1: 1540 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1541 | engines: {node: '>=6'} 1542 | dependencies: 1543 | callsites: 3.1.0 1544 | dev: true 1545 | 1546 | /path-exists/4.0.0: 1547 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1548 | engines: {node: '>=8'} 1549 | dev: true 1550 | 1551 | /path-is-absolute/1.0.1: 1552 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1553 | engines: {node: '>=0.10.0'} 1554 | dev: true 1555 | 1556 | /path-key/3.1.1: 1557 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1558 | engines: {node: '>=8'} 1559 | dev: true 1560 | 1561 | /path-parse/1.0.7: 1562 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1563 | dev: true 1564 | 1565 | /picocolors/1.0.0: 1566 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 1567 | dev: true 1568 | 1569 | /postcss/8.4.23: 1570 | resolution: {integrity: sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==} 1571 | engines: {node: ^10 || ^12 || >=14} 1572 | dependencies: 1573 | nanoid: 3.3.6 1574 | picocolors: 1.0.0 1575 | source-map-js: 1.0.2 1576 | dev: true 1577 | 1578 | /prelude-ls/1.2.1: 1579 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1580 | engines: {node: '>= 0.8.0'} 1581 | dev: true 1582 | 1583 | /prop-types/15.8.1: 1584 | resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} 1585 | dependencies: 1586 | loose-envify: 1.4.0 1587 | object-assign: 4.1.1 1588 | react-is: 16.13.1 1589 | dev: true 1590 | 1591 | /punycode/2.3.0: 1592 | resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} 1593 | engines: {node: '>=6'} 1594 | dev: true 1595 | 1596 | /queue-microtask/1.2.3: 1597 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1598 | dev: true 1599 | 1600 | /react-dom/18.2.0_react@18.2.0: 1601 | resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} 1602 | peerDependencies: 1603 | react: ^18.2.0 1604 | dependencies: 1605 | loose-envify: 1.4.0 1606 | react: 18.2.0 1607 | scheduler: 0.23.0 1608 | dev: false 1609 | 1610 | /react-is/16.13.1: 1611 | resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} 1612 | dev: true 1613 | 1614 | /react-router-dom/6.11.1_biqbaboplfbrettd7655fr4n2y: 1615 | resolution: {integrity: sha512-dPC2MhoPeTQ1YUOt5uIK376SMNWbwUxYRWk2ZmTT4fZfwlOvabF8uduRKKJIyfkCZvMgiF0GSCQckmkGGijIrg==} 1616 | engines: {node: '>=14'} 1617 | peerDependencies: 1618 | react: '>=16.8' 1619 | react-dom: '>=16.8' 1620 | dependencies: 1621 | '@remix-run/router': 1.6.1 1622 | react: 18.2.0 1623 | react-dom: 18.2.0_react@18.2.0 1624 | react-router: 6.11.1_react@18.2.0 1625 | dev: false 1626 | 1627 | /react-router/6.11.1_react@18.2.0: 1628 | resolution: {integrity: sha512-OZINSdjJ2WgvAi7hgNLazrEV8SGn6xrKA+MkJe9wVDMZ3zQ6fdJocUjpCUCI0cNrelWjcvon0S/QK/j0NzL3KA==} 1629 | engines: {node: '>=14'} 1630 | peerDependencies: 1631 | react: '>=16.8' 1632 | dependencies: 1633 | '@remix-run/router': 1.6.1 1634 | react: 18.2.0 1635 | dev: false 1636 | 1637 | /react/18.2.0: 1638 | resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} 1639 | engines: {node: '>=0.10.0'} 1640 | dependencies: 1641 | loose-envify: 1.4.0 1642 | dev: false 1643 | 1644 | /regexp.prototype.flags/1.5.0: 1645 | resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==} 1646 | engines: {node: '>= 0.4'} 1647 | dependencies: 1648 | call-bind: 1.0.2 1649 | define-properties: 1.2.0 1650 | functions-have-names: 1.2.3 1651 | dev: true 1652 | 1653 | /resolve-from/4.0.0: 1654 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1655 | engines: {node: '>=4'} 1656 | dev: true 1657 | 1658 | /resolve/2.0.0-next.4: 1659 | resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==} 1660 | hasBin: true 1661 | dependencies: 1662 | is-core-module: 2.12.0 1663 | path-parse: 1.0.7 1664 | supports-preserve-symlinks-flag: 1.0.0 1665 | dev: true 1666 | 1667 | /reusify/1.0.4: 1668 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1669 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1670 | dev: true 1671 | 1672 | /rimraf/3.0.2: 1673 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 1674 | hasBin: true 1675 | dependencies: 1676 | glob: 7.2.3 1677 | dev: true 1678 | 1679 | /rollup/3.21.7: 1680 | resolution: {integrity: sha512-KXPaEuR8FfUoK2uHwNjxTmJ18ApyvD6zJpYv9FOJSqLStmt6xOY84l1IjK2dSolQmoXknrhEFRaPRgOPdqCT5w==} 1681 | engines: {node: '>=14.18.0', npm: '>=8.0.0'} 1682 | hasBin: true 1683 | optionalDependencies: 1684 | fsevents: 2.3.2 1685 | dev: true 1686 | 1687 | /run-parallel/1.2.0: 1688 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1689 | dependencies: 1690 | queue-microtask: 1.2.3 1691 | dev: true 1692 | 1693 | /safe-regex-test/1.0.0: 1694 | resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} 1695 | dependencies: 1696 | call-bind: 1.0.2 1697 | get-intrinsic: 1.2.1 1698 | is-regex: 1.1.4 1699 | dev: true 1700 | 1701 | /scheduler/0.23.0: 1702 | resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} 1703 | dependencies: 1704 | loose-envify: 1.4.0 1705 | dev: false 1706 | 1707 | /semver/6.3.0: 1708 | resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} 1709 | hasBin: true 1710 | dev: true 1711 | 1712 | /shebang-command/2.0.0: 1713 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1714 | engines: {node: '>=8'} 1715 | dependencies: 1716 | shebang-regex: 3.0.0 1717 | dev: true 1718 | 1719 | /shebang-regex/3.0.0: 1720 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1721 | engines: {node: '>=8'} 1722 | dev: true 1723 | 1724 | /side-channel/1.0.4: 1725 | resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} 1726 | dependencies: 1727 | call-bind: 1.0.2 1728 | get-intrinsic: 1.2.1 1729 | object-inspect: 1.12.3 1730 | dev: true 1731 | 1732 | /source-map-js/1.0.2: 1733 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 1734 | engines: {node: '>=0.10.0'} 1735 | dev: true 1736 | 1737 | /string.prototype.matchall/4.0.8: 1738 | resolution: {integrity: sha512-6zOCOcJ+RJAQshcTvXPHoxoQGONa3e/Lqx90wUA+wEzX78sg5Bo+1tQo4N0pohS0erG9qtCqJDjNCQBjeWVxyg==} 1739 | dependencies: 1740 | call-bind: 1.0.2 1741 | define-properties: 1.2.0 1742 | es-abstract: 1.21.2 1743 | get-intrinsic: 1.2.1 1744 | has-symbols: 1.0.3 1745 | internal-slot: 1.0.5 1746 | regexp.prototype.flags: 1.5.0 1747 | side-channel: 1.0.4 1748 | dev: true 1749 | 1750 | /string.prototype.trim/1.2.7: 1751 | resolution: {integrity: sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==} 1752 | engines: {node: '>= 0.4'} 1753 | dependencies: 1754 | call-bind: 1.0.2 1755 | define-properties: 1.2.0 1756 | es-abstract: 1.21.2 1757 | dev: true 1758 | 1759 | /string.prototype.trimend/1.0.6: 1760 | resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} 1761 | dependencies: 1762 | call-bind: 1.0.2 1763 | define-properties: 1.2.0 1764 | es-abstract: 1.21.2 1765 | dev: true 1766 | 1767 | /string.prototype.trimstart/1.0.6: 1768 | resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} 1769 | dependencies: 1770 | call-bind: 1.0.2 1771 | define-properties: 1.2.0 1772 | es-abstract: 1.21.2 1773 | dev: true 1774 | 1775 | /strip-ansi/6.0.1: 1776 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1777 | engines: {node: '>=8'} 1778 | dependencies: 1779 | ansi-regex: 5.0.1 1780 | dev: true 1781 | 1782 | /strip-json-comments/3.1.1: 1783 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1784 | engines: {node: '>=8'} 1785 | dev: true 1786 | 1787 | /supports-color/7.2.0: 1788 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1789 | engines: {node: '>=8'} 1790 | dependencies: 1791 | has-flag: 4.0.0 1792 | dev: true 1793 | 1794 | /supports-preserve-symlinks-flag/1.0.0: 1795 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1796 | engines: {node: '>= 0.4'} 1797 | dev: true 1798 | 1799 | /text-table/0.2.0: 1800 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 1801 | dev: true 1802 | 1803 | /tr46/0.0.3: 1804 | resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} 1805 | dev: false 1806 | 1807 | /type-check/0.4.0: 1808 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1809 | engines: {node: '>= 0.8.0'} 1810 | dependencies: 1811 | prelude-ls: 1.2.1 1812 | dev: true 1813 | 1814 | /type-fest/0.20.2: 1815 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 1816 | engines: {node: '>=10'} 1817 | dev: true 1818 | 1819 | /type/1.2.0: 1820 | resolution: {integrity: sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==} 1821 | dev: false 1822 | 1823 | /type/2.7.2: 1824 | resolution: {integrity: sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==} 1825 | dev: false 1826 | 1827 | /typed-array-length/1.0.4: 1828 | resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} 1829 | dependencies: 1830 | call-bind: 1.0.2 1831 | for-each: 0.3.3 1832 | is-typed-array: 1.1.10 1833 | dev: true 1834 | 1835 | /typedarray-to-buffer/3.1.5: 1836 | resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} 1837 | dependencies: 1838 | is-typedarray: 1.0.0 1839 | dev: false 1840 | 1841 | /unbox-primitive/1.0.2: 1842 | resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} 1843 | dependencies: 1844 | call-bind: 1.0.2 1845 | has-bigints: 1.0.2 1846 | has-symbols: 1.0.3 1847 | which-boxed-primitive: 1.0.2 1848 | dev: true 1849 | 1850 | /uri-js/4.4.1: 1851 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1852 | dependencies: 1853 | punycode: 2.3.0 1854 | dev: true 1855 | 1856 | /utf-8-validate/5.0.10: 1857 | resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} 1858 | engines: {node: '>=6.14.2'} 1859 | requiresBuild: true 1860 | dependencies: 1861 | node-gyp-build: 4.6.0 1862 | dev: false 1863 | 1864 | /vite/4.3.6: 1865 | resolution: {integrity: sha512-cqIyLSbA6gornMS659AXTVKF7cvSHMdKmJJwQ9DXq3lwsT1uZSdktuBRlpHQ8VnOWx0QHtjDwxPpGtyo9Fh/Qg==} 1866 | engines: {node: ^14.18.0 || >=16.0.0} 1867 | hasBin: true 1868 | peerDependencies: 1869 | '@types/node': '>= 14' 1870 | less: '*' 1871 | sass: '*' 1872 | stylus: '*' 1873 | sugarss: '*' 1874 | terser: ^5.4.0 1875 | peerDependenciesMeta: 1876 | '@types/node': 1877 | optional: true 1878 | less: 1879 | optional: true 1880 | sass: 1881 | optional: true 1882 | stylus: 1883 | optional: true 1884 | sugarss: 1885 | optional: true 1886 | terser: 1887 | optional: true 1888 | dependencies: 1889 | esbuild: 0.17.19 1890 | postcss: 8.4.23 1891 | rollup: 3.21.7 1892 | optionalDependencies: 1893 | fsevents: 2.3.2 1894 | dev: true 1895 | 1896 | /webidl-conversions/3.0.1: 1897 | resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} 1898 | dev: false 1899 | 1900 | /websocket/1.0.34: 1901 | resolution: {integrity: sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ==} 1902 | engines: {node: '>=4.0.0'} 1903 | dependencies: 1904 | bufferutil: 4.0.7 1905 | debug: 2.6.9 1906 | es5-ext: 0.10.62 1907 | typedarray-to-buffer: 3.1.5 1908 | utf-8-validate: 5.0.10 1909 | yaeti: 0.0.6 1910 | transitivePeerDependencies: 1911 | - supports-color 1912 | dev: false 1913 | 1914 | /whatwg-url/5.0.0: 1915 | resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} 1916 | dependencies: 1917 | tr46: 0.0.3 1918 | webidl-conversions: 3.0.1 1919 | dev: false 1920 | 1921 | /which-boxed-primitive/1.0.2: 1922 | resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} 1923 | dependencies: 1924 | is-bigint: 1.0.4 1925 | is-boolean-object: 1.1.2 1926 | is-number-object: 1.0.7 1927 | is-string: 1.0.7 1928 | is-symbol: 1.0.4 1929 | dev: true 1930 | 1931 | /which-typed-array/1.1.9: 1932 | resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} 1933 | engines: {node: '>= 0.4'} 1934 | dependencies: 1935 | available-typed-arrays: 1.0.5 1936 | call-bind: 1.0.2 1937 | for-each: 0.3.3 1938 | gopd: 1.0.1 1939 | has-tostringtag: 1.0.0 1940 | is-typed-array: 1.1.10 1941 | dev: true 1942 | 1943 | /which/2.0.2: 1944 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1945 | engines: {node: '>= 8'} 1946 | hasBin: true 1947 | dependencies: 1948 | isexe: 2.0.0 1949 | dev: true 1950 | 1951 | /word-wrap/1.2.3: 1952 | resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} 1953 | engines: {node: '>=0.10.0'} 1954 | dev: true 1955 | 1956 | /wrappy/1.0.2: 1957 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 1958 | dev: true 1959 | 1960 | /yaeti/0.0.6: 1961 | resolution: {integrity: sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==} 1962 | engines: {node: '>=0.10.32'} 1963 | dev: false 1964 | 1965 | /yocto-queue/0.1.0: 1966 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1967 | engines: {node: '>=10'} 1968 | dev: true 1969 | -------------------------------------------------------------------------------- /public/vite.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /src/App.jsx: -------------------------------------------------------------------------------- 1 | import { Routes, Route, useNavigate } from "react-router-dom"; 2 | import { supabase } from "./supabase/client"; 3 | import { useEffect } from "react"; 4 | import Navbar from './components/Navbar' 5 | import Home from './pages/Home' 6 | import Login from './pages/Login' 7 | import NotFound from './pages/NotFound' 8 | import { TaskContextProvider } from "./context/TaskContext"; 9 | import { AuthProvider } from "./context/AuthContext"; 10 | 11 | function App() { 12 | const navigate = useNavigate(); 13 | 14 | useEffect(() => { 15 | supabase.auth.onAuthStateChange((_event, session) => { 16 | if (!session) { 17 | navigate("/login"); 18 | } else { 19 | navigate("/"); 20 | } 21 | }); 22 | }, [navigate]); 23 | 24 | return ( 25 | 26 | 27 | 28 |
29 | 30 | } /> 31 | } /> 32 | } /> 33 | 34 |
35 |
36 |
37 | ) 38 | } 39 | 40 | export default App -------------------------------------------------------------------------------- /src/assets/react.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/components/Navbar.jsx: -------------------------------------------------------------------------------- 1 | import { useAuth } from "../context/AuthContext"; 2 | import { useTasks } from "../context/TaskContext"; 3 | import { Link } from "react-router-dom"; 4 | 5 | function Navbar() { 6 | const { logout } = useTasks(); 7 | const { user } = useAuth() 8 | 9 | return ( 10 | 37 | ); 38 | } 39 | 40 | export default Navbar; 41 | -------------------------------------------------------------------------------- /src/components/TaskCard.jsx: -------------------------------------------------------------------------------- 1 | import { useTasks } from "../context/TaskContext"; 2 | 3 | function TaskCard({ task }) { 4 | const { deleteTask, updateTasks } = useTasks(); 5 | 6 | const handleDelete = async (id) => { 7 | await deleteTask(id); 8 | }; 9 | 10 | const handleToggleDone = async (id, doneState) => { 11 | await updateTasks(id, { done: !doneState }); 12 | }; 13 | 14 | return ( 15 |
16 |

17 | {task.id}. {task.name} 18 |

19 | {task.done ? "Done" : "Not done"} 20 |
21 | 27 | 33 |
34 |
35 | ); 36 | } 37 | 38 | export default TaskCard; 39 | -------------------------------------------------------------------------------- /src/components/TaskForm.jsx: -------------------------------------------------------------------------------- 1 | import { useState } from "react"; 2 | import { useTasks } from "../context/TaskContext"; 3 | 4 | function TaskForm() { 5 | const [taskName, setTaskName] = useState(""); 6 | const { createTask, adding } = useTasks(); 7 | 8 | const handleSubmit = async (e) => { 9 | e.preventDefault(); 10 | try { 11 | await createTask(taskName); 12 | alert("Task created"); 13 | setTaskName(""); 14 | } catch (error) { 15 | console.log(error); 16 | } 17 | }; 18 | 19 | return ( 20 |
21 | setTaskName(e.target.value)} 26 | required 27 | placeholder="Write a task name" 28 | className="form-control" 29 | /> 30 |
31 | 34 |
35 |
36 | ); 37 | } 38 | 39 | export default TaskForm; 40 | -------------------------------------------------------------------------------- /src/components/TasksDoneList.jsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FaztWeb/react-supabase-auth-crud/220c57c0593ab792250624d69faec2fb02a4ec7c/src/components/TasksDoneList.jsx -------------------------------------------------------------------------------- /src/components/TasksList.jsx: -------------------------------------------------------------------------------- 1 | import { useEffect } from "react"; 2 | import { useTasks } from "../context/TaskContext"; 3 | import TaskCard from "./TaskCard"; 4 | 5 | function TasksList({ done = false }) { 6 | const { loading, getTasks, tasks } = useTasks(); 7 | 8 | useEffect(() => { 9 | getTasks(done); 10 | // eslint-disable-next-line react-hooks/exhaustive-deps 11 | }, [done]); 12 | 13 | function renderTasks() { 14 | if (loading) { 15 | return

Loading...

; 16 | } else if (tasks.length === 0) { 17 | return

No tasks

; 18 | } else { 19 | return tasks.map((task) => { 20 | return ; 21 | }); 22 | } 23 | } 24 | 25 | return
{renderTasks()}
; 26 | } 27 | 28 | export default TasksList; 29 | -------------------------------------------------------------------------------- /src/context/AuthContext.jsx: -------------------------------------------------------------------------------- 1 | import {createContext, useContext} from 'react' 2 | 3 | export const AuthContext = createContext() 4 | 5 | export function useAuth() { 6 | return useContext(AuthContext) 7 | } 8 | 9 | export function AuthProvider({children}) { 10 | return ( 11 | 14 | {children} 15 | 16 | ) 17 | } 18 | -------------------------------------------------------------------------------- /src/context/TaskContext.jsx: -------------------------------------------------------------------------------- 1 | import { createContext, useContext, useState } from "react"; 2 | import { supabase } from "../supabase/client"; 3 | 4 | export const TaskContext = createContext(); 5 | 6 | export const useTasks = () => { 7 | const context = useContext(TaskContext); 8 | if (context === undefined) { 9 | throw new Error("useTasks must be used within a TaskProvider"); 10 | } 11 | return context; 12 | }; 13 | 14 | export const TaskContextProvider = ({ children }) => { 15 | const [tasks, setTasks] = useState([]); 16 | const [loading, setLoading] = useState(false); 17 | const [adding, setAdding] = useState(false); 18 | 19 | const loginWithMagicLink = async (email) => { 20 | setLoading(true); 21 | try { 22 | const { error } = await supabase.auth.signIn({ email }); 23 | if (error) { 24 | throw error; 25 | } 26 | alert("check your email for the magic link"); 27 | } catch (error) { 28 | alert(error.message); 29 | } finally { 30 | setLoading(false); 31 | } 32 | }; 33 | 34 | const logout = async () => { 35 | setLoading(true); 36 | try { 37 | const { error } = await supabase.auth.signOut(); 38 | if (error) { 39 | throw error; 40 | } 41 | } catch (error) { 42 | alert(error.error_description || error.message); 43 | } finally { 44 | setLoading(false); 45 | } 46 | }; 47 | 48 | const createTask = async (taskName) => { 49 | setAdding(true); 50 | try { 51 | const user = supabase.auth.getUser(); 52 | 53 | const { error, data } = await supabase.from("tasks").insert({ 54 | name: taskName, 55 | userId: user.id, 56 | }); 57 | 58 | setTasks([...tasks, ...data]); 59 | 60 | if (error) { 61 | throw error; 62 | } 63 | } catch (error) { 64 | alert(error.error_description || error.message); 65 | } finally { 66 | setAdding(false); 67 | } 68 | }; 69 | 70 | const getTasks = async (done = false) => { 71 | setLoading(true); 72 | 73 | const user = supabase.auth.getUser(); 74 | 75 | try { 76 | const { error, data } = await supabase 77 | .from("tasks") 78 | .select("id, name, done") 79 | .eq("userId", user.id) 80 | .eq("done", done) 81 | .order("id", { ascending: false }); 82 | 83 | if (error) { 84 | throw error; 85 | } 86 | 87 | setTasks(data); 88 | } catch (error) { 89 | alert(error.error_description || error.message); 90 | } finally { 91 | setLoading(false); 92 | } 93 | }; 94 | 95 | const updateTasks = async (id, updatedFields) => { 96 | try { 97 | const user = supabase.auth.getUser(); 98 | const { error, data } = await supabase 99 | .from("tasks") 100 | .update(updatedFields) 101 | .eq("userId", user.id) 102 | .eq("id", id); 103 | if (error) { 104 | throw error; 105 | } 106 | 107 | setTasks(tasks.filter((task) => task.id !== data[0].id)); 108 | } catch (error) { 109 | alert(error.error_description || error.message); 110 | } 111 | }; 112 | 113 | const deleteTask = async (id) => { 114 | try { 115 | const user = supabase.auth.user(); 116 | 117 | const { error, data } = await supabase 118 | .from("tasks") 119 | .delete() 120 | .eq("userId", user.id) 121 | .eq("id", id); 122 | 123 | if (error) { 124 | throw error; 125 | } 126 | 127 | setTasks(tasks.filter((task) => task.id !== data[0].id)); 128 | } catch (error) { 129 | alert(error.error_description || error.message); 130 | } 131 | }; 132 | 133 | return ( 134 | 147 | {children} 148 | 149 | ); 150 | }; 151 | -------------------------------------------------------------------------------- /src/index.css: -------------------------------------------------------------------------------- 1 | :root { 2 | font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; 3 | line-height: 1.5; 4 | font-weight: 400; 5 | 6 | color-scheme: light dark; 7 | color: rgba(255, 255, 255, 0.87); 8 | background-color: #242424; 9 | 10 | font-synthesis: none; 11 | text-rendering: optimizeLegibility; 12 | -webkit-font-smoothing: antialiased; 13 | -moz-osx-font-smoothing: grayscale; 14 | -webkit-text-size-adjust: 100%; 15 | } 16 | 17 | a { 18 | font-weight: 500; 19 | color: #646cff; 20 | text-decoration: inherit; 21 | } 22 | a:hover { 23 | color: #535bf2; 24 | } 25 | 26 | body { 27 | margin: 0; 28 | display: flex; 29 | place-items: center; 30 | min-width: 320px; 31 | min-height: 100vh; 32 | } 33 | 34 | h1 { 35 | font-size: 3.2em; 36 | line-height: 1.1; 37 | } 38 | 39 | button { 40 | border-radius: 8px; 41 | border: 1px solid transparent; 42 | padding: 0.6em 1.2em; 43 | font-size: 1em; 44 | font-weight: 500; 45 | font-family: inherit; 46 | background-color: #1a1a1a; 47 | cursor: pointer; 48 | transition: border-color 0.25s; 49 | } 50 | button:hover { 51 | border-color: #646cff; 52 | } 53 | button:focus, 54 | button:focus-visible { 55 | outline: 4px auto -webkit-focus-ring-color; 56 | } 57 | 58 | @media (prefers-color-scheme: light) { 59 | :root { 60 | color: #213547; 61 | background-color: #ffffff; 62 | } 63 | a:hover { 64 | color: #747bff; 65 | } 66 | button { 67 | background-color: #f9f9f9; 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /src/main.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import ReactDOM from 'react-dom/client' 3 | import App from './App.jsx' 4 | import { BrowserRouter } from "react-router-dom"; 5 | import './index.css' 6 | 7 | ReactDOM.createRoot(document.getElementById('root')).render( 8 | 9 | 10 | 11 | 12 | , 13 | ) 14 | -------------------------------------------------------------------------------- /src/pages/Home.jsx: -------------------------------------------------------------------------------- 1 | import { useState, useEffect } from "react"; 2 | import { useNavigate } from "react-router-dom"; 3 | import TaskForm from "../components/TaskForm"; 4 | import TasksList from "../components/TasksList"; 5 | import { supabase } from "../supabase/client"; 6 | 7 | function Home() { 8 | const navigate = useNavigate(); 9 | const [showTasksDone, setShowTasksDone] = useState(false); 10 | 11 | useEffect(() => { 12 | if (!supabase.auth.getUser()) { 13 | navigate("/login"); 14 | } 15 | }, [navigate]); 16 | 17 | return ( 18 |
19 |
20 | 21 |
22 | {showTasksDone ? `Done Tasks` : "Tasks"} 23 | 29 |
30 | 31 | 32 |
33 |
34 | ); 35 | } 36 | 37 | export default Home; 38 | -------------------------------------------------------------------------------- /src/pages/Login.jsx: -------------------------------------------------------------------------------- 1 | import { useEffect, useState } from "react"; 2 | import { useTasks } from "../context/TaskContext"; 3 | import { supabase } from "../supabase/client"; 4 | import { useNavigate } from "react-router-dom"; 5 | 6 | function Login() { 7 | const [email, setEmail] = useState(""); 8 | const { loading, loginWithMagicLink } = useTasks(); 9 | const navigate = useNavigate(); 10 | 11 | const handleSubmit = (e) => { 12 | e.preventDefault(); 13 | loginWithMagicLink(email); 14 | }; 15 | 16 | useEffect(() => { 17 | if (supabase.auth.getUser()) { 18 | navigate("/"); 19 | } 20 | console.log("called"); 21 | }, [navigate]); 22 | 23 | return ( 24 |
25 |
26 |
27 | 28 | setEmail(e.target.value)} 33 | className="form-control mb-2" 34 | placeholder="youremail@site.com" 35 | required 36 | /> 37 |
38 | 41 |
42 |
43 |
44 |
45 | ); 46 | } 47 | 48 | export default Login; 49 | -------------------------------------------------------------------------------- /src/pages/NotFound.jsx: -------------------------------------------------------------------------------- 1 | function NotFound() { 2 | return ( 3 |
NotFound
4 | ) 5 | } 6 | 7 | export default NotFound -------------------------------------------------------------------------------- /src/supabase/client.js: -------------------------------------------------------------------------------- 1 | import { createClient } from "@supabase/supabase-js"; 2 | 3 | export const supabase = createClient( 4 | import.meta.env.VITE_SUPABASE_URL, 5 | import.meta.env.VITE_SUPABASE_KEY 6 | ); 7 | -------------------------------------------------------------------------------- /vite.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite' 2 | import react from '@vitejs/plugin-react-swc' 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig({ 6 | plugins: [react()], 7 | }) 8 | --------------------------------------------------------------------------------