diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 11ecc57c..4f5dd3ed 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -77,7 +77,6 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", @@ -365,6 +364,7 @@ "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.2.tgz", "integrity": "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@eslint/object-schema": "^2.1.7", "debug": "^4.3.1", @@ -379,6 +379,7 @@ "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@eslint/core": "^0.17.0" }, @@ -391,6 +392,7 @@ "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@types/json-schema": "^7.0.15" }, @@ -403,6 +405,7 @@ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.5.tgz", "integrity": "sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==", "license": "MIT", + "peer": true, "dependencies": { "ajv": "^6.14.0", "debug": "^4.3.2", @@ -426,6 +429,7 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -438,6 +442,7 @@ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.4.tgz", "integrity": "sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==", "license": "MIT", + "peer": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -450,6 +455,7 @@ "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", "license": "Apache-2.0", + "peer": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } @@ -459,6 +465,7 @@ "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@eslint/core": "^0.17.0", "levn": "^0.4.1" @@ -545,6 +552,7 @@ "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", "license": "Apache-2.0", + "peer": true, "engines": { "node": ">=18.18.0" } @@ -554,6 +562,7 @@ "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", "license": "Apache-2.0", + "peer": true, "dependencies": { "@humanfs/core": "^0.19.1", "@humanwhocodes/retry": "^0.4.0" @@ -567,6 +576,7 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "license": "Apache-2.0", + "peer": true, "engines": { "node": ">=12.22" }, @@ -580,6 +590,7 @@ "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", "license": "Apache-2.0", + "peer": true, "engines": { "node": ">=18.18" }, @@ -2257,13 +2268,15 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@types/json5": { "version": "0.0.29", @@ -2286,7 +2299,6 @@ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", "license": "MIT", - "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -2297,7 +2309,6 @@ "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", "devOptional": true, "license": "MIT", - "peer": true, "peerDependencies": { "@types/react": "^19.2.0" } @@ -2382,7 +2393,6 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.57.2.tgz", "integrity": "sha512-30ScMRHIAD33JJQkgfGW1t8CURZtjc2JpTrq5n2HFhOefbAhb7ucc7xJwdWcrEtqUIYJ73Nybpsggii6GtAHjA==", "license": "MIT", - "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "8.57.2", "@typescript-eslint/types": "8.57.2", @@ -2895,6 +2905,7 @@ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "license": "MIT", + "peer": true, "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -2904,6 +2915,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -2920,6 +2932,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "license": "MIT", + "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -2934,7 +2947,8 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "license": "Python-2.0" + "license": "Python-2.0", + "peer": true }, "node_modules/aria-query": { "version": "5.3.2", @@ -3224,7 +3238,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -3315,6 +3328,7 @@ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "license": "MIT", + "peer": true, "engines": { "node": ">=6" } @@ -3344,6 +3358,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "license": "MIT", + "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3387,6 +3402,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "license": "MIT", + "peer": true, "dependencies": { "color-name": "~1.1.4" }, @@ -3398,7 +3414,8 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/concat-map": { "version": "0.0.1", @@ -3417,6 +3434,7 @@ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "license": "MIT", + "peer": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -3510,7 +3528,8 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/define-data-property": { "version": "1.1.4", @@ -3792,6 +3811,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "license": "MIT", + "peer": true, "engines": { "node": ">=10" }, @@ -3970,7 +3990,6 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.32.0.tgz", "integrity": "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==", "license": "MIT", - "peer": true, "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", @@ -4116,6 +4135,7 @@ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz", "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==", "license": "BSD-2-Clause", + "peer": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -4132,6 +4152,7 @@ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "license": "Apache-2.0", + "peer": true, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -4144,6 +4165,7 @@ "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", "license": "BSD-2-Clause", + "peer": true, "dependencies": { "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", @@ -4161,6 +4183,7 @@ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", "license": "BSD-3-Clause", + "peer": true, "dependencies": { "estraverse": "^5.1.0" }, @@ -4173,6 +4196,7 @@ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "license": "BSD-2-Clause", + "peer": true, "dependencies": { "estraverse": "^5.2.0" }, @@ -4202,7 +4226,8 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/fast-glob": { "version": "3.3.1", @@ -4236,13 +4261,15 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/fastq": { "version": "1.20.1", @@ -4265,6 +4292,7 @@ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "license": "MIT", + "peer": true, "dependencies": { "flat-cache": "^4.0.0" }, @@ -4289,6 +4317,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "license": "MIT", + "peer": true, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -4305,6 +4334,7 @@ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "license": "MIT", + "peer": true, "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" @@ -4317,7 +4347,8 @@ "version": "3.4.2", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", - "license": "ISC" + "license": "ISC", + "peer": true }, "node_modules/for-each": { "version": "0.3.5", @@ -4488,6 +4519,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "license": "ISC", + "peer": true, "dependencies": { "is-glob": "^4.0.3" }, @@ -4559,6 +4591,7 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "license": "MIT", + "peer": true, "engines": { "node": ">=8" } @@ -4669,6 +4702,7 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "license": "MIT", + "peer": true, "engines": { "node": ">= 4" } @@ -4678,6 +4712,7 @@ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "license": "MIT", + "peer": true, "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -4694,6 +4729,7 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.8.19" } @@ -5110,7 +5146,8 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" + "license": "ISC", + "peer": true }, "node_modules/iterator.prototype": { "version": "1.1.5", @@ -5147,7 +5184,6 @@ "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", "devOptional": true, "license": "MIT", - "peer": true, "bin": { "jiti": "lib/jiti-cli.mjs" } @@ -5163,6 +5199,7 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "license": "MIT", + "peer": true, "dependencies": { "argparse": "^2.0.1" }, @@ -5186,19 +5223,22 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/json5": { "version": "2.2.3", @@ -5232,6 +5272,7 @@ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "license": "MIT", + "peer": true, "dependencies": { "json-buffer": "3.0.1" } @@ -5259,6 +5300,7 @@ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "license": "MIT", + "peer": true, "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -5533,6 +5575,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "license": "MIT", + "peer": true, "dependencies": { "p-locate": "^5.0.0" }, @@ -5547,7 +5590,8 @@ "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/loose-envify": { "version": "1.4.0", @@ -5942,6 +5986,7 @@ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "license": "MIT", + "peer": true, "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -5976,6 +6021,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "license": "MIT", + "peer": true, "dependencies": { "yocto-queue": "^0.1.0" }, @@ -5991,6 +6037,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "license": "MIT", + "peer": true, "dependencies": { "p-limit": "^3.0.2" }, @@ -6006,6 +6053,7 @@ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "license": "MIT", + "peer": true, "dependencies": { "callsites": "^3.0.0" }, @@ -6018,6 +6066,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "license": "MIT", + "peer": true, "engines": { "node": ">=8" } @@ -6027,6 +6076,7 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "license": "MIT", + "peer": true, "engines": { "node": ">=8" } @@ -6098,6 +6148,7 @@ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "license": "MIT", + "peer": true, "engines": { "node": ">= 0.8.0" } @@ -6118,6 +6169,7 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "license": "MIT", + "peer": true, "engines": { "node": ">=6" } @@ -6147,7 +6199,6 @@ "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", "license": "MIT", - "peer": true, "engines": { "node": ">=0.10.0" } @@ -6157,7 +6208,6 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", "license": "MIT", - "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -6262,6 +6312,7 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "license": "MIT", + "peer": true, "engines": { "node": ">=4" } @@ -6484,6 +6535,7 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "license": "MIT", + "peer": true, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -6496,6 +6548,7 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "license": "MIT", + "peer": true, "engines": { "node": ">=8" } @@ -6721,6 +6774,7 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "license": "MIT", + "peer": true, "engines": { "node": ">=8" }, @@ -6756,6 +6810,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "license": "MIT", + "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -6825,8 +6880,7 @@ "version": "0.182.0", "resolved": "https://registry.npmjs.org/three/-/three-0.182.0.tgz", "integrity": "sha512-GbHabT+Irv+ihI1/f5kIIsZ+Ef9Sl5A1Y7imvS5RQjWgtTPfPnZ43JmlYI7NtCRDK9zir20lQpfg8/9Yd02OvQ==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/tinyglobby": { "version": "0.2.15", @@ -6866,7 +6920,6 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "license": "MIT", - "peer": true, "engines": { "node": ">=12" }, @@ -6943,6 +6996,7 @@ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "license": "MIT", + "peer": true, "dependencies": { "prelude-ls": "^1.2.1" }, @@ -7029,7 +7083,6 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -7155,6 +7208,7 @@ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "license": "BSD-2-Clause", + "peer": true, "dependencies": { "punycode": "^2.1.0" } @@ -7173,6 +7227,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "license": "ISC", + "peer": true, "dependencies": { "isexe": "^2.0.0" }, @@ -7273,6 +7328,7 @@ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -7288,6 +7344,7 @@ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "license": "MIT", + "peer": true, "engines": { "node": ">=10" }, @@ -7300,7 +7357,6 @@ "resolved": "https://registry.npmjs.org/zod/-/zod-4.3.6.tgz", "integrity": "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==", "license": "MIT", - "peer": true, "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/frontend/src/app/Faq/page.tsx b/frontend/src/app/Faq/page.tsx index 94f9089e..33de49e1 100644 --- a/frontend/src/app/Faq/page.tsx +++ b/frontend/src/app/Faq/page.tsx @@ -1,5 +1,5 @@ "use client"; - +import Button from '@/components/Button'; import Link from "next/link"; import { useState } from "react"; import { ChevronLeft, Plus, Minus } from "lucide-react"; @@ -86,7 +86,7 @@ export default function CryptoFAQ() { key={item.id} className="overflow-hidden rounded-2xl border border-white/10 bg-[#0f172a]/90" > - + {item.isOpen && (
diff --git a/frontend/src/app/community-courses/page.tsx b/frontend/src/app/community-courses/page.tsx index f841398e..209167a4 100644 --- a/frontend/src/app/community-courses/page.tsx +++ b/frontend/src/app/community-courses/page.tsx @@ -1,4 +1,5 @@ "use client"; +import Button from '@/components/Button'; import { useState, useEffect } from "react"; import Coursenav from "@/component/coursenav"; import CommunityCard from "@/component/CommunityCard"; @@ -172,13 +173,7 @@ export default function CommunityCoursesPage() { Explore Courses Created By The Community Or Share Your Own

- + {/* Search and Create Course */} @@ -216,19 +211,15 @@ export default function CommunityCoursesPage() { { id: "top rated", label: "Top Rated" }, { id: "new", label: "New" }, ].map((filter) => ( - + ))} diff --git a/frontend/src/app/contact/page.tsx b/frontend/src/app/contact/page.tsx index 97bb7830..98dc69cb 100644 --- a/frontend/src/app/contact/page.tsx +++ b/frontend/src/app/contact/page.tsx @@ -1,5 +1,5 @@ "use client"; - +import Button from '@/components/Button'; import { useState } from "react"; import Link from "next/link"; import { ChevronLeft, Send, CheckCircle, AlertCircle, MessageSquare, Twitter, Github } from "lucide-react"; @@ -107,24 +107,25 @@ export default function ContactPage() {

Thanks for reaching out. We typically respond within 24–48 hours.

- + ) : status === "error" ? (

Something went wrong

Please try again or reach us directly via social media.

- +
) : (
@@ -185,18 +186,14 @@ export default function ContactPage() { {errors.message &&

{errors.message}

} - +
)} diff --git a/frontend/src/app/docs/page.tsx b/frontend/src/app/docs/page.tsx index a6477063..e2d5634a 100644 --- a/frontend/src/app/docs/page.tsx +++ b/frontend/src/app/docs/page.tsx @@ -1,5 +1,5 @@ "use client"; - +import Button from '@/components/Button'; import React, { useState } from "react"; import Header from "@/component/Header"; import Footer from "@/component/Footer"; @@ -180,9 +180,9 @@ export default function DocsPage() { {section.external ? : } ) : ( - + )} @@ -205,12 +205,12 @@ export default function DocsPage() { New to prediction markets? Understand how prices reflect probability, how liquidity works, and why decentralized markets offer superior insight compared to traditional polling.

- - + +
@@ -231,13 +231,13 @@ export default function DocsPage() { key={idx} className="border border-white/10 rounded-2xl bg-white/5 overflow-hidden transition-colors hover:border-white/20" > - + {activeFaq === idx && (
- - + +
@@ -151,7 +151,7 @@ export default function EventsPage() { {/* Tabs */}
{tabs.map((tab) => ( - + ))}
{/* Filter and Sort */}
- - + +
diff --git a/frontend/src/app/externaltools/page.tsx b/frontend/src/app/externaltools/page.tsx index 0a8e4ca7..7191c081 100644 --- a/frontend/src/app/externaltools/page.tsx +++ b/frontend/src/app/externaltools/page.tsx @@ -1,4 +1,5 @@ "use client"; +import Button from '@/components/Button'; import Header from "@/component/resources/Header"; import Footer from "@/component/resources/Footer"; import React, { useState } from "react"; @@ -103,7 +104,7 @@ const Resources = () => { {item.description}
- +
))} @@ -126,9 +127,9 @@ const Resources = () => {

- +
diff --git a/frontend/src/app/login/page.tsx b/frontend/src/app/login/page.tsx index b2a13a7b..2970aa4f 100644 --- a/frontend/src/app/login/page.tsx +++ b/frontend/src/app/login/page.tsx @@ -1,4 +1,5 @@ "use client"; +import Button from '@/components/Button'; import { useState } from "react"; import type { NextPage } from "next"; import Head from "next/head"; @@ -53,7 +54,7 @@ const Login: NextPage = () => {
{/* OAuth Buttons */}
- - +
{/* Divider */} @@ -130,12 +131,12 @@ const Login: NextPage = () => {

- +
diff --git a/frontend/src/app/markets/page.tsx b/frontend/src/app/markets/page.tsx index c8810b31..0ae3d953 100644 --- a/frontend/src/app/markets/page.tsx +++ b/frontend/src/app/markets/page.tsx @@ -1,5 +1,5 @@ "use client"; - +import Button from '@/components/Button'; import { useEffect, useMemo, useState } from "react"; import { ArrowUpRight, @@ -292,7 +292,7 @@ export default function MarketsPage() {
{filteredMarkets.map((market) => ( -
- + ))} @@ -402,13 +402,13 @@ export default function MarketsPage() { - + ) : null} diff --git a/frontend/src/app/profile/components/YourCoursesCard.tsx b/frontend/src/app/profile/components/YourCoursesCard.tsx index e3e67017..7880b93e 100644 --- a/frontend/src/app/profile/components/YourCoursesCard.tsx +++ b/frontend/src/app/profile/components/YourCoursesCard.tsx @@ -1,3 +1,4 @@ +import Button from '@/components/Button'; import { useState } from "react"; import { Progress } from "@/component/ui/progress"; import { BookOpen } from "lucide-react"; @@ -28,13 +29,13 @@ export default function YourCoursesCard({ courses }: { courses: Course[] }) { {/* Tabs fuera del card principal */}
{tabs.map((tab) => ( - + ))}
{/* Card principal */} diff --git a/frontend/src/app/signin/page.tsx b/frontend/src/app/signin/page.tsx index 1c179de2..ff17a2e1 100644 --- a/frontend/src/app/signin/page.tsx +++ b/frontend/src/app/signin/page.tsx @@ -1,4 +1,5 @@ "use client"; +import Button from '@/components/Button'; import { useState } from "react"; import type { NextPage } from "next"; import Head from "next/head"; @@ -46,22 +47,22 @@ const SignUp: NextPage = () => {
{/* OAuth Buttons */}
- - +
{/* Divider */} @@ -146,12 +147,12 @@ const SignUp: NextPage = () => {

Must be at least 8 character Long

- +
diff --git a/frontend/src/app/test-buttons/page.tsx b/frontend/src/app/test-buttons/page.tsx new file mode 100644 index 00000000..def13ff3 --- /dev/null +++ b/frontend/src/app/test-buttons/page.tsx @@ -0,0 +1,28 @@ +import Button from '@/components/Button'; + +export default function ButtonTestPage() { + return ( +
+

Button Variant Gallery

+ +
+
+

Primary (Orange)

+ +
+
+

Secondary (Teal)

+ +
+
+ +
+

States & Loading

+
+ + +
+
+
+ ); +} \ No newline at end of file diff --git a/frontend/src/component/CompetitionsJoined.tsx b/frontend/src/component/CompetitionsJoined.tsx index 3b20e530..a12023a6 100644 --- a/frontend/src/component/CompetitionsJoined.tsx +++ b/frontend/src/component/CompetitionsJoined.tsx @@ -1,5 +1,5 @@ "use client"; - +import Button from '@/components/Button'; import { ChevronRight } from "lucide-react"; interface Competition { @@ -53,10 +53,10 @@ export default function CompetitionsJoined() { {/* Header */}

Competitions Joined

- +
{/* Competitions Grid */} diff --git a/frontend/src/component/CourseCompletionButton.tsx b/frontend/src/component/CourseCompletionButton.tsx index b125f6d6..08a2d0b7 100644 --- a/frontend/src/component/CourseCompletionButton.tsx +++ b/frontend/src/component/CourseCompletionButton.tsx @@ -1,4 +1,5 @@ import React, { useState } from 'react'; +import Button from '@/components/Button'; import CourseCompletionModal from './CourseCompletionModal'; const CourseCompletionButton = () => { @@ -6,12 +7,12 @@ const CourseCompletionButton = () => { return ( <> - + -
- {/* Header */} -
-

- Stark Academy -

- +
{/* Content */}
-
- Celebration illustration for course completion +
+ Celebration illustration for course completion

CONGRATULATION ON FINISHING YOUR COURSE TIME TO CLAIM YOUR BADGE.

@@ -82,9 +83,9 @@ const CourseCompletionModal = ({ isOpen, onClose }: CourseCompletionModalProps) {/* Action Buttons */}
- + - +
@@ -124,4 +125,4 @@ const CourseCompletionModal = ({ isOpen, onClose }: CourseCompletionModalProps) ); }; -export default CourseCompletionModal; +export default CourseCompletionModal; diff --git a/frontend/src/component/Header.tsx b/frontend/src/component/Header.tsx index 34692307..2db10e26 100644 --- a/frontend/src/component/Header.tsx +++ b/frontend/src/component/Header.tsx @@ -1,5 +1,5 @@ "use client"; - +import Button from '@/components/Button'; import Link from "next/link"; import { useEffect, useRef, useState } from "react"; import { usePathname } from "next/navigation"; @@ -137,9 +137,9 @@ export default function Header() { ☰ - +
diff --git a/frontend/src/component/Homepage/Faq.tsx b/frontend/src/component/Homepage/Faq.tsx index 9db9d660..01808a80 100644 --- a/frontend/src/component/Homepage/Faq.tsx +++ b/frontend/src/component/Homepage/Faq.tsx @@ -1,5 +1,5 @@ "use client"; - +import Button from '@/components/Button'; import { useState } from "react"; import { ChevronDown } from "lucide-react"; import { motion, AnimatePresence } from "framer-motion"; @@ -67,7 +67,7 @@ export default function Faq() { className="bg-gray-950/60 border border-[#1e2d45] rounded-lg" > {/* Question Row */} - + {/* Answer */} diff --git a/frontend/src/component/Homepage/HeroSection.tsx b/frontend/src/component/Homepage/HeroSection.tsx index 570e678a..4420e283 100644 --- a/frontend/src/component/Homepage/HeroSection.tsx +++ b/frontend/src/component/Homepage/HeroSection.tsx @@ -1,3 +1,4 @@ +import Button from '@/components/Button'; import Image from "next/image"; import UnifiedBackground from "./UnifiedBackground"; @@ -35,14 +36,15 @@ export default function HeroSection() {

-
- - -
+
+ + + +
diff --git a/frontend/src/component/Homepage/Hero_section.tsx b/frontend/src/component/Homepage/Hero_section.tsx index a10f6686..cdf30eca 100644 --- a/frontend/src/component/Homepage/Hero_section.tsx +++ b/frontend/src/component/Homepage/Hero_section.tsx @@ -1,4 +1,5 @@ "use client"; +import Button from '@/components/Button'; import { useState, useEffect } from "react"; import { FaGraduationCap, FaTrophy } from "react-icons/fa"; import { motion } from "framer-motion"; @@ -57,7 +58,7 @@ export default function Hero() { {/* Buttons */}
- + - +
{/* Stats */} diff --git a/frontend/src/component/Homepage/HowItWorks.tsx b/frontend/src/component/Homepage/HowItWorks.tsx index 20e43eea..6c4c8b37 100644 --- a/frontend/src/component/Homepage/HowItWorks.tsx +++ b/frontend/src/component/Homepage/HowItWorks.tsx @@ -1,4 +1,5 @@ import { Card, CardContent } from "@/component/ui/card" +import Button from '@/components/Button'; import { Star, Shield, Trophy, Award, Users, BookOpen, Gift } from "lucide-react" @@ -311,12 +312,12 @@ export default function HowItWorks() {

- - + +
diff --git a/frontend/src/component/QuickActions.tsx b/frontend/src/component/QuickActions.tsx index ce7b7cbe..7c7133d9 100644 --- a/frontend/src/component/QuickActions.tsx +++ b/frontend/src/component/QuickActions.tsx @@ -1,3 +1,4 @@ +import Button from '@/components/Button'; import React from 'react'; // These icons are common in React projects. // If they aren't installed, we can switch to simple emojis for now! @@ -20,7 +21,7 @@ const QuickActions = () => { {/* Requirement: Responsive Grid. 2 columns on mobile, 4 on tablet/desktop */}
{actions.map((item, index) => ( - + ))}
diff --git a/frontend/src/component/RewardsWalletCard.tsx b/frontend/src/component/RewardsWalletCard.tsx index bb085d8e..c1934bd0 100644 --- a/frontend/src/component/RewardsWalletCard.tsx +++ b/frontend/src/component/RewardsWalletCard.tsx @@ -1,5 +1,5 @@ import { Wallet } from "lucide-react"; - +import Button from '@/components/Button'; export default function RewardsWalletCard() { return (
@@ -42,9 +42,9 @@ export default function RewardsWalletCard() {
{/* Button */} - + ); } diff --git a/frontend/src/component/coursenav.tsx b/frontend/src/component/coursenav.tsx index 8f58b96d..8438b371 100644 --- a/frontend/src/component/coursenav.tsx +++ b/frontend/src/component/coursenav.tsx @@ -1,5 +1,5 @@ "use client"; - +import Button from '@/components/Button'; import { useState } from "react"; import { Dialog } from "@headlessui/react"; import { Moon, Menu, X, Bell } from "lucide-react"; @@ -31,7 +31,7 @@ const Navbar = () => {
{/* Course section */}
- + {/* Modal positioned directly under the button */} {isCoursesOpen && ( {
{/* Trading section */} - + {/* Airdrops */} - + {/* Resources Section */}
- + {/* Modal positioned directly under the button */} {isResourcesOpen && ( { /> )}
- - + - +
{/* Mobile Hamburger */}
- +
{/* Mobile Menu Dialog */} @@ -156,13 +156,13 @@ const Navbar = () => {

Menu

- +
{/* Mobile menu items with consistent styling */} - + - + - + - +
- - + - +
diff --git a/frontend/src/component/dashboard-shell.tsx b/frontend/src/component/dashboard-shell.tsx index b92c22aa..8ac142bd 100644 --- a/frontend/src/component/dashboard-shell.tsx +++ b/frontend/src/component/dashboard-shell.tsx @@ -1,5 +1,5 @@ "use client"; - +import Button from '@/components/Button'; import RewardsWalletCard from "@/component/RewardsWalletCard"; import NotificationsCard from "@/component/NotificationsCard"; @@ -105,13 +105,13 @@ function SidebarContent({ onNavigate }: SidebarContentProps) {

0x71A4...9cF2

- + @@ -132,21 +132,21 @@ function TopNavigation() {

- - +
@@ -177,14 +177,14 @@ export function DashboardShell({ children }: DashboardShellProps) {
- +
@@ -212,7 +212,7 @@ export function DashboardShell({ children }: DashboardShellProps) { }`} aria-hidden={!mobileOpen} > - + setMobileOpen(false)} />
diff --git a/frontend/src/component/events/EventsCompetitionsHero.tsx b/frontend/src/component/events/EventsCompetitionsHero.tsx index 15975220..de0a7cd0 100644 --- a/frontend/src/component/events/EventsCompetitionsHero.tsx +++ b/frontend/src/component/events/EventsCompetitionsHero.tsx @@ -57,7 +57,7 @@ export default function EventsCompetitionsHero() {
{tabs.map((tab) => ( - + ))}
diff --git a/frontend/src/component/leaderboard/LeaderboardFilters.tsx b/frontend/src/component/leaderboard/LeaderboardFilters.tsx index c5c6da9e..30622b45 100644 --- a/frontend/src/component/leaderboard/LeaderboardFilters.tsx +++ b/frontend/src/component/leaderboard/LeaderboardFilters.tsx @@ -1,7 +1,7 @@ "use client"; import { useState } from "react"; - +import Button from '@/components/Button'; export type TimeRange = "daily" | "weekly" | "monthly" | "all-time"; export type Category = "all" | "crypto" | "sports" | "politics" | "custom"; export type SortBy = "points" | "win-rate" | "predictions"; @@ -58,7 +58,7 @@ export default function LeaderboardFilters({ onChange }: LeaderboardFiltersProps {/* Time range pill group */}
{TIME_RANGES.map(({ label, value }) => ( - + ))}
diff --git a/frontend/src/component/leaderboard/LeaderboardOverview.tsx b/frontend/src/component/leaderboard/LeaderboardOverview.tsx index 0f7104f6..793f4901 100644 --- a/frontend/src/component/leaderboard/LeaderboardOverview.tsx +++ b/frontend/src/component/leaderboard/LeaderboardOverview.tsx @@ -1,5 +1,5 @@ import StatCard, { StatCardProps } from "../rewards/StatCard"; - +import Button from '@/components/Button'; function UsersIcon() { return ( - + {/* Stat cards grid */} diff --git a/frontend/src/component/resources/Footer.tsx b/frontend/src/component/resources/Footer.tsx index 93eb9b50..69809e35 100644 --- a/frontend/src/component/resources/Footer.tsx +++ b/frontend/src/component/resources/Footer.tsx @@ -1,4 +1,5 @@ import { Twitter, Instagram, Github } from "lucide-react"; +import Button from '@/components/Button'; const Footer = () => { return (
@@ -19,9 +20,9 @@ const Footer = () => {
diff --git a/frontend/src/component/resources/Header.tsx b/frontend/src/component/resources/Header.tsx index bcb33053..d0a61466 100644 --- a/frontend/src/component/resources/Header.tsx +++ b/frontend/src/component/resources/Header.tsx @@ -1,4 +1,5 @@ "use client"; +import Button from '@/components/Button'; import React, { useState } from "react"; import { Book, ChartLine, Gift, ScrollText, BellDot, Moon } from "lucide-react"; import Link from "next/link"; @@ -41,9 +42,9 @@ const Header = () => {
- +
diff --git a/frontend/src/component/rewards/RewardHistoryTable.tsx b/frontend/src/component/rewards/RewardHistoryTable.tsx index 0b3d749f..19904b9e 100644 --- a/frontend/src/component/rewards/RewardHistoryTable.tsx +++ b/frontend/src/component/rewards/RewardHistoryTable.tsx @@ -1,5 +1,5 @@ "use client"; - +import Button from '@/components/Button'; import RewardStatusBadge, { RewardStatus } from "./RewardStatusBadge"; import RewardTypeBadge, { RewardType } from "./RewardTypeBadge"; @@ -114,7 +114,7 @@ export default function RewardHistoryTable({ {/* Load More */} {(hasMore || entries.length > 0) && (
- +
)} diff --git a/frontend/src/component/rewards/RewardsOverview.tsx b/frontend/src/component/rewards/RewardsOverview.tsx index 9eb05cad..599e4b5c 100644 --- a/frontend/src/component/rewards/RewardsOverview.tsx +++ b/frontend/src/component/rewards/RewardsOverview.tsx @@ -1,5 +1,5 @@ import StatCard, { StatCardProps } from "./StatCard"; - +import Button from '@/components/Button'; // Icons function DollarIcon() { return ( @@ -88,14 +88,14 @@ export default function RewardsOverview({ Track your earnings, claim rewards, and review payout history.

- + {/* Stat cards grid */} diff --git a/frontend/src/component/trading/MarketRow.tsx b/frontend/src/component/trading/MarketRow.tsx index 22d5034b..a04a44a9 100644 --- a/frontend/src/component/trading/MarketRow.tsx +++ b/frontend/src/component/trading/MarketRow.tsx @@ -1,3 +1,4 @@ +import Button from '@/components/Button'; import React from "react"; import Image from "next/image"; @@ -72,22 +73,22 @@ const MarketRow: React.FC = ({ {volume}
- - +
); diff --git a/frontend/src/component/trading/MarketSearchBar.tsx b/frontend/src/component/trading/MarketSearchBar.tsx index 37625918..d0cd808d 100644 --- a/frontend/src/component/trading/MarketSearchBar.tsx +++ b/frontend/src/component/trading/MarketSearchBar.tsx @@ -1,5 +1,5 @@ import React from "react"; - +import Button from '@/components/Button'; interface MarketSearchBarProps { searchValue: string; onSearchChange: (e: React.ChangeEvent) => void; @@ -41,7 +41,7 @@ const MarketSearchBar: React.FC = ({ searchValue, onSearch />
- - +
); diff --git a/frontend/src/component/trading/TradingTabs.tsx b/frontend/src/component/trading/TradingTabs.tsx index 4f5572c2..da8ac518 100644 --- a/frontend/src/component/trading/TradingTabs.tsx +++ b/frontend/src/component/trading/TradingTabs.tsx @@ -1,5 +1,5 @@ import React from "react"; - +import Button from '@/components/Button'; interface TradingTabsProps { activeTab: string; onTabChange: (tab: string) => void; @@ -35,7 +35,7 @@ const TradingTabs: React.FC = ({ activeTab, onTabChange }) => return (
{tabs.map((tab) => ( - + ))}
); diff --git a/frontend/src/components/Button.tsx b/frontend/src/components/Button.tsx new file mode 100644 index 00000000..cdf69f39 --- /dev/null +++ b/frontend/src/components/Button.tsx @@ -0,0 +1,52 @@ +import React from 'react'; +import { Loader2 } from 'lucide-react'; + +interface ButtonProps extends React.ButtonHTMLAttributes { + variant?: 'primary' | 'secondary' | 'danger' | 'ghost'; + size?: 'sm' | 'md' | 'lg'; + isLoading?: boolean; // Add this line! +} + +const Button: React.FC = ({ + variant = 'primary', + size = 'md', + isLoading = false, + className = '', + children, + ...props +}) => { + + const baseStyles = "inline-flex items-center justify-center font-semibold transition-all duration-200 rounded-lg focus:outline-none focus:ring-2 focus:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed"; + + const variants = { + primary: "bg-[#f97316] text-white hover:bg-[#ea580c] focus:ring-orange-500", // Orange + secondary: "bg-[#4FD1C5] text-black hover:bg-[#38b2ac] focus:ring-teal-400", // Teal + ghost: "border border-gray-700 text-gray-300 hover:bg-gray-800 hover:text-white focus:ring-gray-500", + danger: "bg-red-600 text-white hover:bg-red-700 focus:ring-red-500", + }; + + const sizes = { + sm: "px-3 py-1.5 text-xs", + md: "px-5 py-2.5 text-sm", + lg: "px-8 py-3.5 text-base", + }; + + return ( + + ); +}; + +export default Button; \ No newline at end of file