diff --git a/.gitignore b/.gitignore index e0d08c3..68ceb0a 100644 --- a/.gitignore +++ b/.gitignore @@ -16,6 +16,7 @@ dev-dist # Editor directories and files .idea .DS_Store +.env *.suo *.ntvs* *.njsproj diff --git a/package-lock.json b/package-lock.json index 6a430d8..70e1702 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,8 @@ "@supabase/supabase-js": "^2.45.3", "@tanstack/react-router": "^1.56.2", "react": "^18.3.1", - "react-dom": "^18.3.1" + "react-dom": "^18.3.1", + "supabase": "^1.200.3" }, "devDependencies": { "@playwright/test": "^1.47.0", @@ -24,6 +25,7 @@ "@vite-pwa/assets-generator": "^0.2.4", "@vitejs/plugin-react": "^4.2.1", "autoprefixer": "^10.4.20", + "daisyui": "^4.12.10", "eslint": "^8.57.0", "eslint-plugin-react-hooks": "^4.6.2", "eslint-plugin-react-refresh": "^0.4.6", @@ -2387,7 +2389,6 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -2404,7 +2405,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, "engines": { "node": ">=12" }, @@ -2416,7 +2416,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, "dependencies": { "ansi-regex": "^6.0.1" }, @@ -2427,6 +2426,18 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", @@ -2524,7 +2535,6 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, "optional": true, "engines": { "node": ">=14" @@ -2615,208 +2625,224 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.2.tgz", - "integrity": "sha512-fSuPrt0ZO8uXeS+xP3b+yYTCBUd05MoSp2N/MFOgjhhUhMmchXlpTQrTpI8T+YAwAQuK7MafsCOxW7VrPMrJcg==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.4.tgz", + "integrity": "sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.2.tgz", - "integrity": "sha512-xGU5ZQmPlsjQS6tzTTGwMsnKUtu0WVbl0hYpTPauvbRAnmIvpInhJtgjj3mcuJpEiuUw4v1s4BimkdfDWlh7gA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.4.tgz", + "integrity": "sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.2.tgz", - "integrity": "sha512-99AhQ3/ZMxU7jw34Sq8brzXqWH/bMnf7ZVhvLk9QU2cOepbQSVTns6qoErJmSiAvU3InRqC2RRZ5ovh1KN0d0Q==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.4.tgz", + "integrity": "sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.2.tgz", - "integrity": "sha512-ZbRaUvw2iN/y37x6dY50D8m2BnDbBjlnMPotDi/qITMJ4sIxNY33HArjikDyakhSv0+ybdUxhWxE6kTI4oX26w==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.4.tgz", + "integrity": "sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.2.tgz", - "integrity": "sha512-ztRJJMiE8nnU1YFcdbd9BcH6bGWG1z+jP+IPW2oDUAPxPjo9dverIOyXz76m6IPA6udEL12reYeLojzW2cYL7w==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.4.tgz", + "integrity": "sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.2.tgz", - "integrity": "sha512-flOcGHDZajGKYpLV0JNc0VFH361M7rnV1ee+NTeC/BQQ1/0pllYcFmxpagltANYt8FYf9+kL6RSk80Ziwyhr7w==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.4.tgz", + "integrity": "sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.2.tgz", - "integrity": "sha512-69CF19Kp3TdMopyteO/LJbWufOzqqXzkrv4L2sP8kfMaAQ6iwky7NoXTp7bD6/irKgknDKM0P9E/1l5XxVQAhw==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.4.tgz", + "integrity": "sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.2.tgz", - "integrity": "sha512-48pD/fJkTiHAZTnZwR0VzHrao70/4MlzJrq0ZsILjLW/Ab/1XlVUStYyGt7tdyIiVSlGZbnliqmult/QGA2O2w==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.4.tgz", + "integrity": "sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.2.tgz", - "integrity": "sha512-cZdyuInj0ofc7mAQpKcPR2a2iu4YM4FQfuUzCVA2u4HI95lCwzjoPtdWjdpDKyHxI0UO82bLDoOaLfpZ/wviyQ==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.4.tgz", + "integrity": "sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg==", "cpu": [ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.2.tgz", - "integrity": "sha512-RL56JMT6NwQ0lXIQmMIWr1SW28z4E4pOhRRNqwWZeXpRlykRIlEpSWdsgNWJbYBEWD84eocjSGDu/XxbYeCmwg==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.4.tgz", + "integrity": "sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA==", "cpu": [ "riscv64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.2.tgz", - "integrity": "sha512-PMxkrWS9z38bCr3rWvDFVGD6sFeZJw4iQlhrup7ReGmfn7Oukrr/zweLhYX6v2/8J6Cep9IEA/SmjXjCmSbrMQ==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.4.tgz", + "integrity": "sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q==", "cpu": [ "s390x" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.2.tgz", - "integrity": "sha512-B90tYAUoLhU22olrafY3JQCFLnT3NglazdwkHyxNDYF/zAxJt5fJUB/yBoWFoIQ7SQj+KLe3iL4BhOMa9fzgpw==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz", + "integrity": "sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.2.tgz", - "integrity": "sha512-7twFizNXudESmC9oneLGIUmoHiiLppz/Xs5uJQ4ShvE6234K0VB1/aJYU3f/4g7PhssLGKBVCC37uRkkOi8wjg==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.4.tgz", + "integrity": "sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.2.tgz", - "integrity": "sha512-9rRero0E7qTeYf6+rFh3AErTNU1VCQg2mn7CQcI44vNUWM9Ze7MSRS/9RFuSsox+vstRt97+x3sOhEey024FRQ==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.4.tgz", + "integrity": "sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.2.tgz", - "integrity": "sha512-5rA4vjlqgrpbFVVHX3qkrCo/fZTj1q0Xxpg+Z7yIo3J2AilW7t2+n6Q8Jrx+4MrYpAnjttTYF8rr7bP46BPzRw==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.4.tgz", + "integrity": "sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.2.tgz", - "integrity": "sha512-6UUxd0+SKomjdzuAcp+HAmxw1FlGBnl1v2yEPSabtx4lBfdXHDVsW7+lQkgz9cNFJGY3AWR7+V8P5BqkD9L9nA==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.4.tgz", + "integrity": "sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -2981,6 +3007,7 @@ "version": "1.56.2", "resolved": "https://registry.npmjs.org/@tanstack/router-generator/-/router-generator-1.56.2.tgz", "integrity": "sha512-U/9+PBbLCfuy3sUzSzQ7YmU7o7V0aEN5f6jbKfwV9I1bd0AnpmtFJ7W5HnOpAZwCLiL00g04ZRWXF7JiSkm5ew==", + "peer": true, "dependencies": { "@tanstack/virtual-file-routes": "^1.56.0", "prettier": "^3.3.3", @@ -2996,20 +3023,21 @@ } }, "node_modules/@tanstack/router-plugin": { - "version": "1.56.2", - "resolved": "https://registry.npmjs.org/@tanstack/router-plugin/-/router-plugin-1.56.2.tgz", - "integrity": "sha512-E6PA7Mvo+vK0Yen42C/CVDPXXTRhOQtx22TuyuhoZVjmeqV9uV50msTtPslzaP1sK29Tg6QqcjAs8J3bSXhcaA==", + "version": "1.58.4", + "resolved": "https://registry.npmjs.org/@tanstack/router-plugin/-/router-plugin-1.58.4.tgz", + "integrity": "sha512-Ypoy+HrHwpv9A41bj7dpHhtLYavu7CU8WyuJnuFBY3SI5ZKWF7s/hMYUtVmEVwwT7fJCVQ8gcTkbfAag4uy/pA==", "dev": true, + "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", - "@babel/generator": "^7.25.0", - "@babel/parser": "^7.25.3", + "@babel/generator": "^7.25.6", + "@babel/parser": "^7.25.6", "@babel/plugin-syntax-jsx": "^7.24.7", - "@babel/plugin-syntax-typescript": "^7.24.7", + "@babel/plugin-syntax-typescript": "^7.25.4", "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.3", - "@babel/types": "^7.25.2", - "@tanstack/router-generator": "^1.56.2", + "@babel/traverse": "^7.25.6", + "@babel/types": "^7.25.6", + "@tanstack/router-generator": "^1.58.1", "@tanstack/virtual-file-routes": "^1.56.0", "@types/babel__core": "^7.20.5", "@types/babel__generator": "^7.6.8", @@ -3028,7 +3056,7 @@ "url": "https://github.com/sponsors/tannerlinsley" }, "peerDependencies": { - "@rsbuild/core": ">=1.0.0", + "@rsbuild/core": ">=1.0.2", "vite": ">=5.0.0", "webpack": ">=5.92.0" }, @@ -3044,6 +3072,26 @@ } } }, + "node_modules/@tanstack/router-plugin/node_modules/@tanstack/router-generator": { + "version": "1.58.1", + "resolved": "https://registry.npmjs.org/@tanstack/router-generator/-/router-generator-1.58.1.tgz", + "integrity": "sha512-oj/97KWi8EHFx/w07fAuXXyhWi5xgSMCfzbB9q42c1ZdLbv8wzBo4a6PO1fCi01tpKKHUopA8dSlGIOeJDhBAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tanstack/virtual-file-routes": "^1.56.0", + "prettier": "^3.3.3", + "tsx": "^4.19.1", + "zod": "^3.23.8" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, "node_modules/@tanstack/store": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/@tanstack/store/-/store-0.5.5.tgz", @@ -3424,6 +3472,18 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -3444,7 +3504,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "engines": { "node": ">=8" } @@ -3675,8 +3734,7 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/bare-events": { "version": "2.4.2", @@ -3745,6 +3803,21 @@ } ] }, + "node_modules/bin-links": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-4.0.4.tgz", + "integrity": "sha512-cMtq4W5ZsEwcutJrVId+a/tjt8GSbS+h0oNkdl6+6rBuEv8Ot33Bevj5KPm40t309zuhVic8NjpuL42QCiJWWA==", + "license": "ISC", + "dependencies": { + "cmd-shim": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "read-cmd-shim": "^4.0.0", + "write-file-atomic": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", @@ -3772,7 +3845,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, "dependencies": { "balanced-match": "^1.0.0" } @@ -3985,6 +4057,15 @@ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "dev": true }, + "node_modules/cmd-shim": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-6.0.3.tgz", + "integrity": "sha512-FMabTRlc5t5zjdenF6mS0MBeFZm0XqHqeOkcskKFb/LYCcRQ5fVgLOHVc4Lq9CqABd9zhjwPjMBCJvMCziSVtA==", + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/color": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", @@ -4100,7 +4181,6 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -4119,6 +4199,17 @@ "node": ">=8" } }, + "node_modules/css-selector-tokenizer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.8.0.tgz", + "integrity": "sha512-Jd6Ig3/pe62/qe5SBPTN8h8LeUg/pT4lLgtavPf7updwwHpvFzxvOQBHYj2LZDMjUnBzgvIUSjRcf6oT5HzHFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "fastparse": "^1.1.2" + } + }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -4137,6 +4228,45 @@ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", "dev": true }, + "node_modules/culori": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/culori/-/culori-3.3.0.tgz", + "integrity": "sha512-pHJg+jbuFsCjz9iclQBqyL3B2HLCBF71BwVNujUYEvCeQMvV97R59MNK3R2+jgJ3a1fcZgI9B3vYgz8lzr/BFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/daisyui": { + "version": "4.12.10", + "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-4.12.10.tgz", + "integrity": "sha512-jp1RAuzbHhGdXmn957Z2XsTZStXGHzFfF0FgIOZj3Wv9sH7OZgLfXTRZNfKVYxltGUOBsG1kbWAdF5SrqjebvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-selector-tokenizer": "^0.8", + "culori": "^3", + "picocolors": "^1", + "postcss-js": "^4" + }, + "engines": { + "node": ">=16.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/daisyui" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, "node_modules/data-view-buffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", @@ -4192,7 +4322,6 @@ "version": "4.3.7", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", - "dev": true, "dependencies": { "ms": "^2.1.3" }, @@ -4359,8 +4488,7 @@ "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, "node_modules/ejs": { "version": "3.1.10", @@ -4386,8 +4514,7 @@ "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, "node_modules/end-of-stream": { "version": "1.4.4", @@ -4945,6 +5072,13 @@ "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==", "dev": true }, + "node_modules/fastparse": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", + "dev": true, + "license": "MIT" + }, "node_modules/fastq": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", @@ -4954,6 +5088,29 @@ "reusify": "^1.0.4" } }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -5048,7 +5205,6 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", - "dev": true, "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -5060,6 +5216,18 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "license": "MIT", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, "node_modules/fraction.js": { "version": "4.3.7", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", @@ -5422,6 +5590,19 @@ "node": ">= 0.4" } }, + "node_modules/https-proxy-agent": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/ico-endec": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/ico-endec/-/ico-endec-0.1.6.tgz", @@ -5483,7 +5664,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, "engines": { "node": ">=0.8.19" } @@ -5672,7 +5852,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, "engines": { "node": ">=8" } @@ -5867,14 +6046,12 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/jackspeak": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -6242,7 +6419,6 @@ "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -6266,11 +6442,73 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, "engines": { "node": ">=16 || 14 >=14.17" } }, + "node_modules/minizlib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.1.tgz", + "integrity": "sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==", + "license": "MIT", + "dependencies": { + "minipass": "^7.0.4", + "rimraf": "^5.0.5" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/minizlib/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minizlib/node_modules/rimraf": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", + "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", + "license": "ISC", + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "license": "MIT", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", @@ -6280,8 +6518,7 @@ "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/mz": { "version": "2.7.0", @@ -6342,6 +6579,43 @@ "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", "dev": true }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "license": "MIT", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, "node_modules/node-releases": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", @@ -6366,6 +6640,15 @@ "node": ">=0.10.0" } }, + "node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -6482,8 +6765,7 @@ "node_modules/package-json-from-dist": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", - "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", - "dev": true + "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==" }, "node_modules/parent-module": { "version": "1.0.1", @@ -6519,7 +6801,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, "engines": { "node": ">=8" } @@ -6534,7 +6815,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -6549,8 +6829,7 @@ "node_modules/path-scurry/node_modules/lru-cache": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" }, "node_modules/path-type": { "version": "4.0.0", @@ -7013,6 +7292,15 @@ "pify": "^2.3.0" } }, + "node_modules/read-cmd-shim": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz", + "integrity": "sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q==", + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -7198,10 +7486,11 @@ } }, "node_modules/rollup": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.2.tgz", - "integrity": "sha512-e3TapAgYf9xjdLvKQCkQTnbTKd4a6jwlpQSJJFokHGaX2IVjoEqkIIhiQfqsi0cdwlOD+tQGuOd5AJkc5RngBw==", + "version": "4.22.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.22.4.tgz", + "integrity": "sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "1.0.5" }, @@ -7213,22 +7502,22 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.21.2", - "@rollup/rollup-android-arm64": "4.21.2", - "@rollup/rollup-darwin-arm64": "4.21.2", - "@rollup/rollup-darwin-x64": "4.21.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.21.2", - "@rollup/rollup-linux-arm-musleabihf": "4.21.2", - "@rollup/rollup-linux-arm64-gnu": "4.21.2", - "@rollup/rollup-linux-arm64-musl": "4.21.2", - "@rollup/rollup-linux-powerpc64le-gnu": "4.21.2", - "@rollup/rollup-linux-riscv64-gnu": "4.21.2", - "@rollup/rollup-linux-s390x-gnu": "4.21.2", - "@rollup/rollup-linux-x64-gnu": "4.21.2", - "@rollup/rollup-linux-x64-musl": "4.21.2", - "@rollup/rollup-win32-arm64-msvc": "4.21.2", - "@rollup/rollup-win32-ia32-msvc": "4.21.2", - "@rollup/rollup-win32-x64-msvc": "4.21.2", + "@rollup/rollup-android-arm-eabi": "4.22.4", + "@rollup/rollup-android-arm64": "4.22.4", + "@rollup/rollup-darwin-arm64": "4.22.4", + "@rollup/rollup-darwin-x64": "4.22.4", + "@rollup/rollup-linux-arm-gnueabihf": "4.22.4", + "@rollup/rollup-linux-arm-musleabihf": "4.22.4", + "@rollup/rollup-linux-arm64-gnu": "4.22.4", + "@rollup/rollup-linux-arm64-musl": "4.22.4", + "@rollup/rollup-linux-powerpc64le-gnu": "4.22.4", + "@rollup/rollup-linux-riscv64-gnu": "4.22.4", + "@rollup/rollup-linux-s390x-gnu": "4.22.4", + "@rollup/rollup-linux-x64-gnu": "4.22.4", + "@rollup/rollup-linux-x64-musl": "4.22.4", + "@rollup/rollup-win32-arm64-msvc": "4.22.4", + "@rollup/rollup-win32-ia32-msvc": "4.22.4", + "@rollup/rollup-win32-x64-msvc": "4.22.4", "fsevents": "~2.3.2" } }, @@ -7409,7 +7698,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -7421,7 +7709,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, "engines": { "node": ">=8" } @@ -7448,7 +7735,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, "engines": { "node": ">=14" }, @@ -7599,7 +7885,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -7617,7 +7902,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -7630,14 +7914,12 @@ "node_modules/string-width-cjs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/string-width/node_modules/ansi-regex": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, "engines": { "node": ">=12" }, @@ -7649,7 +7931,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, "dependencies": { "ansi-regex": "^6.0.1" }, @@ -7753,7 +8034,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -7766,7 +8046,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -7846,6 +8125,25 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/supabase": { + "version": "1.200.3", + "resolved": "https://registry.npmjs.org/supabase/-/supabase-1.200.3.tgz", + "integrity": "sha512-3NdhqBkfPVlm+rAhWQoVcyr54kykuAlHav/GWaAoQEHBDbbYI1lhbDzugk8ryQg92vSLwr3pWz0s4Hjdte8WyQ==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "bin-links": "^4.0.3", + "https-proxy-agent": "^7.0.2", + "node-fetch": "^3.3.2", + "tar": "7.4.3" + }, + "bin": { + "supabase": "bin/supabase" + }, + "engines": { + "npm": ">=8" + } + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -7907,6 +8205,23 @@ "node": ">=14.0.0" } }, + "node_modules/tar": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "license": "ISC", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/tar-fs": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.6.tgz", @@ -7932,6 +8247,24 @@ "streamx": "^2.15.0" } }, + "node_modules/tar/node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, "node_modules/temp-dir": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", @@ -8117,9 +8450,10 @@ "dev": true }, "node_modules/tsx": { - "version": "4.19.0", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.0.tgz", - "integrity": "sha512-bV30kM7bsLZKZIOCHeMNVMJ32/LuJzLVajkQI/qf92J2Qr08ueLQvW00PUZGiuLPP760UINwupgUj8qrSCPUKg==", + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.1.tgz", + "integrity": "sha512-0flMz1lh74BR4wOvBjuh9olbnwqCPc35OOlfyzHba0Dc+QNUeWX/Gq2YTbnwcWPO3BMd8fkzRVrHcsR+a7z7rA==", + "license": "MIT", "dependencies": { "esbuild": "~0.23.0", "get-tsconfig": "^4.7.5" @@ -8735,10 +9069,11 @@ } }, "node_modules/unplugin": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.13.1.tgz", - "integrity": "sha512-6Kq1iSSwg7KyjcThRUks9LuqDAKvtnioxbL9iEtB9ctTyBA5OmrB8gZd/d225VJu1w3UpUsKV7eGrvf59J7+VA==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.14.1.tgz", + "integrity": "sha512-lBlHbfSFPToDYp9pjXlUEFVxYLaue9f9T1HC+4OHlmj+HnMDdz9oZY+erXfoCe/5V/7gKUSY2jpXPb9S7f0f/w==", "dev": true, + "license": "MIT", "dependencies": { "acorn": "^8.12.1", "webpack-virtual-modules": "^0.6.2" @@ -8819,10 +9154,11 @@ "dev": true }, "node_modules/vite": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.3.tgz", - "integrity": "sha512-IH+nl64eq9lJjFqU+/yrRnrHPVTlgy42/+IzbOdaFDVlyLgI/wDlf+FCobXLX1cT0X5+7LMyH1mIy2xJdLfo8Q==", + "version": "5.4.7", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.7.tgz", + "integrity": "sha512-5l2zxqMEPVENgvzTuBpHer2awaetimj2BGkhBPdnwKbPNOlHsODU+oiazEZzLK7KhAnOrO+XGYJYn4ZlUhDtDQ==", "dev": true, + "license": "MIT", "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", @@ -8907,6 +9243,15 @@ } } }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, "node_modules/webidl-conversions": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", @@ -8934,7 +9279,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -9315,7 +9659,6 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -9333,7 +9676,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -9350,7 +9692,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -9365,7 +9706,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -9376,20 +9716,17 @@ "node_modules/wrap-ansi-cjs/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/wrap-ansi-cjs/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -9403,7 +9740,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true, "engines": { "node": ">=12" }, @@ -9415,7 +9751,6 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, "engines": { "node": ">=12" }, @@ -9427,7 +9762,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, "dependencies": { "ansi-regex": "^6.0.1" }, @@ -9444,6 +9778,19 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, + "node_modules/write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/ws": { "version": "8.18.0", "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", diff --git a/package.json b/package.json index c59523d..1afabaf 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,8 @@ "@supabase/supabase-js": "^2.45.3", "@tanstack/react-router": "^1.56.2", "react": "^18.3.1", - "react-dom": "^18.3.1" + "react-dom": "^18.3.1", + "supabase": "^1.200.3" }, "devDependencies": { "@playwright/test": "^1.47.0", @@ -27,6 +28,7 @@ "@vite-pwa/assets-generator": "^0.2.4", "@vitejs/plugin-react": "^4.2.1", "autoprefixer": "^10.4.20", + "daisyui": "^4.12.10", "eslint": "^8.57.0", "eslint-plugin-react-hooks": "^4.6.2", "eslint-plugin-react-refresh": "^0.4.6", diff --git a/src/components/Button.tsx b/src/components/Button.tsx deleted file mode 100644 index 495efec..0000000 --- a/src/components/Button.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import { ReactNode } from "react" - -type Props = { - children: ReactNode, - type: 'submit' | 'reset' | 'button', -} - -export function Button(props: Props) { - return ( - - ) -} diff --git a/src/components/Common/Center.tsx b/src/components/Common/Center.tsx new file mode 100644 index 0000000..8cc4670 --- /dev/null +++ b/src/components/Common/Center.tsx @@ -0,0 +1,9 @@ +import ChildrenProps from '../interface/ChildrenProps'; + +export const Center = ({ children }: ChildrenProps) => { + return ( +
+ {children} +
+ ); +}; diff --git a/src/components/Common/HStack.tsx b/src/components/Common/HStack.tsx new file mode 100644 index 0000000..6bb3487 --- /dev/null +++ b/src/components/Common/HStack.tsx @@ -0,0 +1,9 @@ +import ChildrenProps from '../interface/ChildrenProps'; + +export const HStack = ({ children, className }: ChildrenProps) => { + return ( +
+ {children} +
+ ); +}; diff --git a/src/components/Common/Image.tsx b/src/components/Common/Image.tsx new file mode 100644 index 0000000..20cd72d --- /dev/null +++ b/src/components/Common/Image.tsx @@ -0,0 +1,10 @@ +import ImageProps from '../interface/ImageProps'; + +export const Image = ({ children, className, src, alt }: ImageProps) => { + return ( + <> + {alt} + {children} + + ); +}; diff --git a/src/components/Common/VStack.tsx b/src/components/Common/VStack.tsx new file mode 100644 index 0000000..dd14adb --- /dev/null +++ b/src/components/Common/VStack.tsx @@ -0,0 +1,9 @@ +import ChildrenProps from '../interface/ChildrenProps'; + +export const VStack = ({ children, className }: ChildrenProps) => { + return ( +
+ {children} +
+ ); +}; diff --git a/src/components/Common/customButton.tsx b/src/components/Common/customButton.tsx new file mode 100644 index 0000000..ecb68e2 --- /dev/null +++ b/src/components/Common/customButton.tsx @@ -0,0 +1,9 @@ +import ButtonProps from "../interface/ButtonProps"; + +export const Button = ({ children, type, className, onClick }: ButtonProps) => ( + +); \ No newline at end of file diff --git a/src/components/DrawerOption.tsx b/src/components/DrawerOption.tsx new file mode 100644 index 0000000..a3c6fe1 --- /dev/null +++ b/src/components/DrawerOption.tsx @@ -0,0 +1,48 @@ +import { Link } from "@tanstack/react-router"; +import { useState } from "react"; +import { HStack, SidebarArrowDownIcon, SidebarArrowRightIcon, VStack } from "../components"; + +const options = [ + { name: "首頁", engName: "Home", pageNav: "/" }, + { name: "活動/揪人", engName: "Events", pageNav: "/events" }, + { name: "拍賣", engName: "Market", pageNav: "/sales" }, + { name: "行事曆", engName: "Calendar", pageNav: "/calendar" }, + { name: "地圖", engName: "Map", pageNav: "/map" }, + { name: "今晚吃什麼", engName: "Dinner Decider", pageNav: "/dinner" }, +]; + +export const DrawerOption = () => { + const [openOptions, setOpenOptions] = useState<{ [key: string]: boolean }>({}); + + const toggleOption = (name: string) => { + setOpenOptions((prev) => { + return { + ...prev, + [name]: !prev[name], + }; + }); + }; + + return ( + + {options.map((option) => ( + +
toggleOption(option.name)}> + {openOptions[option.name] ? ( + + ) : ( + + )} +
+ +
  • + +

    {option.name}({option.engName})

    +
    +
  • + +
    + ))} +
    + ); +}; diff --git a/src/components/DrawerSideBar.tsx b/src/components/DrawerSideBar.tsx new file mode 100644 index 0000000..68d2fa4 --- /dev/null +++ b/src/components/DrawerSideBar.tsx @@ -0,0 +1,53 @@ +import { Image, VStack } from "../components"; +import { supabase } from "../utils/supabase"; +import { DrawerOption } from "./DrawerOption"; + + +const signOut = async () => { + await supabase.auth.signOut().then(() => { + window.location.href = '/'; + }); +}; + +export const DrawerSideBar = ({ name, avatar }: { name: string, avatar: string }) => { + return ( +
    + + + +
    + +
    + + {/* Indise Drawer */} +
    + + + +
    +
    + ); +}; diff --git a/src/components/HStack.tsx b/src/components/HStack.tsx deleted file mode 100644 index 08e25c6..0000000 --- a/src/components/HStack.tsx +++ /dev/null @@ -1,13 +0,0 @@ -import { ReactNode } from "react" - -type Props = { - children: ReactNode -} - -export function HStack({ children }: Props) { - return ( -
    - {children} -
    - ) -} diff --git a/src/components/Header.tsx b/src/components/Header.tsx new file mode 100644 index 0000000..604bcce --- /dev/null +++ b/src/components/Header.tsx @@ -0,0 +1,61 @@ +import { HStack } from "../components"; +import { supabase } from "../utils/supabase"; +import { DrawerSideBar } from "./DrawerSideBar"; + + + +import React, { useEffect, useState } from 'react'; + +export const Header: React.FC = () => { + + const [userName, setUserName] = useState(''); + const [userAvatar, setUserAvatar] = useState(''); + const [error, setError] = useState(''); + + useEffect(() => { + const fetchData = async () => { + try { + const userId = (await supabase.auth.getUser()).data?.user?.id; + if (!userId) { + throw new Error('User ID is undefined'); + } + const { data } = await supabase + .from('members') + .select(`*, identities ( identity_no, identity_name )`) + .eq('uuid', userId); + + if (data && data.length > 0) { + setUserName(data[0].name); + setUserAvatar(data[0].avatar); + } else { + throw new Error('User data not found'); + } + } catch (error: unknown) { + if (error instanceof Error) { + setError(error.message); + } else { + setError(String(error)); + } + } + }; + fetchData(); + }, []); + + if (!userName || !userAvatar) { + return
    Loading...
    ; + } + if (error) { + console.log('error', error); + } + + return ( +
    + + +
    + NCU App +
    +
    +
    + ); +}; diff --git a/src/components/icons/BasicIcon.tsx b/src/components/icons/BasicIcon.tsx new file mode 100644 index 0000000..3dc87fd --- /dev/null +++ b/src/components/icons/BasicIcon.tsx @@ -0,0 +1,21 @@ +import React from 'react'; +import IconProps from '../interface/IconProps'; + +export const BasicIcon: React.FC = ({ fill = 'currentColor', stroke = 'currentColor', size = 24, children }) => ( + + {children} + + + + + +); + diff --git a/src/components/icons/CalendarIcon.tsx b/src/components/icons/CalendarIcon.tsx new file mode 100644 index 0000000..c5690d8 --- /dev/null +++ b/src/components/icons/CalendarIcon.tsx @@ -0,0 +1,16 @@ + +import React from 'react'; +import IconProps from '../interface/IconProps'; +import { BasicIcon } from './BasicIcon'; + +export const CalendarIcon: React.FC = ({ fill, stroke, size }) => ( + + + +); + +export default CalendarIcon; diff --git a/src/components/icons/LogoutIcon.tsx b/src/components/icons/LogoutIcon.tsx new file mode 100644 index 0000000..93ff755 --- /dev/null +++ b/src/components/icons/LogoutIcon.tsx @@ -0,0 +1,16 @@ + +import React from 'react'; +import IconProps from '../interface/IconProps'; +import { BasicIcon } from './BasicIcon'; + +export const LogoutIcon: React.FC = ({ fill, stroke, size }) => ( + + + +); + +export default LogoutIcon; diff --git a/src/components/icons/SidebarArrowDownIcon.tsx b/src/components/icons/SidebarArrowDownIcon.tsx new file mode 100644 index 0000000..db9be4e --- /dev/null +++ b/src/components/icons/SidebarArrowDownIcon.tsx @@ -0,0 +1,12 @@ + +import React from 'react'; +import IconProps from '../interface/IconProps'; +import { BasicIcon } from './BasicIcon'; + +export const SidebarArrowDownIcon: React.FC = ({ fill, stroke, size }) => ( + + + +); + +export default SidebarArrowDownIcon; diff --git a/src/components/icons/SidebarArrowRightIcon.tsx b/src/components/icons/SidebarArrowRightIcon.tsx new file mode 100644 index 0000000..dddd725 --- /dev/null +++ b/src/components/icons/SidebarArrowRightIcon.tsx @@ -0,0 +1,12 @@ + +import React from 'react'; +import IconProps from '../interface/IconProps'; +import { BasicIcon } from './BasicIcon'; + +export const SidebarArrowRightIcon: React.FC = ({ fill, stroke, size }) => ( + + + +); + +export default SidebarArrowRightIcon; diff --git a/src/components/index.ts b/src/components/index.ts new file mode 100644 index 0000000..685bf76 --- /dev/null +++ b/src/components/index.ts @@ -0,0 +1,13 @@ +// Common Components +export { Center } from './Common/Center'; +export { Button } from './Common/customButton'; +export { HStack } from './Common/HStack'; +export { Image } from './Common/Image'; +export { VStack } from './Common/VStack'; +export { Header } from './Header'; +// Icons +export { CalendarIcon } from './icons/CalendarIcon'; +export { LogoutIcon } from './icons/LogoutIcon'; +export { SidebarArrowDownIcon } from './icons/SidebarArrowDownIcon'; +export { SidebarArrowRightIcon } from './icons/SidebarArrowRightIcon'; + diff --git a/src/components/interface/ButtonProps.tsx b/src/components/interface/ButtonProps.tsx new file mode 100644 index 0000000..e5432ec --- /dev/null +++ b/src/components/interface/ButtonProps.tsx @@ -0,0 +1,9 @@ +import React from 'react'; + +interface ButtonProps extends React.ButtonHTMLAttributes { + children: React.ReactNode; + type?: 'submit' | 'reset' | 'button'; + className?: string; +} + +export default ButtonProps; \ No newline at end of file diff --git a/src/components/interface/ChildrenProps.tsx b/src/components/interface/ChildrenProps.tsx new file mode 100644 index 0000000..5475827 --- /dev/null +++ b/src/components/interface/ChildrenProps.tsx @@ -0,0 +1,7 @@ +import { ReactNode } from 'react'; + +interface ChildrenProps extends React.HTMLAttributes { + children: ReactNode; + className?: string; + +}export default ChildrenProps; \ No newline at end of file diff --git a/src/components/interface/IconProps.tsx b/src/components/interface/IconProps.tsx new file mode 100644 index 0000000..ca26a1c --- /dev/null +++ b/src/components/interface/IconProps.tsx @@ -0,0 +1,7 @@ +interface IconProps { + fill?: string | 'currentColor' | 'none'; + stroke?: string; + size?: number; +} + +export default IconProps; \ No newline at end of file diff --git a/src/components/interface/ImageProps.tsx b/src/components/interface/ImageProps.tsx new file mode 100644 index 0000000..35e4bcb --- /dev/null +++ b/src/components/interface/ImageProps.tsx @@ -0,0 +1,10 @@ +import React from 'react'; + +interface ImageProps extends React.ButtonHTMLAttributes { + children: React.ReactNode; + className?: string; + src?: string; + alt?: string; +} + +export default ImageProps; \ No newline at end of file diff --git a/src/routeTree.gen.ts b/src/routeTree.gen.ts index d6f301d..e4b276f 100644 --- a/src/routeTree.gen.ts +++ b/src/routeTree.gen.ts @@ -12,7 +12,13 @@ import { Route as rootRoute } from './routes/__root' import { Route as LoginImport } from './routes/login' +import { Route as IndexImport } from './routes/index' +import { Route as SalesIndexImport } from './routes/sales/index' +import { Route as MapIndexImport } from './routes/map/index' import { Route as EventsIndexImport } from './routes/events/index' +import { Route as DinnerIndexImport } from './routes/dinner/index' +import { Route as CalendarIndexImport } from './routes/calendar/index' +import { Route as HomeInfoCardImport } from './routes/home/infoCard' import { Route as EventsCreateImport } from './routes/events/create' import { Route as EventsEventIdImport } from './routes/events/$eventId' @@ -23,11 +29,41 @@ const LoginRoute = LoginImport.update({ getParentRoute: () => rootRoute, } as any) +const IndexRoute = IndexImport.update({ + path: '/', + getParentRoute: () => rootRoute, +} as any) + +const SalesIndexRoute = SalesIndexImport.update({ + path: '/sales/', + getParentRoute: () => rootRoute, +} as any) + +const MapIndexRoute = MapIndexImport.update({ + path: '/map/', + getParentRoute: () => rootRoute, +} as any) + const EventsIndexRoute = EventsIndexImport.update({ path: '/events/', getParentRoute: () => rootRoute, } as any) +const DinnerIndexRoute = DinnerIndexImport.update({ + path: '/dinner/', + getParentRoute: () => rootRoute, +} as any) + +const CalendarIndexRoute = CalendarIndexImport.update({ + path: '/calendar/', + getParentRoute: () => rootRoute, +} as any) + +const HomeInfoCardRoute = HomeInfoCardImport.update({ + path: '/home/infoCard', + getParentRoute: () => rootRoute, +} as any) + const EventsCreateRoute = EventsCreateImport.update({ path: '/events/create', getParentRoute: () => rootRoute, @@ -42,6 +78,13 @@ const EventsEventIdRoute = EventsEventIdImport.update({ declare module '@tanstack/react-router' { interface FileRoutesByPath { + '/': { + id: '/' + path: '/' + fullPath: '/' + preLoaderRoute: typeof IndexImport + parentRoute: typeof rootRoute + } '/login': { id: '/login' path: '/login' @@ -63,6 +106,27 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof EventsCreateImport parentRoute: typeof rootRoute } + '/home/infoCard': { + id: '/home/infoCard' + path: '/home/infoCard' + fullPath: '/home/infoCard' + preLoaderRoute: typeof HomeInfoCardImport + parentRoute: typeof rootRoute + } + '/calendar/': { + id: '/calendar/' + path: '/calendar' + fullPath: '/calendar' + preLoaderRoute: typeof CalendarIndexImport + parentRoute: typeof rootRoute + } + '/dinner/': { + id: '/dinner/' + path: '/dinner' + fullPath: '/dinner' + preLoaderRoute: typeof DinnerIndexImport + parentRoute: typeof rootRoute + } '/events/': { id: '/events/' path: '/events' @@ -70,53 +134,129 @@ declare module '@tanstack/react-router' { preLoaderRoute: typeof EventsIndexImport parentRoute: typeof rootRoute } + '/map/': { + id: '/map/' + path: '/map' + fullPath: '/map' + preLoaderRoute: typeof MapIndexImport + parentRoute: typeof rootRoute + } + '/sales/': { + id: '/sales/' + path: '/sales' + fullPath: '/sales' + preLoaderRoute: typeof SalesIndexImport + parentRoute: typeof rootRoute + } } } // Create and export the route tree -interface FileRoutesByFullPath { +export interface FileRoutesByFullPath { + '/': typeof IndexRoute '/login': typeof LoginRoute '/events/$eventId': typeof EventsEventIdRoute '/events/create': typeof EventsCreateRoute + '/home/infoCard': typeof HomeInfoCardRoute + '/calendar': typeof CalendarIndexRoute + '/dinner': typeof DinnerIndexRoute '/events': typeof EventsIndexRoute + '/map': typeof MapIndexRoute + '/sales': typeof SalesIndexRoute } -interface FileRoutesByTo { +export interface FileRoutesByTo { + '/': typeof IndexRoute '/login': typeof LoginRoute '/events/$eventId': typeof EventsEventIdRoute '/events/create': typeof EventsCreateRoute + '/home/infoCard': typeof HomeInfoCardRoute + '/calendar': typeof CalendarIndexRoute + '/dinner': typeof DinnerIndexRoute '/events': typeof EventsIndexRoute + '/map': typeof MapIndexRoute + '/sales': typeof SalesIndexRoute } -interface FileRoutesById { +export interface FileRoutesById { + __root__: typeof rootRoute + '/': typeof IndexRoute '/login': typeof LoginRoute '/events/$eventId': typeof EventsEventIdRoute '/events/create': typeof EventsCreateRoute + '/home/infoCard': typeof HomeInfoCardRoute + '/calendar/': typeof CalendarIndexRoute + '/dinner/': typeof DinnerIndexRoute '/events/': typeof EventsIndexRoute + '/map/': typeof MapIndexRoute + '/sales/': typeof SalesIndexRoute } -interface FileRouteTypes { +export interface FileRouteTypes { fileRoutesByFullPath: FileRoutesByFullPath - fullPaths: '/login' | '/events/$eventId' | '/events/create' | '/events' + fullPaths: + | '/' + | '/login' + | '/events/$eventId' + | '/events/create' + | '/home/infoCard' + | '/calendar' + | '/dinner' + | '/events' + | '/map' + | '/sales' fileRoutesByTo: FileRoutesByTo - to: '/login' | '/events/$eventId' | '/events/create' | '/events' - id: '/login' | '/events/$eventId' | '/events/create' | '/events/' + to: + | '/' + | '/login' + | '/events/$eventId' + | '/events/create' + | '/home/infoCard' + | '/calendar' + | '/dinner' + | '/events' + | '/map' + | '/sales' + id: + | '__root__' + | '/' + | '/login' + | '/events/$eventId' + | '/events/create' + | '/home/infoCard' + | '/calendar/' + | '/dinner/' + | '/events/' + | '/map/' + | '/sales/' fileRoutesById: FileRoutesById } -interface RootRouteChildren { +export interface RootRouteChildren { + IndexRoute: typeof IndexRoute LoginRoute: typeof LoginRoute EventsEventIdRoute: typeof EventsEventIdRoute EventsCreateRoute: typeof EventsCreateRoute + HomeInfoCardRoute: typeof HomeInfoCardRoute + CalendarIndexRoute: typeof CalendarIndexRoute + DinnerIndexRoute: typeof DinnerIndexRoute EventsIndexRoute: typeof EventsIndexRoute + MapIndexRoute: typeof MapIndexRoute + SalesIndexRoute: typeof SalesIndexRoute } const rootRouteChildren: RootRouteChildren = { + IndexRoute: IndexRoute, LoginRoute: LoginRoute, EventsEventIdRoute: EventsEventIdRoute, EventsCreateRoute: EventsCreateRoute, + HomeInfoCardRoute: HomeInfoCardRoute, + CalendarIndexRoute: CalendarIndexRoute, + DinnerIndexRoute: DinnerIndexRoute, EventsIndexRoute: EventsIndexRoute, + MapIndexRoute: MapIndexRoute, + SalesIndexRoute: SalesIndexRoute, } export const routeTree = rootRoute @@ -131,12 +271,21 @@ export const routeTree = rootRoute "__root__": { "filePath": "__root.tsx", "children": [ + "/", "/login", "/events/$eventId", "/events/create", - "/events/" + "/home/infoCard", + "/calendar/", + "/dinner/", + "/events/", + "/map/", + "/sales/" ] }, + "/": { + "filePath": "index.tsx" + }, "/login": { "filePath": "login.tsx" }, @@ -146,8 +295,23 @@ export const routeTree = rootRoute "/events/create": { "filePath": "events/create.tsx" }, + "/home/infoCard": { + "filePath": "home/infoCard.tsx" + }, + "/calendar/": { + "filePath": "calendar/index.tsx" + }, + "/dinner/": { + "filePath": "dinner/index.tsx" + }, "/events/": { "filePath": "events/index.tsx" + }, + "/map/": { + "filePath": "map/index.tsx" + }, + "/sales/": { + "filePath": "sales/index.tsx" } } } diff --git a/src/routes/__root.tsx b/src/routes/__root.tsx index 1fae538..2925ffc 100644 --- a/src/routes/__root.tsx +++ b/src/routes/__root.tsx @@ -1,18 +1,13 @@ -import { createRootRoute, Link, Outlet } from '@tanstack/react-router' +import { createRootRoute, Outlet } from '@tanstack/react-router'; export const Route = createRootRoute({ - component: () => ( + component: RootComponent, +}) + +function RootComponent() { + return ( <> -
    -
    - NCU App -
    - - Events - -
    -
    - - ), -}) + + ) +} diff --git a/src/routes/calendar/index.tsx b/src/routes/calendar/index.tsx new file mode 100644 index 0000000..2466418 --- /dev/null +++ b/src/routes/calendar/index.tsx @@ -0,0 +1,17 @@ +import { createFileRoute } from '@tanstack/react-router' +import { Header } from '../../components' +import { AuthGuard } from '../../utils/auth' + +export const Route = createFileRoute('/calendar/')({ + beforeLoad: AuthGuard, + component: CalendarIndex, +}) + +function CalendarIndex() { + return ( + <> +
    +
    Hello /calendar/!
    + + ) +} diff --git a/src/routes/dinner/index.tsx b/src/routes/dinner/index.tsx new file mode 100644 index 0000000..bc2512b --- /dev/null +++ b/src/routes/dinner/index.tsx @@ -0,0 +1,17 @@ +import { createFileRoute } from '@tanstack/react-router' +import { Header } from '../../components' +import { AuthGuard } from '../../utils/auth' + +export const Route = createFileRoute('/dinner/')({ + beforeLoad: AuthGuard, + component: DinnerIndex, +}) + +function DinnerIndex() { + return ( + <> +
    +
    Hello /dinner/!
    + + ) +} \ No newline at end of file diff --git a/src/routes/events/create.tsx b/src/routes/events/create.tsx index 8771014..0fa6ae3 100644 --- a/src/routes/events/create.tsx +++ b/src/routes/events/create.tsx @@ -1,6 +1,6 @@ import { createFileRoute, Link } from '@tanstack/react-router'; import { ChangeEvent, FormEvent, useEffect, useState } from 'react'; -import { Button } from '../../components/Button'; +import { Button } from '../../components/Common/customButton'; import { UserController } from '../../controllers/user'; import { AuthGuard } from '../../utils/auth'; import { supabase } from '../../utils/supabase'; diff --git a/src/routes/events/index.tsx b/src/routes/events/index.tsx index 2b665fa..3f70e4a 100644 --- a/src/routes/events/index.tsx +++ b/src/routes/events/index.tsx @@ -1,4 +1,6 @@ import { createFileRoute, Link } from '@tanstack/react-router'; +import { Header } from '../../components'; +import { AuthGuard } from '../../utils/auth'; import { supabase } from '../../utils/supabase'; const styles = { @@ -9,6 +11,7 @@ const styles = { }; export const Route = createFileRoute('/events/')({ + beforeLoad: AuthGuard, loader: async () => { const { data, error } = await supabase .from('events') @@ -26,13 +29,16 @@ export const Route = createFileRoute('/events/')({ function EventIndex() { const { events } = Route.useLoaderData() return ( -
    -

    活動列表

    - { - events.map((event) => ( - {event.name} - )) - } -
    + <> +
    +
    +

    活動列表

    + { + events.map((event) => ( + {event.name} + )) + } +
    + ) } diff --git a/src/routes/home/infoCard.tsx b/src/routes/home/infoCard.tsx new file mode 100644 index 0000000..322d4ab --- /dev/null +++ b/src/routes/home/infoCard.tsx @@ -0,0 +1,5 @@ +import { createFileRoute } from '@tanstack/react-router' + +export const Route = createFileRoute('/home/infoCard')({ + component: () =>
    Hello /home/infoCard!
    +}) \ No newline at end of file diff --git a/src/routes/index.tsx b/src/routes/index.tsx new file mode 100644 index 0000000..c5b9bc5 --- /dev/null +++ b/src/routes/index.tsx @@ -0,0 +1,51 @@ +import { createFileRoute, Link } from '@tanstack/react-router'; +import { Header } from '../components'; +import { AuthGuard } from '../utils/auth'; +import { supabase } from '../utils/supabase'; + +const styles = { + container: { + flex: 1, + backgroundColor: '#ffffff', + }, +}; + +export const Route = createFileRoute('/')({ + beforeLoad: AuthGuard, + loader: async () => { + const userId = (await supabase.auth.getUser()).data?.user?.id + if (!userId) { + throw new Error('User ID is undefined') + } + const { data, error } = await supabase + .from('members') + .select(`*, identities ( identity_no, identity_name )`) + .eq('uuid', userId) + + + if (error !== null) { + throw error + } + + return { user: data } + }, + component: HomeIndex +}) + +function HomeIndex() { + const { user } = Route.useLoaderData() + return ( + <> +
    +
    + +
    +

    Name: {user[0].name}

    +

    Badge: {user[0].identities?.identity_name}

    +
    + + Go to /home/infoCard +
    + + ) +} diff --git a/src/routes/login.tsx b/src/routes/login.tsx index a03661d..f30a8c4 100644 --- a/src/routes/login.tsx +++ b/src/routes/login.tsx @@ -1,5 +1,6 @@ import { createFileRoute } from '@tanstack/react-router' import { useState } from 'react' +import { VStack } from '../components' import { supabase } from '../utils/supabase' export const Route = createFileRoute('/login')({ @@ -33,10 +34,16 @@ function LoginPage() { return (
    - - { setEmail(e.target.value) }} /> - - { setPassword(e.target.value) }} /> + +
    + + { setEmail(e.target.value) }} /> +
    +
    + + { setPassword(e.target.value) }} /> +
    +
    ) diff --git a/src/routes/map/index.tsx b/src/routes/map/index.tsx new file mode 100644 index 0000000..c8d9802 --- /dev/null +++ b/src/routes/map/index.tsx @@ -0,0 +1,17 @@ +import { createFileRoute } from '@tanstack/react-router' +import { Header } from '../../components' +import { AuthGuard } from '../../utils/auth' + +export const Route = createFileRoute('/map/')({ + beforeLoad: AuthGuard, + component: MapIndex, +}) + +function MapIndex() { + return ( + <> +
    +
    Hello /map/!
    + + ) +} diff --git a/src/routes/sales/index.tsx b/src/routes/sales/index.tsx new file mode 100644 index 0000000..507772a --- /dev/null +++ b/src/routes/sales/index.tsx @@ -0,0 +1,17 @@ +import { createFileRoute } from '@tanstack/react-router' +import { Header } from '../../components' +import { AuthGuard } from '../../utils/auth' + +export const Route = createFileRoute('/sales/')({ + beforeLoad: AuthGuard, + component: SalesIndex, +}) + +function SalesIndex() { + return ( + <> +
    +
    Hello /sales/!
    + + ) +} diff --git a/src/utils/database.types.ts b/src/utils/database.types.ts index fb4cc72..c199ae4 100644 --- a/src/utils/database.types.ts +++ b/src/utils/database.types.ts @@ -34,6 +34,21 @@ export type Database = { } public: { Tables: { + event_type: { + Row: { + type_id: number + type_name: string | null + } + Insert: { + type_id?: number + type_name?: string | null + } + Update: { + type_id?: number + type_name?: string | null + } + Relationships: [] + } events: { Row: { created_at: string @@ -43,6 +58,7 @@ export type Database = { id: number name: string | null start_time: string | null + type: number | null user_id: string } Insert: { @@ -53,6 +69,7 @@ export type Database = { id?: number name?: string | null start_time?: string | null + type?: number | null user_id: string } Update: { @@ -63,9 +80,17 @@ export type Database = { id?: number name?: string | null start_time?: string | null + type?: number | null user_id?: string } Relationships: [ + { + foreignKeyName: "events_type_fkey" + columns: ["type"] + isOneToOne: false + referencedRelation: "event_type" + referencedColumns: ["type_id"] + }, { foreignKeyName: "events_user_id_fkey" columns: ["user_id"] @@ -75,6 +100,66 @@ export type Database = { }, ] } + identities: { + Row: { + identity_name: string + identity_no: number + } + Insert: { + identity_name?: string + identity_no?: number + } + Update: { + identity_name?: string + identity_no?: number + } + Relationships: [] + } + members: { + Row: { + avatar: string + created_at: string + fk_email: string + fk_identity: number + grad_time: string | null + name: string + uuid: string + } + Insert: { + avatar?: string + created_at?: string + fk_email?: string + fk_identity?: number + grad_time?: string | null + name: string + uuid?: string + } + Update: { + avatar?: string + created_at?: string + fk_email?: string + fk_identity?: number + grad_time?: string | null + name?: string + uuid?: string + } + Relationships: [ + { + foreignKeyName: "members_fk_identity_fkey" + columns: ["fk_identity"] + isOneToOne: false + referencedRelation: "identities" + referencedColumns: ["identity_no"] + }, + { + foreignKeyName: "members_uuid_fkey" + columns: ["uuid"] + isOneToOne: true + referencedRelation: "users" + referencedColumns: ["id"] + }, + ] + } sales: { Row: { created_at: string diff --git a/supabase/migrations/20241002170227_remote_schema.sql b/supabase/migrations/20241002170227_remote_schema.sql new file mode 100644 index 0000000..a9ba594 --- /dev/null +++ b/supabase/migrations/20241002170227_remote_schema.sql @@ -0,0 +1,223 @@ +create table "public"."event_type" ( + "type_id" smallint generated by default as identity not null, + "type_name" text +); + + +alter table "public"."event_type" enable row level security; + +create table "public"."identities" ( + "identity_no" integer generated by default as identity not null, + "identity_name" text not null default 'other'::text +); + + +alter table "public"."identities" enable row level security; + +create table "public"."members" ( + "uuid" uuid not null default auth.uid(), + "created_at" timestamp with time zone not null default now(), + "name" character varying not null, + "fk_email" character varying not null default 'auth.users.email'::character varying, + "fk_identity" integer not null default 5, + "grad_time" date, + "avatar" character varying not null default 'http://127.0.0.1:54321/storage/v1/object/public/avatar/defaultAvatar.webp?t=2024-10-02T15%3A40%3A27.045Z'::character varying +); + + +alter table "public"."members" enable row level security; + +alter table "public"."events" add column "type" smallint default '7'::smallint; + +CREATE UNIQUE INDEX event_type_pkey ON public.event_type USING btree (type_id); + +CREATE UNIQUE INDEX identities_pkey ON public.identities USING btree (identity_no); + +CREATE UNIQUE INDEX members_pkey ON public.members USING btree (uuid); + +alter table "public"."event_type" add constraint "event_type_pkey" PRIMARY KEY using index "event_type_pkey"; + +alter table "public"."identities" add constraint "identities_pkey" PRIMARY KEY using index "identities_pkey"; + +alter table "public"."members" add constraint "members_pkey" PRIMARY KEY using index "members_pkey"; + +alter table "public"."events" add constraint "events_type_fkey" FOREIGN KEY (type) REFERENCES event_type(type_id) ON UPDATE CASCADE not valid; + +alter table "public"."events" validate constraint "events_type_fkey"; + +alter table "public"."members" add constraint "members_fk_identity_fkey" FOREIGN KEY (fk_identity) REFERENCES identities(identity_no) ON UPDATE CASCADE not valid; + +alter table "public"."members" validate constraint "members_fk_identity_fkey"; + +alter table "public"."members" add constraint "members_uuid_fkey" FOREIGN KEY (uuid) REFERENCES auth.users(id) ON UPDATE CASCADE not valid; + +alter table "public"."members" validate constraint "members_uuid_fkey"; + +grant delete on table "public"."event_type" to "anon"; + +grant insert on table "public"."event_type" to "anon"; + +grant references on table "public"."event_type" to "anon"; + +grant select on table "public"."event_type" to "anon"; + +grant trigger on table "public"."event_type" to "anon"; + +grant truncate on table "public"."event_type" to "anon"; + +grant update on table "public"."event_type" to "anon"; + +grant delete on table "public"."event_type" to "authenticated"; + +grant insert on table "public"."event_type" to "authenticated"; + +grant references on table "public"."event_type" to "authenticated"; + +grant select on table "public"."event_type" to "authenticated"; + +grant trigger on table "public"."event_type" to "authenticated"; + +grant truncate on table "public"."event_type" to "authenticated"; + +grant update on table "public"."event_type" to "authenticated"; + +grant delete on table "public"."event_type" to "service_role"; + +grant insert on table "public"."event_type" to "service_role"; + +grant references on table "public"."event_type" to "service_role"; + +grant select on table "public"."event_type" to "service_role"; + +grant trigger on table "public"."event_type" to "service_role"; + +grant truncate on table "public"."event_type" to "service_role"; + +grant update on table "public"."event_type" to "service_role"; + +grant delete on table "public"."identities" to "anon"; + +grant insert on table "public"."identities" to "anon"; + +grant references on table "public"."identities" to "anon"; + +grant select on table "public"."identities" to "anon"; + +grant trigger on table "public"."identities" to "anon"; + +grant truncate on table "public"."identities" to "anon"; + +grant update on table "public"."identities" to "anon"; + +grant delete on table "public"."identities" to "authenticated"; + +grant insert on table "public"."identities" to "authenticated"; + +grant references on table "public"."identities" to "authenticated"; + +grant select on table "public"."identities" to "authenticated"; + +grant trigger on table "public"."identities" to "authenticated"; + +grant truncate on table "public"."identities" to "authenticated"; + +grant update on table "public"."identities" to "authenticated"; + +grant delete on table "public"."identities" to "service_role"; + +grant insert on table "public"."identities" to "service_role"; + +grant references on table "public"."identities" to "service_role"; + +grant select on table "public"."identities" to "service_role"; + +grant trigger on table "public"."identities" to "service_role"; + +grant truncate on table "public"."identities" to "service_role"; + +grant update on table "public"."identities" to "service_role"; + +grant delete on table "public"."members" to "anon"; + +grant insert on table "public"."members" to "anon"; + +grant references on table "public"."members" to "anon"; + +grant select on table "public"."members" to "anon"; + +grant trigger on table "public"."members" to "anon"; + +grant truncate on table "public"."members" to "anon"; + +grant update on table "public"."members" to "anon"; + +grant delete on table "public"."members" to "authenticated"; + +grant insert on table "public"."members" to "authenticated"; + +grant references on table "public"."members" to "authenticated"; + +grant select on table "public"."members" to "authenticated"; + +grant trigger on table "public"."members" to "authenticated"; + +grant truncate on table "public"."members" to "authenticated"; + +grant update on table "public"."members" to "authenticated"; + +grant delete on table "public"."members" to "service_role"; + +grant insert on table "public"."members" to "service_role"; + +grant references on table "public"."members" to "service_role"; + +grant select on table "public"."members" to "service_role"; + +grant trigger on table "public"."members" to "service_role"; + +grant truncate on table "public"."members" to "service_role"; + +grant update on table "public"."members" to "service_role"; + +create policy "Enable read access for all users" +on "public"."identities" +as permissive +for select +to public +using (true); + + +create policy "Enable delete for users based on user_id" +on "public"."members" +as permissive +for delete +to authenticated +using ((( SELECT auth.uid() AS uid) = uuid)); + + +create policy "Enable insert for users based on user_id" +on "public"."members" +as permissive +for insert +to authenticated +with check ((( SELECT auth.uid() AS uid) = uuid)); + + +create policy "Enable read access for authenticated users only" +on "public"."members" +as permissive +for select +to authenticated +using (true); + + +create policy "Enable update for users based on user_id" +on "public"."members" +as permissive +for update +to authenticated +using ((( SELECT auth.uid() AS uid) = uuid)) +with check ((( SELECT auth.uid() AS uid) = uuid)); + + + diff --git a/supabase/seed.sql b/supabase/seed.sql index e69de29..bc98eea 100644 --- a/supabase/seed.sql +++ b/supabase/seed.sql @@ -0,0 +1,287 @@ +SET session_replication_role = replica; + +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 15.1 (Ubuntu 15.1-1.pgdg20.04+1) +-- Dumped by pg_dump version 15.7 (Ubuntu 15.7-1.pgdg20.04+1) + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- Data for Name: audit_log_entries; Type: TABLE DATA; Schema: auth; Owner: supabase_auth_admin +-- + +INSERT INTO "auth"."audit_log_entries" ("instance_id", "id", "payload", "created_at", "ip_address") VALUES + ('00000000-0000-0000-0000-000000000000', 'deb1ed76-8824-41db-b828-41df13f8ab00', '{"action":"user_signedup","actor_id":"00000000-0000-0000-0000-000000000000","actor_username":"service_role","actor_via_sso":false,"log_type":"team","traits":{"user_email":"ncuapp@test.com","user_id":"c7e80cb0-7d3d-411f-9983-5e3addf62980","user_phone":""}}', '2024-10-02 10:35:35.562773+00', ''), + ('00000000-0000-0000-0000-000000000000', 'ed403553-8154-4688-8502-daea6f1ca73c', '{"action":"login","actor_id":"c7e80cb0-7d3d-411f-9983-5e3addf62980","actor_username":"ncuapp@test.com","actor_via_sso":false,"log_type":"account","traits":{"provider":"email"}}', '2024-10-02 10:36:09.936352+00', ''), + ('00000000-0000-0000-0000-000000000000', '95d16bac-bd07-4916-aebb-6a5625dab9f6', '{"action":"token_refreshed","actor_id":"c7e80cb0-7d3d-411f-9983-5e3addf62980","actor_username":"ncuapp@test.com","actor_via_sso":false,"log_type":"token"}', '2024-10-02 11:50:58.301333+00', ''), + ('00000000-0000-0000-0000-000000000000', 'cdb2a32e-8c07-4330-b919-58353546b459', '{"action":"token_revoked","actor_id":"c7e80cb0-7d3d-411f-9983-5e3addf62980","actor_username":"ncuapp@test.com","actor_via_sso":false,"log_type":"token"}', '2024-10-02 11:50:58.301792+00', ''), + ('00000000-0000-0000-0000-000000000000', 'b280f568-e5b8-48a8-b0e7-14df55570569', '{"action":"token_refreshed","actor_id":"c7e80cb0-7d3d-411f-9983-5e3addf62980","actor_username":"ncuapp@test.com","actor_via_sso":false,"log_type":"token"}', '2024-10-02 13:03:21.672306+00', ''), + ('00000000-0000-0000-0000-000000000000', '6e7d43fe-397b-4d1a-9342-0757d889bfff', '{"action":"token_revoked","actor_id":"c7e80cb0-7d3d-411f-9983-5e3addf62980","actor_username":"ncuapp@test.com","actor_via_sso":false,"log_type":"token"}', '2024-10-02 13:03:21.672995+00', ''), + ('00000000-0000-0000-0000-000000000000', '29566b6d-cb57-4800-96cd-694d89718dc3', '{"action":"token_refreshed","actor_id":"c7e80cb0-7d3d-411f-9983-5e3addf62980","actor_username":"ncuapp@test.com","actor_via_sso":false,"log_type":"token"}', '2024-10-02 14:03:23.417122+00', ''), + ('00000000-0000-0000-0000-000000000000', '8af4ff22-3ef3-460a-b4f4-79ad58377be4', '{"action":"token_revoked","actor_id":"c7e80cb0-7d3d-411f-9983-5e3addf62980","actor_username":"ncuapp@test.com","actor_via_sso":false,"log_type":"token"}', '2024-10-02 14:03:23.417642+00', ''), + ('00000000-0000-0000-0000-000000000000', 'a58c98ac-8669-4626-a9ba-5c1fd7044f50', '{"action":"token_refreshed","actor_id":"c7e80cb0-7d3d-411f-9983-5e3addf62980","actor_username":"ncuapp@test.com","actor_via_sso":false,"log_type":"token"}', '2024-10-02 15:03:38.959391+00', ''), + ('00000000-0000-0000-0000-000000000000', 'c8ca0a1d-6ead-4b58-94a9-db845a2bd529', '{"action":"token_revoked","actor_id":"c7e80cb0-7d3d-411f-9983-5e3addf62980","actor_username":"ncuapp@test.com","actor_via_sso":false,"log_type":"token"}', '2024-10-02 15:03:38.960108+00', ''), + ('00000000-0000-0000-0000-000000000000', '0a429f97-071a-4d76-95e1-6f1d3f20f8c1', '{"action":"logout","actor_id":"c7e80cb0-7d3d-411f-9983-5e3addf62980","actor_username":"ncuapp@test.com","actor_via_sso":false,"log_type":"account"}', '2024-10-02 15:56:28.490475+00', ''), + ('00000000-0000-0000-0000-000000000000', '72696d50-841d-462f-97d1-b776c12af0a3', '{"action":"login","actor_id":"c7e80cb0-7d3d-411f-9983-5e3addf62980","actor_username":"ncuapp@test.com","actor_via_sso":false,"log_type":"account","traits":{"provider":"email"}}', '2024-10-02 16:09:29.251602+00', ''), + ('00000000-0000-0000-0000-000000000000', '1265bb43-f5c7-4c1a-93c6-fce33fe5f1c1', '{"action":"login","actor_id":"c7e80cb0-7d3d-411f-9983-5e3addf62980","actor_username":"ncuapp@test.com","actor_via_sso":false,"log_type":"account","traits":{"provider":"email"}}', '2024-10-02 16:15:37.46596+00', ''), + ('00000000-0000-0000-0000-000000000000', 'ec161169-c89e-4b05-b901-67ee71294a17', '{"action":"logout","actor_id":"c7e80cb0-7d3d-411f-9983-5e3addf62980","actor_username":"ncuapp@test.com","actor_via_sso":false,"log_type":"account"}', '2024-10-02 16:19:38.156323+00', ''), + ('00000000-0000-0000-0000-000000000000', '22bd8fc1-ee1f-4209-a3ea-0ece49776bd7', '{"action":"login","actor_id":"c7e80cb0-7d3d-411f-9983-5e3addf62980","actor_username":"ncuapp@test.com","actor_via_sso":false,"log_type":"account","traits":{"provider":"email"}}', '2024-10-02 16:41:03.776042+00', ''), + ('00000000-0000-0000-0000-000000000000', '6582ebf9-2681-4279-b240-6372ea52b165', '{"action":"logout","actor_id":"c7e80cb0-7d3d-411f-9983-5e3addf62980","actor_username":"ncuapp@test.com","actor_via_sso":false,"log_type":"account"}', '2024-10-02 16:41:17.933011+00', ''), + ('00000000-0000-0000-0000-000000000000', 'b22254f7-aad1-4323-8015-a2faa18fec0e', '{"action":"login","actor_id":"c7e80cb0-7d3d-411f-9983-5e3addf62980","actor_username":"ncuapp@test.com","actor_via_sso":false,"log_type":"account","traits":{"provider":"email"}}', '2024-10-02 16:46:25.927847+00', ''), + ('00000000-0000-0000-0000-000000000000', 'a9594d72-c937-46cc-bd8a-1e2aee05a476', '{"action":"logout","actor_id":"c7e80cb0-7d3d-411f-9983-5e3addf62980","actor_username":"ncuapp@test.com","actor_via_sso":false,"log_type":"account"}', '2024-10-02 16:46:32.72011+00', ''), + ('00000000-0000-0000-0000-000000000000', '21974e0b-1b76-4f17-8f50-d6a1b7b3a8b2', '{"action":"login","actor_id":"c7e80cb0-7d3d-411f-9983-5e3addf62980","actor_username":"ncuapp@test.com","actor_via_sso":false,"log_type":"account","traits":{"provider":"email"}}', '2024-10-02 16:48:05.392616+00', ''), + ('00000000-0000-0000-0000-000000000000', 'adf3345c-0207-4bd4-95ed-936f5944ad6c', '{"action":"logout","actor_id":"c7e80cb0-7d3d-411f-9983-5e3addf62980","actor_username":"ncuapp@test.com","actor_via_sso":false,"log_type":"account"}', '2024-10-02 16:48:08.153584+00', ''), + ('00000000-0000-0000-0000-000000000000', '699045ab-841f-4766-a53b-1dd0fe9042e8', '{"action":"login","actor_id":"c7e80cb0-7d3d-411f-9983-5e3addf62980","actor_username":"ncuapp@test.com","actor_via_sso":false,"log_type":"account","traits":{"provider":"email"}}', '2024-10-02 16:48:17.708698+00', ''), + ('00000000-0000-0000-0000-000000000000', '51b875b1-286f-44f2-b0ce-aba59c4beb21', '{"action":"logout","actor_id":"c7e80cb0-7d3d-411f-9983-5e3addf62980","actor_username":"ncuapp@test.com","actor_via_sso":false,"log_type":"account"}', '2024-10-02 16:49:39.293615+00', ''); + + +-- +-- Data for Name: flow_state; Type: TABLE DATA; Schema: auth; Owner: supabase_auth_admin +-- + + + +-- +-- Data for Name: users; Type: TABLE DATA; Schema: auth; Owner: supabase_auth_admin +-- + +INSERT INTO "auth"."users" ("instance_id", "id", "aud", "role", "email", "encrypted_password", "email_confirmed_at", "invited_at", "confirmation_token", "confirmation_sent_at", "recovery_token", "recovery_sent_at", "email_change_token_new", "email_change", "email_change_sent_at", "last_sign_in_at", "raw_app_meta_data", "raw_user_meta_data", "is_super_admin", "created_at", "updated_at", "phone", "phone_confirmed_at", "phone_change", "phone_change_token", "phone_change_sent_at", "email_change_token_current", "email_change_confirm_status", "banned_until", "reauthentication_token", "reauthentication_sent_at", "is_sso_user", "deleted_at", "is_anonymous") VALUES + ('00000000-0000-0000-0000-000000000000', 'c7e80cb0-7d3d-411f-9983-5e3addf62980', 'authenticated', 'authenticated', 'ncuapp@test.com', '$2a$10$Y3OTXkqoLAgYrjGpEeMKLOuMnrYWwvLTRdqXwgRO9npX50TD8Ku32', '2024-10-02 10:35:35.563744+00', NULL, '', NULL, '', NULL, '', '', NULL, '2024-10-02 16:48:17.709158+00', '{"provider": "email", "providers": ["email"]}', '{}', NULL, '2024-10-02 10:35:35.560964+00', '2024-10-02 16:48:17.710194+00', NULL, NULL, '', '', NULL, '', 0, NULL, '', NULL, false, NULL, false); + + +-- +-- Data for Name: identities; Type: TABLE DATA; Schema: auth; Owner: supabase_auth_admin +-- + +INSERT INTO "auth"."identities" ("provider_id", "user_id", "identity_data", "provider", "last_sign_in_at", "created_at", "updated_at", "id") VALUES + ('c7e80cb0-7d3d-411f-9983-5e3addf62980', 'c7e80cb0-7d3d-411f-9983-5e3addf62980', '{"sub": "c7e80cb0-7d3d-411f-9983-5e3addf62980", "email": "ncuapp@test.com", "email_verified": false, "phone_verified": false}', 'email', '2024-10-02 10:35:35.562128+00', '2024-10-02 10:35:35.562151+00', '2024-10-02 10:35:35.562151+00', 'e9c1a1d6-f840-4461-8694-30e39456b383'); + + +-- +-- Data for Name: instances; Type: TABLE DATA; Schema: auth; Owner: supabase_auth_admin +-- + + + +-- +-- Data for Name: sessions; Type: TABLE DATA; Schema: auth; Owner: supabase_auth_admin +-- + + + +-- +-- Data for Name: mfa_amr_claims; Type: TABLE DATA; Schema: auth; Owner: supabase_auth_admin +-- + + + +-- +-- Data for Name: mfa_factors; Type: TABLE DATA; Schema: auth; Owner: supabase_auth_admin +-- + + + +-- +-- Data for Name: mfa_challenges; Type: TABLE DATA; Schema: auth; Owner: supabase_auth_admin +-- + + + +-- +-- Data for Name: one_time_tokens; Type: TABLE DATA; Schema: auth; Owner: supabase_auth_admin +-- + + + +-- +-- Data for Name: refresh_tokens; Type: TABLE DATA; Schema: auth; Owner: supabase_auth_admin +-- + + + +-- +-- Data for Name: sso_providers; Type: TABLE DATA; Schema: auth; Owner: supabase_auth_admin +-- + + + +-- +-- Data for Name: saml_providers; Type: TABLE DATA; Schema: auth; Owner: supabase_auth_admin +-- + + + +-- +-- Data for Name: saml_relay_states; Type: TABLE DATA; Schema: auth; Owner: supabase_auth_admin +-- + + + +-- +-- Data for Name: sso_domains; Type: TABLE DATA; Schema: auth; Owner: supabase_auth_admin +-- + + + +-- +-- Data for Name: key; Type: TABLE DATA; Schema: pgsodium; Owner: supabase_admin +-- + + + +-- +-- Data for Name: event_type; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +INSERT INTO "public"."event_type" ("type_id", "type_name") VALUES + (1, '揪人共乘'), + (2, '揪人運動'), + (3, '揪人遊戲'), + (4, '揪人其他'), + (5, '校園活動'), + (6, '社團活動'), + (7, '系上活動'), + (8, '活動其他'); + + +-- +-- Data for Name: events; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +INSERT INTO "public"."events" ("id", "name", "description", "start_time", "end_time", "fee", "created_at", "user_id", "type") VALUES + (1, 'ncu app recruiting', '', NULL, NULL, 0, '2024-10-02 10:38:22+00', 'c7e80cb0-7d3d-411f-9983-5e3addf62980', 4); + + +-- +-- Data for Name: identities; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +INSERT INTO "public"."identities" ("identity_no", "identity_name") VALUES + (2, 'Student'), + (3, 'Alumni'), + (4, 'School'), + (5, 'Others'), + (1, 'Dev Team'); + + +-- +-- Data for Name: members; Type: TABLE DATA; Schema: public; Owner: postgres +-- + +INSERT INTO "public"."members" ("uuid", "created_at", "name", "fk_email", "fk_identity", "grad_time", "avatar") VALUES + ('c7e80cb0-7d3d-411f-9983-5e3addf62980', '2024-10-02 10:35:46+00', 'NCU APP', 'ncuapp@test.com', 1, NULL, 'http://127.0.0.1:54321/storage/v1/object/public/avatar/logo.png?t=2024-10-02T15%3A39%3A22.509Z'); + + +-- +-- Data for Name: sales; Type: TABLE DATA; Schema: public; Owner: postgres +-- + + + +-- +-- Data for Name: buckets; Type: TABLE DATA; Schema: storage; Owner: supabase_storage_admin +-- + +INSERT INTO "storage"."buckets" ("id", "name", "owner", "created_at", "updated_at", "public", "avif_autodetection", "file_size_limit", "allowed_mime_types", "owner_id") VALUES + ('avatar', 'avatar', NULL, '2024-10-02 15:39:08.478744+00', '2024-10-02 15:39:08.478744+00', true, false, NULL, NULL, NULL); + + +-- +-- Data for Name: objects; Type: TABLE DATA; Schema: storage; Owner: supabase_storage_admin +-- + +INSERT INTO "storage"."objects" ("id", "bucket_id", "name", "owner", "created_at", "updated_at", "last_accessed_at", "metadata", "version", "owner_id", "user_metadata") VALUES + ('b452bfa8-6013-446a-a36f-8676914257c0', 'avatar', 'logo.png', NULL, '2024-10-02 15:39:19.235608+00', '2024-10-02 15:39:19.235608+00', '2024-10-02 15:39:19.235608+00', '{"eTag": "\"947cacbec2759960b0e6e5895e6d2d04\"", "size": 16858, "mimetype": "image/png", "cacheControl": "max-age=3600", "lastModified": "2024-10-02T15:39:19.226Z", "contentLength": 16858, "httpStatusCode": 200}', '89fd52da-ab3d-404c-bda5-e7233eb377f8', NULL, NULL), + ('e829e905-0433-47f2-a115-c420d2bfa770', 'avatar', 'defaultAvatar.webp', NULL, '2024-10-02 15:40:25.009052+00', '2024-10-02 15:40:25.009052+00', '2024-10-02 15:40:25.009052+00', '{"eTag": "\"0474dad9eb2752e87c90f18fa9529d93\"", "size": 18124, "mimetype": "image/webp", "cacheControl": "max-age=3600", "lastModified": "2024-10-02T15:40:25.005Z", "contentLength": 18124, "httpStatusCode": 200}', '8bebcc3d-4557-4d18-aa78-3f6f71a8eb31', NULL, NULL); + + +-- +-- Data for Name: s3_multipart_uploads; Type: TABLE DATA; Schema: storage; Owner: supabase_storage_admin +-- + + + +-- +-- Data for Name: s3_multipart_uploads_parts; Type: TABLE DATA; Schema: storage; Owner: supabase_storage_admin +-- + + + +-- +-- Data for Name: hooks; Type: TABLE DATA; Schema: supabase_functions; Owner: supabase_functions_admin +-- + + + +-- +-- Data for Name: secrets; Type: TABLE DATA; Schema: vault; Owner: supabase_admin +-- + + + +-- +-- Name: refresh_tokens_id_seq; Type: SEQUENCE SET; Schema: auth; Owner: supabase_auth_admin +-- + +SELECT pg_catalog.setval('"auth"."refresh_tokens_id_seq"', 11, true); + + +-- +-- Name: key_key_id_seq; Type: SEQUENCE SET; Schema: pgsodium; Owner: supabase_admin +-- + +SELECT pg_catalog.setval('"pgsodium"."key_key_id_seq"', 1, false); + + +-- +-- Name: event_type_type_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('"public"."event_type_type_id_seq"', 1, false); + + +-- +-- Name: events_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('"public"."events_id_seq"', 1, false); + + +-- +-- Name: identities_identity_no_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('"public"."identities_identity_no_seq"', 1, false); + + +-- +-- Name: sales_id_seq; Type: SEQUENCE SET; Schema: public; Owner: postgres +-- + +SELECT pg_catalog.setval('"public"."sales_id_seq"', 1, false); + + +-- +-- Name: hooks_id_seq; Type: SEQUENCE SET; Schema: supabase_functions; Owner: supabase_functions_admin +-- + +SELECT pg_catalog.setval('"supabase_functions"."hooks_id_seq"', 1, false); + + +-- +-- PostgreSQL database dump complete +-- + +RESET ALL; diff --git a/tailwind.config.js b/tailwind.config.js index dca8ba0..989cfd0 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -1,4 +1,6 @@ /** @type {import('tailwindcss').Config} */ +import daisyui from 'daisyui' + export default { content: [ "./index.html", @@ -7,5 +9,7 @@ export default { theme: { extend: {}, }, - plugins: [], + plugins: [ + daisyui, + ], }