diff --git a/frontend/.gitignore b/frontend/.gitignore index 75e25e0ef4..093ec6dcbd 100644 --- a/frontend/.gitignore +++ b/frontend/.gitignore @@ -27,4 +27,4 @@ openapi.json /playwright-report/ /blob-report/ /playwright/.cache/ -/playwright/.auth/ \ No newline at end of file +/playwright/.auth/ diff --git a/frontend/package-lock.json b/frontend/package-lock.json index f11637676d..61b781c9a4 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -90,6 +90,7 @@ "integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.3", @@ -3143,6 +3144,7 @@ "version": "5.90.12", "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.90.12.tgz", "integrity": "sha512-graRZspg7EoEaw0a8faiUASCyJrqjKPdqJ9EwuDRUF9mEYJ1YPczI9H+/agJ0mOJkPCJDk0lsz5QTrLZ/jQ2rg==", + "peer": true, "dependencies": { "@tanstack/query-core": "5.90.12" }, @@ -3175,6 +3177,7 @@ "version": "1.141.2", "resolved": "https://registry.npmjs.org/@tanstack/react-router/-/react-router-1.141.2.tgz", "integrity": "sha512-inPEgxYuGPNJvd7wo9BYVKW/BP9GwZO0EaZLBE7+l0RtPcIqAQQLqYhYwb2xikuQg6ueZectj7LObAGivkBpSw==", + "peer": true, "dependencies": { "@tanstack/history": "1.141.0", "@tanstack/react-store": "^0.8.0", @@ -3297,6 +3300,7 @@ "version": "1.140.0", "resolved": "https://registry.npmjs.org/@tanstack/router-core/-/router-core-1.140.0.tgz", "integrity": "sha512-/Te/mlAzi5FEpZ9NF9RhVw/n+cWYLiCHpvevNKo7JPA8ZYWF58wkalPtNWSocftX4P+OIBNerFAW9UbLgSbvSw==", + "peer": true, "dependencies": { "@tanstack/history": "1.140.0", "@tanstack/store": "^0.8.0", @@ -3664,6 +3668,7 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.2.tgz", "integrity": "sha512-gWEkeiyYE4vqjON/+Obqcoeffmk0NF15WSBwSs7zwVA2bAbTaE0SJ7P0WNGoJn8uE7fiaV5a7dKYIJriEqOrmA==", "devOptional": true, + "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -3673,6 +3678,7 @@ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz", "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", "devOptional": true, + "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -3682,6 +3688,7 @@ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", "devOptional": true, + "peer": true, "peerDependencies": { "@types/react": "^19.2.0" } @@ -3866,6 +3873,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "caniuse-lite": "^1.0.30001737", "electron-to-chromium": "^1.5.211", @@ -4099,7 +4107,8 @@ "node_modules/csstype": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", - "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==" + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "peer": true }, "node_modules/debug": { "version": "4.4.1", @@ -5616,6 +5625,7 @@ "version": "19.2.3", "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -5624,6 +5634,7 @@ "version": "19.2.3", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", + "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -5646,6 +5657,7 @@ "version": "7.68.0", "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.68.0.tgz", "integrity": "sha512-oNN3fjrZ/Xo40SWlHf1yCjlMK417JxoSJVUXQjGdvdRCU07NTFei1i1f8ApUAts+IVh14e4EdakeLEA+BEAs/Q==", + "peer": true, "engines": { "node": ">=18.0.0" }, @@ -5851,6 +5863,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.4.0.tgz", "integrity": "sha512-BdrNXdzlofomLTiRnwJTSEAaGKyHHZkbMXIywOh7zlzp4uZnXErEwl9XZ+N1hJSNpeTtNxWvVwN0wUzAIQ4Hpg==", + "peer": true, "engines": { "node": ">=10" } @@ -5926,7 +5939,6 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/seroval-plugins/-/seroval-plugins-1.3.3.tgz", "integrity": "sha512-16OL3NnUBw8JG1jBLUoZJsLnQq0n5Ua6aHalhJK4fMQkz1lqR7Osz1sA30trBtd9VUDc2NgkuRCn8+/pBwqZ+w==", - "peer": true, "engines": { "node": ">=10" }, @@ -6100,6 +6112,7 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -6236,6 +6249,7 @@ "version": "7.3.0", "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.0.tgz", "integrity": "sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg==", + "peer": true, "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", @@ -6789,6 +6803,7 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.4.tgz", "integrity": "sha512-2BCOP7TN8M+gVDj7/ht3hsaO/B/n5oDbiAyyvnRlNOs+u1o+JWNYTQrmpuNp1/Wq2gcFrI01JAW+paEKDMx/CA==", "dev": true, + "peer": true, "requires": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.3", @@ -8376,6 +8391,7 @@ "version": "5.90.12", "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.90.12.tgz", "integrity": "sha512-graRZspg7EoEaw0a8faiUASCyJrqjKPdqJ9EwuDRUF9mEYJ1YPczI9H+/agJ0mOJkPCJDk0lsz5QTrLZ/jQ2rg==", + "peer": true, "requires": { "@tanstack/query-core": "5.90.12" } @@ -8392,6 +8408,7 @@ "version": "1.141.2", "resolved": "https://registry.npmjs.org/@tanstack/react-router/-/react-router-1.141.2.tgz", "integrity": "sha512-inPEgxYuGPNJvd7wo9BYVKW/BP9GwZO0EaZLBE7+l0RtPcIqAQQLqYhYwb2xikuQg6ueZectj7LObAGivkBpSw==", + "peer": true, "requires": { "@tanstack/history": "1.141.0", "@tanstack/react-store": "^0.8.0", @@ -8452,6 +8469,7 @@ "version": "1.140.0", "resolved": "https://registry.npmjs.org/@tanstack/router-core/-/router-core-1.140.0.tgz", "integrity": "sha512-/Te/mlAzi5FEpZ9NF9RhVw/n+cWYLiCHpvevNKo7JPA8ZYWF58wkalPtNWSocftX4P+OIBNerFAW9UbLgSbvSw==", + "peer": true, "requires": { "@tanstack/history": "1.140.0", "@tanstack/store": "^0.8.0", @@ -8653,6 +8671,7 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.2.tgz", "integrity": "sha512-gWEkeiyYE4vqjON/+Obqcoeffmk0NF15WSBwSs7zwVA2bAbTaE0SJ7P0WNGoJn8uE7fiaV5a7dKYIJriEqOrmA==", "devOptional": true, + "peer": true, "requires": { "undici-types": "~7.16.0" } @@ -8662,6 +8681,7 @@ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz", "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", "devOptional": true, + "peer": true, "requires": { "csstype": "^3.2.2" } @@ -8671,6 +8691,7 @@ "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", "devOptional": true, + "peer": true, "requires": {} }, "@vitejs/plugin-react-swc": { @@ -8789,6 +8810,7 @@ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.25.4.tgz", "integrity": "sha512-4jYpcjabC606xJ3kw2QwGEZKX0Aw7sgQdZCvIK9dhVSPh76BKo+C+btT1RRofH7B+8iNpEbgGNVWiLki5q93yg==", "dev": true, + "peer": true, "requires": { "caniuse-lite": "^1.0.30001737", "electron-to-chromium": "^1.5.211", @@ -8936,7 +8958,8 @@ "csstype": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", - "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==" + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "peer": true }, "debug": { "version": "4.4.1", @@ -9823,12 +9846,14 @@ "react": { "version": "19.2.3", "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", - "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==" + "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", + "peer": true }, "react-dom": { "version": "19.2.3", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.3.tgz", "integrity": "sha512-yELu4WmLPw5Mr/lmeEpox5rw3RETacE++JgHqQzd2dg+YbJuat3jH4ingc+WPZhxaoFzdv9y33G+F7Nl5O0GBg==", + "peer": true, "requires": { "scheduler": "^0.27.0" } @@ -9845,6 +9870,7 @@ "version": "7.68.0", "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.68.0.tgz", "integrity": "sha512-oNN3fjrZ/Xo40SWlHf1yCjlMK417JxoSJVUXQjGdvdRCU07NTFei1i1f8ApUAts+IVh14e4EdakeLEA+BEAs/Q==", + "peer": true, "requires": {} }, "react-icons": { @@ -9963,7 +9989,8 @@ "seroval": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/seroval/-/seroval-1.4.0.tgz", - "integrity": "sha512-BdrNXdzlofomLTiRnwJTSEAaGKyHHZkbMXIywOh7zlzp4uZnXErEwl9XZ+N1hJSNpeTtNxWvVwN0wUzAIQ4Hpg==" + "integrity": "sha512-BdrNXdzlofomLTiRnwJTSEAaGKyHHZkbMXIywOh7zlzp4uZnXErEwl9XZ+N1hJSNpeTtNxWvVwN0wUzAIQ4Hpg==", + "peer": true }, "seroval-plugins": { "version": "1.4.0", @@ -10013,7 +10040,6 @@ "version": "1.3.3", "resolved": "https://registry.npmjs.org/seroval-plugins/-/seroval-plugins-1.3.3.tgz", "integrity": "sha512-16OL3NnUBw8JG1jBLUoZJsLnQq0n5Ua6aHalhJK4fMQkz1lqR7Osz1sA30trBtd9VUDc2NgkuRCn8+/pBwqZ+w==", - "peer": true, "requires": {} } } @@ -10124,7 +10150,8 @@ "version": "5.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "dev": true + "dev": true, + "peer": true }, "ufo": { "version": "1.5.4", @@ -10194,6 +10221,7 @@ "version": "7.3.0", "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.0.tgz", "integrity": "sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg==", + "peer": true, "requires": { "esbuild": "^0.27.0", "fdir": "^6.5.0", diff --git a/frontend/src/components/Common/Footer.tsx b/frontend/src/components/Common/Footer.tsx index e7475d1227..279e1e7628 100644 --- a/frontend/src/components/Common/Footer.tsx +++ b/frontend/src/components/Common/Footer.tsx @@ -2,9 +2,17 @@ import { FaGithub, FaLinkedinIn } from "react-icons/fa" import { FaXTwitter } from "react-icons/fa6" const socialLinks = [ - { icon: FaGithub, href: "https://github.com/fastapi/fastapi", label: "GitHub" }, + { + icon: FaGithub, + href: "https://github.com/fastapi/fastapi", + label: "GitHub", + }, { icon: FaXTwitter, href: "https://x.com/fastapi", label: "X" }, - { icon: FaLinkedinIn, href: "https://linkedin.com/company/fastapi", label: "LinkedIn" }, + { + icon: FaLinkedinIn, + href: "https://linkedin.com/company/fastapi", + label: "LinkedIn", + }, ] export function Footer() { diff --git a/frontend/src/components/ui/loading-button.tsx b/frontend/src/components/ui/loading-button.tsx index 3e051e673a..4ff14dd114 100644 --- a/frontend/src/components/ui/loading-button.tsx +++ b/frontend/src/components/ui/loading-button.tsx @@ -65,4 +65,3 @@ function LoadingButton({ } export { buttonVariants, LoadingButton } - diff --git a/frontend/src/routes/login.tsx b/frontend/src/routes/login.tsx index 78e3d52798..736f5ab8ae 100644 --- a/frontend/src/routes/login.tsx +++ b/frontend/src/routes/login.tsx @@ -67,7 +67,6 @@ function Login() { loginMutation.mutate(data) } - return (
diff --git a/frontend/tests/user-settings.spec.ts b/frontend/tests/user-settings.spec.ts index 7d08fc3bce..4e4cf9437d 100644 --- a/frontend/tests/user-settings.spec.ts +++ b/frontend/tests/user-settings.spec.ts @@ -236,9 +236,7 @@ test("Appearance button is visible in sidebar", async ({ page }) => { await expect(page.getByTestId("theme-button")).toBeVisible() }) -test("User can switch between theme modes", async ({ - page, -}) => { +test("User can switch between theme modes", async ({ page }) => { await page.goto("/settings") await page.getByTestId("theme-button").click() diff --git a/scripts/generate-client.sh b/scripts/generate-client.sh index c4f85df84b..279fb13175 100644 --- a/scripts/generate-client.sh +++ b/scripts/generate-client.sh @@ -8,4 +8,4 @@ python -c "import app.main; import json; print(json.dumps(app.main.app.openapi() cd .. mv openapi.json frontend/ cd frontend -npm run generate-client \ No newline at end of file +npm run generate-client