From 31cf52b695eca3e2b86614da133d32cf9ca14b59 Mon Sep 17 00:00:00 2001 From: Tutul Deb Roy Date: Sun, 30 Mar 2025 22:33:09 +0530 Subject: [PATCH 1/6] tu2l.com: zoltraak adjustment for tu2l.com --- config/api.json | 2 +- config/menu.json | 2 +- src/app/favicon.ico | Bin 17152 -> 15406 bytes src/app/layout.js | 2 +- src/sys-components/Appbar/TemporaryDrawer.js | 2 +- src/sys-components/Footer.js | 2 +- 6 files changed, 5 insertions(+), 5 deletions(-) diff --git a/config/api.json b/config/api.json index 29e9227..9215ec7 100644 --- a/config/api.json +++ b/config/api.json @@ -1,5 +1,5 @@ { - "baseUrl": "http://127.0.0.1:8080/published", + "baseUrl": "https://www.tu2l.com/zoltraak-backend/", "endpoints": { "pages": "/page.json", "server": "server.json" diff --git a/config/menu.json b/config/menu.json index 22c3f30..be3b9cd 100644 --- a/config/menu.json +++ b/config/menu.json @@ -1,5 +1,5 @@ { - "title": "Zoltraak", + "title": "Tu2l", "menuItems": [ { "name": "Home", diff --git a/src/app/favicon.ico b/src/app/favicon.ico index e0123b169e8802d7b988ae813029e1f89f0e2fa7..55681e57846336300cacd983f61dc4ed39fe8af0 100644 GIT binary patch literal 15406 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 literal 17152 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 - Zoltraak + Tu2l diff --git a/src/sys-components/Footer.js b/src/sys-components/Footer.js index 01751d4..03cb3d1 100644 --- a/src/sys-components/Footer.js +++ b/src/sys-components/Footer.js @@ -7,7 +7,7 @@ const Footer = () => { return ( <>
-

Zoltraak version {publicRuntimeConfig.version} by Tu2l

+

Powered by Zoltraak version {publicRuntimeConfig.version} by Tu2l

From 87a2fdc70c67c8c38b3e00b60a217bc2c1b54d9b Mon Sep 17 00:00:00 2001 From: Tutul Deb Roy Date: Sat, 28 Jun 2025 00:18:27 +0530 Subject: [PATCH 2/6] about me page updated --- src/app/about/page.js | 59 ++++--------------------------------------- 1 file changed, 5 insertions(+), 54 deletions(-) diff --git a/src/app/about/page.js b/src/app/about/page.js index fe7f9dd..219fda8 100644 --- a/src/app/about/page.js +++ b/src/app/about/page.js @@ -1,63 +1,14 @@ "use client" -import { GitHub, LinkedIn } from "@mui/icons-material" -import { Avatar } from "@mui/material" +import { useApi } from '@/sys-components/ApiContext' +import FetchAndDisplayHtml from "@/sys-components/FetchAndDisplayHtml" const About = () => { + const api = useApi() + const url = `${api.baseUrl}miscs/about_me.html` - return ( - <> -
-
-

Education

-
    -
  • - MCA -
  • -
  • - BCA -
  • -
-

Professional Career

-
    -
  • - Accenture -
  • -
  • - Capgemini -
  • -
-

Technical Skills

-
    -
  • - Android, Java, DBMS -
  • -
  • - Backend, Frontend, NextJs/ReactJs -
  • -
-
- - - ) + return } export default About \ No newline at end of file From dba25680294caa89b385380711fa0357481b7a35 Mon Sep 17 00:00:00 2001 From: Tutul Deb Roy Date: Thu, 7 May 2026 00:29:48 +0530 Subject: [PATCH 3/6] fix(theme): stabilize theme toggling and css scoping --- config/themes.json | 12 +- package-lock.json | 646 +++++++++++-------- package.json | 8 +- src/app/layout.js | 61 +- src/components/routes/ProjectsPage.js | 62 ++ src/css/asciidoc/dark.css | 72 +-- src/sys-components/HtmlRenderer.js | 11 +- src/sys-components/Theme/ThemeUtil.js | 27 +- src/sys-components/Theme/ThemeWrapper.js | 15 + src/sys-components/Theme/useZoltraakTheme.js | 18 +- 10 files changed, 578 insertions(+), 354 deletions(-) create mode 100644 src/components/routes/ProjectsPage.js diff --git a/config/themes.json b/config/themes.json index b0b652f..2e6d8ce 100644 --- a/config/themes.json +++ b/config/themes.json @@ -1,14 +1,18 @@ [ { "palette": { - "type": "light", + "mode": "light", "primary": { - "main": "#fff" + "main": "#1976d2" }, "secondary": { "main": "#9c27b0" }, "divider": "#000", + "background": { + "default": "#fafafa", + "paper": "#fff" + }, "text": { "primary": "#000" } @@ -16,9 +20,9 @@ }, { "palette": { - "type": "dark", + "mode": "dark", "primary": { - "main": "#000" + "main": "#90caf9" }, "secondary": { "main": "#9c27b0" diff --git a/package-lock.json b/package-lock.json index 0a89793..71e2192 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,12 +13,14 @@ "@fontsource/roboto": "^5.0.8", "@mui/icons-material": "^6.0.0", "@mui/material": "^6.0.0", + "@mui/material-nextjs": "^9.0.0", "dompurify": "^3.2.3", - "next": "15.3.3", + "next": "^15.5.15", "react": "19.1.0", "react-dom": "19.1.0" }, "devDependencies": { + "@playwright/test": "^1.59.1", "eslint": "^8", "eslint-config-next": "15.3.3" } @@ -106,13 +108,10 @@ } }, "node_modules/@babel/runtime": { - "version": "7.26.10", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.10.tgz", - "integrity": "sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==", + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz", + "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==", "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, "engines": { "node": ">=6.9.0" } @@ -161,9 +160,9 @@ } }, "node_modules/@emnapi/runtime": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.3.tgz", - "integrity": "sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", + "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", "license": "MIT", "optional": true, "dependencies": { @@ -417,10 +416,20 @@ "deprecated": "Use @eslint/object-schema instead", "dev": true }, + "node_modules/@img/colour": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", + "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=18" + } + }, "node_modules/@img/sharp-darwin-arm64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.2.tgz", - "integrity": "sha512-OfXHZPppddivUJnqyKoi5YVeHRkkNE2zUFT2gbpKxp/JZCFYEYubnMg+gOp6lWfasPrTS+KPosKqdI+ELYVDtg==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", "cpu": [ "arm64" ], @@ -436,13 +445,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.1.0" + "@img/sharp-libvips-darwin-arm64": "1.2.4" } }, "node_modules/@img/sharp-darwin-x64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.2.tgz", - "integrity": "sha512-dYvWqmjU9VxqXmjEtjmvHnGqF8GrVjM2Epj9rJ6BUIXvk8slvNDJbhGFvIoXzkDhrJC2jUxNLz/GUjjvSzfw+g==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", "cpu": [ "x64" ], @@ -458,13 +467,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.1.0" + "@img/sharp-libvips-darwin-x64": "1.2.4" } }, "node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.1.0.tgz", - "integrity": "sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", + "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", "cpu": [ "arm64" ], @@ -478,9 +487,9 @@ } }, "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.1.0.tgz", - "integrity": "sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", + "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", "cpu": [ "x64" ], @@ -494,9 +503,9 @@ } }, "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.1.0.tgz", - "integrity": "sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", + "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", "cpu": [ "arm" ], @@ -510,9 +519,9 @@ } }, "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.1.0.tgz", - "integrity": "sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", + "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", "cpu": [ "arm64" ], @@ -526,9 +535,9 @@ } }, "node_modules/@img/sharp-libvips-linux-ppc64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.1.0.tgz", - "integrity": "sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", + "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", "cpu": [ "ppc64" ], @@ -541,10 +550,26 @@ "url": "https://opencollective.com/libvips" } }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", + "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "cpu": [ + "riscv64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.1.0.tgz", - "integrity": "sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", + "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", "cpu": [ "s390x" ], @@ -558,9 +583,9 @@ } }, "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.1.0.tgz", - "integrity": "sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", + "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", "cpu": [ "x64" ], @@ -574,9 +599,9 @@ } }, "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.1.0.tgz", - "integrity": "sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", + "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", "cpu": [ "arm64" ], @@ -590,9 +615,9 @@ } }, "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.1.0.tgz", - "integrity": "sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", + "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", "cpu": [ "x64" ], @@ -606,9 +631,9 @@ } }, "node_modules/@img/sharp-linux-arm": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.2.tgz", - "integrity": "sha512-0DZzkvuEOqQUP9mo2kjjKNok5AmnOr1jB2XYjkaoNRwpAYMDzRmAqUIa1nRi58S2WswqSfPOWLNOr0FDT3H5RQ==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", + "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", "cpu": [ "arm" ], @@ -624,13 +649,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.1.0" + "@img/sharp-libvips-linux-arm": "1.2.4" } }, "node_modules/@img/sharp-linux-arm64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.2.tgz", - "integrity": "sha512-D8n8wgWmPDakc83LORcfJepdOSN6MvWNzzz2ux0MnIbOqdieRZwVYY32zxVx+IFUT8er5KPcyU3XXsn+GzG/0Q==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", + "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", "cpu": [ "arm64" ], @@ -646,13 +671,57 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.1.0" + "@img/sharp-libvips-linux-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", + "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", + "cpu": [ + "ppc64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", + "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", + "cpu": [ + "riscv64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.2.4" } }, "node_modules/@img/sharp-linux-s390x": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.2.tgz", - "integrity": "sha512-EGZ1xwhBI7dNISwxjChqBGELCWMGDvmxZXKjQRuqMrakhO8QoMgqCrdjnAqJq/CScxfRn+Bb7suXBElKQpPDiw==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", + "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", "cpu": [ "s390x" ], @@ -668,13 +737,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.1.0" + "@img/sharp-libvips-linux-s390x": "1.2.4" } }, "node_modules/@img/sharp-linux-x64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.2.tgz", - "integrity": "sha512-sD7J+h5nFLMMmOXYH4DD9UtSNBD05tWSSdWAcEyzqW8Cn5UxXvsHAxmxSesYUsTOBmUnjtxghKDl15EvfqLFbQ==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", + "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", "cpu": [ "x64" ], @@ -690,13 +759,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.1.0" + "@img/sharp-libvips-linux-x64": "1.2.4" } }, "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.2.tgz", - "integrity": "sha512-NEE2vQ6wcxYav1/A22OOxoSOGiKnNmDzCYFOZ949xFmrWZOVII1Bp3NqVVpvj+3UeHMFyN5eP/V5hzViQ5CZNA==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", + "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", "cpu": [ "arm64" ], @@ -712,13 +781,13 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.1.0" + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" } }, "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.2.tgz", - "integrity": "sha512-DOYMrDm5E6/8bm/yQLCWyuDJwUnlevR8xtF8bs+gjZ7cyUNYXiSf/E8Kp0Ss5xasIaXSHzb888V1BE4i1hFhAA==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", + "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", "cpu": [ "x64" ], @@ -734,20 +803,20 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.1.0" + "@img/sharp-libvips-linuxmusl-x64": "1.2.4" } }, "node_modules/@img/sharp-wasm32": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.2.tgz", - "integrity": "sha512-/VI4mdlJ9zkaq53MbIG6rZY+QRN3MLbR6usYlgITEzi4Rpx5S6LFKsycOQjkOGmqTNmkIdLjEvooFKwww6OpdQ==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", + "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", "cpu": [ "wasm32" ], "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", "optional": true, "dependencies": { - "@emnapi/runtime": "^1.4.3" + "@emnapi/runtime": "^1.7.0" }, "engines": { "node": "^18.17.0 || ^20.3.0 || >=21.0.0" @@ -757,9 +826,9 @@ } }, "node_modules/@img/sharp-win32-arm64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.2.tgz", - "integrity": "sha512-cfP/r9FdS63VA5k0xiqaNaEoGxBg9k7uE+RQGzuK9fHt7jib4zAVVseR9LsE4gJcNWgT6APKMNnCcnyOtmSEUQ==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", + "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", "cpu": [ "arm64" ], @@ -776,9 +845,9 @@ } }, "node_modules/@img/sharp-win32-ia32": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.2.tgz", - "integrity": "sha512-QLjGGvAbj0X/FXl8n1WbtQ6iVBpWU7JO94u/P2M4a8CFYsvQi4GW2mRy/JqkRx0qpBzaOdKJKw8uc930EX2AHw==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", + "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", "cpu": [ "ia32" ], @@ -795,9 +864,9 @@ } }, "node_modules/@img/sharp-win32-x64": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.2.tgz", - "integrity": "sha512-aUdT6zEYtDKCaxkofmmJDJYGCf0+pJg3eU9/oBuqvEeoB9dKI6ZLc/1iLJCTuJQDO4ptntAlkUmHgGjyuobZbw==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", + "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", "cpu": [ "x64" ], @@ -941,6 +1010,41 @@ } } }, + "node_modules/@mui/material-nextjs": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@mui/material-nextjs/-/material-nextjs-9.0.0.tgz", + "integrity": "sha512-HBVg7zkKh9isbENwmWnJAKmUVH+h18ZYqX8HJIDMTejXzs1+3qmZE3z1KpQFnYRDanq7dwOlWWUfQq6z5sXtng==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.29.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@emotion/cache": "^11.11.0", + "@emotion/react": "^11.11.4", + "@emotion/server": "^11.11.0", + "@types/react": "^17.0.0 || ^18.0.0 || ^19.0.0", + "next": "^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0", + "react": "^17.0.0 || ^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@emotion/cache": { + "optional": true + }, + "@emotion/server": { + "optional": true + }, + "@types/react": { + "optional": true + } + } + }, "node_modules/@mui/material/node_modules/react-is": { "version": "19.0.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.0.0.tgz", @@ -1099,9 +1203,9 @@ "license": "MIT" }, "node_modules/@next/env": { - "version": "15.3.3", - "resolved": "https://registry.npmjs.org/@next/env/-/env-15.3.3.tgz", - "integrity": "sha512-OdiMrzCl2Xi0VTjiQQUK0Xh7bJHnOuET2s+3V+Y40WJBAXrJeGA3f+I8MZJ/YQ3mVGi5XGR1L66oFlgqXhQ4Vw==", + "version": "15.5.15", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.5.15.tgz", + "integrity": "sha512-vcmyu5/MyFzN7CdqRHO3uHO44p/QPCZkuTUXroeUmhNP8bL5PHFEhik22JUazt+CDDoD6EpBYRCaS2pISL+/hg==", "license": "MIT" }, "node_modules/@next/eslint-plugin-next": { @@ -1145,9 +1249,9 @@ } }, "node_modules/@next/swc-darwin-arm64": { - "version": "15.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.3.3.tgz", - "integrity": "sha512-WRJERLuH+O3oYB4yZNVahSVFmtxRNjNF1I1c34tYMoJb0Pve+7/RaLAJJizyYiFhjYNGHRAE1Ri2Fd23zgDqhg==", + "version": "15.5.15", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.5.15.tgz", + "integrity": "sha512-6PvFO2Tzt10GFK2Ro9tAVEtacMqRmTarYMFKAnV2vYMdwWc73xzmDQyAV7SwEdMhzmiRoo7+m88DuiXlJlGeaw==", "cpu": [ "arm64" ], @@ -1161,9 +1265,9 @@ } }, "node_modules/@next/swc-darwin-x64": { - "version": "15.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.3.3.tgz", - "integrity": "sha512-XHdzH/yBc55lu78k/XwtuFR/ZXUTcflpRXcsu0nKmF45U96jt1tsOZhVrn5YH+paw66zOANpOnFQ9i6/j+UYvw==", + "version": "15.5.15", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.5.15.tgz", + "integrity": "sha512-G+YNV+z6FDZTp/+IdGyIMFqalBTaQSnvAA+X/hrt+eaTRFSznRMz9K7rTmzvM6tDmKegNtyzgufZW0HwVzEqaQ==", "cpu": [ "x64" ], @@ -1177,9 +1281,9 @@ } }, "node_modules/@next/swc-linux-arm64-gnu": { - "version": "15.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.3.3.tgz", - "integrity": "sha512-VZ3sYL2LXB8znNGcjhocikEkag/8xiLgnvQts41tq6i+wql63SMS1Q6N8RVXHw5pEUjiof+II3HkDd7GFcgkzw==", + "version": "15.5.15", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.5.15.tgz", + "integrity": "sha512-eVkrMcVIBqGfXB+QUC7jjZ94Z6uX/dNStbQFabewAnk13Uy18Igd1YZ/GtPRzdhtm7QwC0e6o7zOQecul4iC1w==", "cpu": [ "arm64" ], @@ -1193,9 +1297,9 @@ } }, "node_modules/@next/swc-linux-arm64-musl": { - "version": "15.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.3.3.tgz", - "integrity": "sha512-h6Y1fLU4RWAp1HPNJWDYBQ+e3G7sLckyBXhmH9ajn8l/RSMnhbuPBV/fXmy3muMcVwoJdHL+UtzRzs0nXOf9SA==", + "version": "15.5.15", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.5.15.tgz", + "integrity": "sha512-RwSHKMQ7InLy5GfkY2/n5PcFycKA08qI1VST78n09nN36nUPqCvGSMiLXlfUmzmpQpF6XeBYP2KRWHi0UW3uNg==", "cpu": [ "arm64" ], @@ -1209,9 +1313,9 @@ } }, "node_modules/@next/swc-linux-x64-gnu": { - "version": "15.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.3.3.tgz", - "integrity": "sha512-jJ8HRiF3N8Zw6hGlytCj5BiHyG/K+fnTKVDEKvUCyiQ/0r5tgwO7OgaRiOjjRoIx2vwLR+Rz8hQoPrnmFbJdfw==", + "version": "15.5.15", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.5.15.tgz", + "integrity": "sha512-nplqvY86LakS+eeiuWsNWvfmK8pFcOEW7ZtVRt4QH70lL+0x6LG/m1OpJ/tvrbwjmR8HH9/fH2jzW1GlL03TIg==", "cpu": [ "x64" ], @@ -1225,9 +1329,9 @@ } }, "node_modules/@next/swc-linux-x64-musl": { - "version": "15.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.3.3.tgz", - "integrity": "sha512-HrUcTr4N+RgiiGn3jjeT6Oo208UT/7BuTr7K0mdKRBtTbT4v9zJqCDKO97DUqqoBK1qyzP1RwvrWTvU6EPh/Cw==", + "version": "15.5.15", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.5.15.tgz", + "integrity": "sha512-eAgl9NKQ84/sww0v81DQINl/vL2IBxD7sMybd0cWRw6wqgouVI53brVRBrggqBRP/NWeIAE1dm5cbKYoiMlqDQ==", "cpu": [ "x64" ], @@ -1241,9 +1345,9 @@ } }, "node_modules/@next/swc-win32-arm64-msvc": { - "version": "15.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.3.3.tgz", - "integrity": "sha512-SxorONgi6K7ZUysMtRF3mIeHC5aA3IQLmKFQzU0OuhuUYwpOBc1ypaLJLP5Bf3M9k53KUUUj4vTPwzGvl/NwlQ==", + "version": "15.5.15", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.5.15.tgz", + "integrity": "sha512-GJVZC86lzSquh0MtvZT+L7G8+jMnJcldloOjA8Kf3wXvBrvb6OGe2MzPuALxFshSm/IpwUtD2mIoof39ymf52A==", "cpu": [ "arm64" ], @@ -1257,9 +1361,9 @@ } }, "node_modules/@next/swc-win32-x64-msvc": { - "version": "15.3.3", - "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.3.3.tgz", - "integrity": "sha512-4QZG6F8enl9/S2+yIiOiju0iCTFd93d8VC1q9LZS4p/Xuk81W2QDjCFeoogmrWWkAD59z8ZxepBQap2dKS5ruw==", + "version": "15.5.15", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.5.15.tgz", + "integrity": "sha512-nFucjVdwlFqxh/JG3hWSJ4p8+YJV7Ii8aPDuBQULB6DzUF4UNZETXLfEUk+oI2zEznWWULPt7MeuTE6xtK1HSA==", "cpu": [ "x64" ], @@ -1316,6 +1420,22 @@ "node": ">=12.4.0" } }, + "node_modules/@playwright/test": { + "version": "1.59.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.1.tgz", + "integrity": "sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "playwright": "1.59.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/@popperjs/core": { "version": "2.11.8", "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", @@ -1338,12 +1458,6 @@ "integrity": "sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==", "dev": true }, - "node_modules/@swc/counter": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", - "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", - "license": "Apache-2.0" - }, "node_modules/@swc/helpers": { "version": "0.5.15", "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", @@ -1535,9 +1649,9 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.0.tgz", + "integrity": "sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==", "dev": true, "license": "MIT", "dependencies": { @@ -1545,13 +1659,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^2.0.2" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -1643,10 +1757,11 @@ } }, "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -1922,9 +2037,9 @@ "dev": true }, "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "license": "MIT", "dependencies": { @@ -1944,17 +2059,6 @@ "node": ">=8" } }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, "node_modules/call-bind": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", @@ -2068,20 +2172,6 @@ "node": ">=6" } }, - "node_modules/color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "license": "MIT", - "optional": true, - "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - }, - "engines": { - "node": ">=12.5.0" - } - }, "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", @@ -2095,37 +2185,6 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "license": "MIT", - "optional": true, - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/color/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", - "optional": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color/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==", - "license": "MIT", - "optional": true - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -2290,9 +2349,9 @@ } }, "node_modules/detect-libc": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", - "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", "license": "Apache-2.0", "optional": true, "engines": { @@ -2322,9 +2381,9 @@ } }, "node_modules/dompurify": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.4.tgz", - "integrity": "sha512-ysFSFEDVduQpyhzAob/kkuJjf5zWkZD8/A9ywSp1byueyuCfHamrCBa14/Oc2iiB0e51B+NpxSl5gmzn+Ms/mg==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.2.tgz", + "integrity": "sha512-lHeS9SA/IKeIFFyYciHBr2n0v1VMPlSj843HdLOwjb2OxNwdq9Xykxqhk+FE42MzAdHvInbAolSE4mhahPpjXA==", "license": "(MPL-2.0 OR Apache-2.0)", "optionalDependencies": { "@types/trusted-types": "^2.0.7" @@ -3185,10 +3244,11 @@ } }, "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", + "dev": true, + "license": "ISC" }, "node_modules/for-each": { "version": "0.3.5", @@ -3212,6 +3272,21 @@ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -3995,10 +4070,11 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -4180,10 +4256,11 @@ } }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -4230,15 +4307,13 @@ "dev": true }, "node_modules/next": { - "version": "15.3.3", - "resolved": "https://registry.npmjs.org/next/-/next-15.3.3.tgz", - "integrity": "sha512-JqNj29hHNmCLtNvd090SyRbXJiivQ+58XjCcrC50Crb5g5u2zi7Y2YivbsEfzk6AtVI80akdOQbaMZwWB1Hthw==", + "version": "15.5.15", + "resolved": "https://registry.npmjs.org/next/-/next-15.5.15.tgz", + "integrity": "sha512-VSqCrJwtLVGwAVE0Sb/yikrQfkwkZW9p+lL/J4+xe+G3ZA+QnWPqgcfH1tDUEuk9y+pthzzVFp4L/U8JerMfMQ==", "license": "MIT", "dependencies": { - "@next/env": "15.3.3", - "@swc/counter": "0.1.3", + "@next/env": "15.5.15", "@swc/helpers": "0.5.15", - "busboy": "1.6.0", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" @@ -4250,19 +4325,19 @@ "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" }, "optionalDependencies": { - "@next/swc-darwin-arm64": "15.3.3", - "@next/swc-darwin-x64": "15.3.3", - "@next/swc-linux-arm64-gnu": "15.3.3", - "@next/swc-linux-arm64-musl": "15.3.3", - "@next/swc-linux-x64-gnu": "15.3.3", - "@next/swc-linux-x64-musl": "15.3.3", - "@next/swc-win32-arm64-msvc": "15.3.3", - "@next/swc-win32-x64-msvc": "15.3.3", - "sharp": "^0.34.1" + "@next/swc-darwin-arm64": "15.5.15", + "@next/swc-darwin-x64": "15.5.15", + "@next/swc-linux-arm64-gnu": "15.5.15", + "@next/swc-linux-arm64-musl": "15.5.15", + "@next/swc-linux-x64-gnu": "15.5.15", + "@next/swc-linux-x64-musl": "15.5.15", + "@next/swc-win32-arm64-msvc": "15.5.15", + "@next/swc-win32-x64-msvc": "15.5.15", + "sharp": "^0.34.3" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", - "@playwright/test": "^1.41.2", + "@playwright/test": "^1.51.1", "babel-plugin-react-compiler": "*", "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", @@ -4548,10 +4623,11 @@ "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -4559,6 +4635,38 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/playwright": { + "version": "1.59.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz", + "integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==", + "devOptional": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.59.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.59.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz", + "integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/possible-typed-array-names": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", @@ -4709,11 +4817,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" - }, "node_modules/regexp.prototype.flags": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", @@ -4879,9 +4982,9 @@ "license": "MIT" }, "node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "devOptional": true, "license": "ISC", "bin": { @@ -4939,16 +5042,16 @@ } }, "node_modules/sharp": { - "version": "0.34.2", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.2.tgz", - "integrity": "sha512-lszvBmB9QURERtyKT2bNmsgxXK0ShJrL/fvqlonCo7e6xBF8nT8xU6pW+PMIbLsz0RxQk3rgH9kd8UmvOzlMJg==", + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", + "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", "hasInstallScript": true, "license": "Apache-2.0", "optional": true, "dependencies": { - "color": "^4.2.3", - "detect-libc": "^2.0.4", - "semver": "^7.7.2" + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.2", + "semver": "^7.7.3" }, "engines": { "node": "^18.17.0 || ^20.3.0 || >=21.0.0" @@ -4957,27 +5060,30 @@ "url": "https://opencollective.com/libvips" }, "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.34.2", - "@img/sharp-darwin-x64": "0.34.2", - "@img/sharp-libvips-darwin-arm64": "1.1.0", - "@img/sharp-libvips-darwin-x64": "1.1.0", - "@img/sharp-libvips-linux-arm": "1.1.0", - "@img/sharp-libvips-linux-arm64": "1.1.0", - "@img/sharp-libvips-linux-ppc64": "1.1.0", - "@img/sharp-libvips-linux-s390x": "1.1.0", - "@img/sharp-libvips-linux-x64": "1.1.0", - "@img/sharp-libvips-linuxmusl-arm64": "1.1.0", - "@img/sharp-libvips-linuxmusl-x64": "1.1.0", - "@img/sharp-linux-arm": "0.34.2", - "@img/sharp-linux-arm64": "0.34.2", - "@img/sharp-linux-s390x": "0.34.2", - "@img/sharp-linux-x64": "0.34.2", - "@img/sharp-linuxmusl-arm64": "0.34.2", - "@img/sharp-linuxmusl-x64": "0.34.2", - "@img/sharp-wasm32": "0.34.2", - "@img/sharp-win32-arm64": "0.34.2", - "@img/sharp-win32-ia32": "0.34.2", - "@img/sharp-win32-x64": "0.34.2" + "@img/sharp-darwin-arm64": "0.34.5", + "@img/sharp-darwin-x64": "0.34.5", + "@img/sharp-libvips-darwin-arm64": "1.2.4", + "@img/sharp-libvips-darwin-x64": "1.2.4", + "@img/sharp-libvips-linux-arm": "1.2.4", + "@img/sharp-libvips-linux-arm64": "1.2.4", + "@img/sharp-libvips-linux-ppc64": "1.2.4", + "@img/sharp-libvips-linux-riscv64": "1.2.4", + "@img/sharp-libvips-linux-s390x": "1.2.4", + "@img/sharp-libvips-linux-x64": "1.2.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", + "@img/sharp-libvips-linuxmusl-x64": "1.2.4", + "@img/sharp-linux-arm": "0.34.5", + "@img/sharp-linux-arm64": "0.34.5", + "@img/sharp-linux-ppc64": "0.34.5", + "@img/sharp-linux-riscv64": "0.34.5", + "@img/sharp-linux-s390x": "0.34.5", + "@img/sharp-linux-x64": "0.34.5", + "@img/sharp-linuxmusl-arm64": "0.34.5", + "@img/sharp-linuxmusl-x64": "0.34.5", + "@img/sharp-wasm32": "0.34.5", + "@img/sharp-win32-arm64": "0.34.5", + "@img/sharp-win32-ia32": "0.34.5", + "@img/sharp-win32-x64": "0.34.5" } }, "node_modules/shebang-command": { @@ -5077,23 +5183,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "license": "MIT", - "optional": true, - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "license": "MIT", - "optional": true - }, "node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -5110,14 +5199,6 @@ "node": ">=0.10.0" } }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "engines": { - "node": ">=10.0.0" - } - }, "node_modules/string.prototype.includes": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", @@ -5643,9 +5724,10 @@ "dev": true }, "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz", + "integrity": "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==", + "license": "ISC", "engines": { "node": ">= 6" } diff --git a/package.json b/package.json index d6b1fbf..7417907 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,9 @@ "dev": "next dev --turbopack", "build": "next build", "start": "next start", - "lint": "next lint" + "lint": "next lint", + "audit": "npm audit --audit-level=high", + "test:e2e": "playwright test" }, "dependencies": { "@emotion/react": "^11.11.3", @@ -14,12 +16,14 @@ "@fontsource/roboto": "^5.0.8", "@mui/icons-material": "^6.0.0", "@mui/material": "^6.0.0", + "@mui/material-nextjs": "^9.0.0", "dompurify": "^3.2.3", - "next": "15.3.3", + "next": "^15.5.15", "react": "19.1.0", "react-dom": "19.1.0" }, "devDependencies": { + "@playwright/test": "^1.59.1", "eslint": "^8", "eslint-config-next": "15.3.3" } diff --git a/src/app/layout.js b/src/app/layout.js index a3a9ba4..b0d5605 100644 --- a/src/app/layout.js +++ b/src/app/layout.js @@ -2,25 +2,52 @@ import React from "react" import "../css/global.css" import Header from "@/sys-components/Header" import Footer from "@/sys-components/Footer" -import { Box, Container, CssBaseline, Toolbar, Typography } from "@mui/material" +import { Container, Toolbar, Typography } from "@mui/material" +import { AppRouterCacheProvider } from "@mui/material-nextjs/v15-appRouter" import ThemeWrapper from "@/sys-components/Theme/ThemeWrapper" import { ApiProvider } from "@/sys-components/ApiContext" import { Build } from "@mui/icons-material" +import { getValidatedAppConfig } from "@/lib/config/loadAppConfig" +import { buildPageMetadata, siteMetadataBase } from "@/lib/metadata" +import WebVitals from "@/components/WebVitals" export const metadata = { - title: "Tu2l powered by Zoltraak", - description: "Zoltraak by Tu2l" + metadataBase: siteMetadataBase, + applicationName: "Zoltraak", + ...buildPageMetadata({ + title: "Home", + description: "A configurable personal publishing, portfolio, and tools site powered by Zoltraak.", + path: "/", + keywords: ["Zoltraak", "portfolio", "blog", "tools", "documentation"], + }), } -const headerItem = require("../../config/menu.json") -const themes = require("../../config/themes.json") -const components = require("../../config/common-components.json") -const api = require("../../config/api.json") +export const viewport = { + themeColor: '#1976d2', +} + +const menu = require("../../config/menu.json") +const themesRaw = require("../../config/themes.json") +const componentsRaw = require("../../config/common-components.json") +const apiRaw = require("../../config/api.json") + +const { + headerItem, + themes, + components, + api, +} = getValidatedAppConfig({ + menu, + themes: themesRaw, + components: componentsRaw, + api: apiRaw, +}) const WorkInProgressNotification = () => { return ( - - - + + + +
- - + + {/* */} {children} -
- - +
+ + + ) diff --git a/src/components/routes/ProjectsPage.js b/src/components/routes/ProjectsPage.js new file mode 100644 index 0000000..2c175e8 --- /dev/null +++ b/src/components/routes/ProjectsPage.js @@ -0,0 +1,62 @@ +"use client" + +import useFetchApi from "@/components/api-helper/useFetchApi" +import { useEffect, useState } from "react" +import { Typography, Grid2, Box } from '@mui/material' +import { ArrowRightAltRounded, GitHub, Notifications } from "@mui/icons-material" +import { ProjectItem } from "@/components/ProjectItem" +import { EmptyState, ErrorState, LoadingState } from "@/components/common/AsyncState" + +const ProjectsPage = () => { + const githubUrl = 'https://api.github.com/users/tu2l/repos' + const [projects, setProjects] = useState([]) + const { response, isError } = useFetchApi(githubUrl) + + useEffect(() => { + if (response) { + const nonForkedProjects = response.filter((project) => !project.fork) + const projectDetails = nonForkedProjects.map((project) => ({ + id: project.id, + name: project.name, + description: project.description, + html_url: project.html_url, + stargazers_count: project.stargazers_count, + forks_count: project.forks_count, + language: project.language, + })) + setProjects(projectDetails) + } + }, [response]) + + if (isError) { + return + } + + if (!response) { + return + } + + if (projects.length === 0) { + return + } + + return ( + + {/* + Private Github repositories are not listed here including this site. + */} + + GitHub repositories + + + {projects.map((project) => ( + + + + ))} + + + ) +} + +export default ProjectsPage diff --git a/src/css/asciidoc/dark.css b/src/css/asciidoc/dark.css index 39770a8..127ff54 100644 --- a/src/css/asciidoc/dark.css +++ b/src/css/asciidoc/dark.css @@ -1,9 +1,5 @@ /* Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */ -@import url(https://fonts.googleapis.com/css?family=Noto+Sans); -@import url(https://cdn.jsdelivr.net/gh/asciidoctor/asciidoctor@2.0/data/stylesheets/asciidoctor-default.css); -/* Default asciidoc style framework - important */ - /* CUSTOMISATIONS */ /* Change the values in root for quick customisation. If you want even more fine grain... venture further. */ :root { @@ -19,72 +15,72 @@ /* Text styles */ -body { +.asciidoc-root { font-family: var(--base-font-family); background-color: var(--maincolor); color: var(--base-text-color, var(--textcolor)); /* Fallback to --textcolor if --base-text-color is not defined */ } -h1 { +.asciidoc-root h1 { color: var(--heading-color, var(--primarycolor)) !important; /* Fallback to --primarycolor if --heading-color is not defined */ font-family: var(--heading-font-family); } -h2, -h3, -h4, -h5, -h6 { +.asciidoc-root h2, +.asciidoc-root h3, +.asciidoc-root h4, +.asciidoc-root h5, +.asciidoc-root h6 { color: var(--secondary-heading-color, var(--secondarycolor)) !important; /* Fallback to --secondarycolor if --secondary-heading-color is not defined */ font-family: var(--heading-font-family); } -.title { +.asciidoc-root .title { color: var(--textcolor) !important; font-family: var(--base-font-family); font-style: normal; font-weight: normal; } -p { +.asciidoc-root p { font-family: var(--base-font-family) ! important } -#toc.toc2 a:link { +.asciidoc-root #toc.toc2 a:link { color: var(--link-color, var(--linkcolor)); /* Fallback to --linkcolor if --link-color is not defined */ } -blockquote { +.asciidoc-root blockquote { color: var(--tertiarycolor) !important } -.quoteblock { +.asciidoc-root .quoteblock { color: var(--textcolor) } -code { +.asciidoc-root code { color: var(--linkcoloralternate); background-color: var(--sidebarbackground) !important } /* Table styles */ -th { +.asciidoc-root th { background-color: var(--maincolor); color: var(--textcolor) !important; } -td { +.asciidoc-root td { background-color: var(--maincolor); color: var(--linkcoloralternate) !important } -#toc.toc2 { +.asciidoc-root #toc.toc2 { background-color: var(--sidebarbackground); } -#toctitle { +.asciidoc-root #toctitle { color: var(--textcolor); } @@ -94,63 +90,63 @@ video { } @media all and (max-width: 600px) { - table { + .asciidoc-root table { width: 55vw !important; font-size: 3vw; } } -.exampleblock>.content { +.asciidoc-root .exampleblock>.content { background-color: var(--maincolor); } -a { +.asciidoc-root a { color: var(--link-color, var(--secondarycolor)); /* Fallback to --secondarycolor if --link-color is not defined */ } -.admonitionblock td.icon .icon-tip::before { +.asciidoc-root .admonitionblock td.icon .icon-tip::before { text-shadow: none; color: var(--textcolor); } -.admonitionblock td.icon .icon-note::before { +.asciidoc-root .admonitionblock td.icon .icon-note::before { color: var(--tertiarycolor); } -.admonitionblock td.icon .icon-important::before { +.asciidoc-root .admonitionblock td.icon .icon-important::before { color: var(--linkcolor); } /*.admonitionblock td.icon .icon-caution::before { color: var(--linkcoloralternate); }*/ -.admonitionblock td.icon .icon-warning::before { +.asciidoc-root .admonitionblock td.icon .icon-warning::before { color: var(--primarycolor); } -#preamble>.sectionbody>.paragraph:first-of-type p { +.asciidoc-root #preamble>.sectionbody>.paragraph:first-of-type p { color: var(--textcolor); } -.quoteblock blockquote::before { +.asciidoc-root .quoteblock blockquote::before { color: var(--primarycolor); } -.quoteblock .attribution cite, -.verseblock .attribution cite { +.asciidoc-root .quoteblock .attribution cite, +.asciidoc-root .verseblock .attribution cite { color: var(--textcolor); } -.verseblock pre { +.asciidoc-root .verseblock pre { color: var(--textcolor); } -.quoteblock blockquote, -.quoteblock blockquote p { +.asciidoc-root .quoteblock blockquote, +.asciidoc-root .quoteblock blockquote p { color: var(--textcolor); } -.sidebarblock { +.asciidoc-root .sidebarblock { background: var(--sidebarbackground); } @@ -163,11 +159,11 @@ a { /* color: var(--textcolor); */ } -#header .details { +.asciidoc-root #header .details { color: var(--textcolor); } -#header .details span.email a { +.asciidoc-root #header .details span.email a { color: var(--linkcoloralternate); } diff --git a/src/sys-components/HtmlRenderer.js b/src/sys-components/HtmlRenderer.js index cbc245b..b1e68e3 100644 --- a/src/sys-components/HtmlRenderer.js +++ b/src/sys-components/HtmlRenderer.js @@ -3,22 +3,25 @@ import React, { useEffect } from 'react' import DOMPurify from 'dompurify' import { useZoltraakThemeContext } from './Theme/ThemeWrapper' -import "../css/asciidoc/asciidoctor.css" import "../css/asciidoc/dark.css" function HtmlRenderer({ htmlContent }) { const { selectedTheme } = useZoltraakThemeContext() + const rootRef = React.useRef(null) useEffect(() => { const setThemeColors = (theme) => { - const root = document.documentElement + const root = rootRef.current + if (!root) { + return + } if (theme === 'light') { root.style.setProperty('--maincolor', '#fff') root.style.setProperty('--base-background-color', '#fff') root.style.setProperty('--base-text-color', '#000') root.style.setProperty('--heading-color', '#000') - root.style.setProperty('--secondary-heading-color', '#9c27b0') + root.style.setProperty('--secondary-heading-color', '#000') root.style.setProperty('--tertiarycolor', '#4eb6ac') // No matching color in theme.json, keeping the original root.style.setProperty('--sidebarbackground', '#f8f8f7') // No matching color in theme.json, keeping a similar light color root.style.setProperty('--link-color', '#2156a5') // Using default asciidoctor link color @@ -47,7 +50,7 @@ function HtmlRenderer({ htmlContent }) { }) return ( -
+
) } diff --git a/src/sys-components/Theme/ThemeUtil.js b/src/sys-components/Theme/ThemeUtil.js index 459553e..e6f79b9 100644 --- a/src/sys-components/Theme/ThemeUtil.js +++ b/src/sys-components/Theme/ThemeUtil.js @@ -8,6 +8,29 @@ export function getSavedTheme(storage) { return storage.getItem(THEME_KEY) == null ? "light" : storage.getItem(THEME_KEY) } -export function getTheme(selectedTheme, themes, components) {//TODO: merge themebased components and common components - return { ...themes.find(theme => theme.palette.type.localeCompare(selectedTheme) == 0), components: components } +export function getTheme(selectedTheme, themes, components) { + // Normalize legacy palette.type to MUI's palette.mode so repeated toggles + // always resolve a consistent theme object. + const normalizedThemes = (themes ?? []).map((theme) => { + const palette = theme?.palette ?? {} + const mode = palette.mode ?? palette.type ?? "light" + + return { + ...theme, + palette: { + ...palette, + mode, + }, + } + }) + + const resolvedTheme = + normalizedThemes.find((theme) => theme?.palette?.mode === selectedTheme) ?? + normalizedThemes[0] ?? + { palette: { mode: "light" } } + + return { + ...resolvedTheme, + components, + } } diff --git a/src/sys-components/Theme/ThemeWrapper.js b/src/sys-components/Theme/ThemeWrapper.js index 25182da..95fa39a 100644 --- a/src/sys-components/Theme/ThemeWrapper.js +++ b/src/sys-components/Theme/ThemeWrapper.js @@ -2,6 +2,7 @@ import React from 'react' import { ThemeProvider } from '@mui/material/styles' +import { CssBaseline, GlobalStyles } from '@mui/material' import AppLoadingScreen from '../Loading/AppLoadingScreen' import { useZoltraakTheme } from './useZoltraakTheme' import LoadingScreen from '../Loading/LoadingScreen' @@ -23,9 +24,23 @@ const ThemeWrapper = ({ children, ...props }) => { setApploading(false) }, []) + React.useEffect(() => { + document.body.style.backgroundColor = theme.palette.background.default + document.body.style.color = theme.palette.text.primary + }, [theme]) + return ( + + ({ + body: { + backgroundColor: activeTheme.palette.background.default, + color: activeTheme.palette.text.primary, + }, + })} + /> {!hideThemeTransitionIcon ? themeTransition : null} {loading ? : null} {appLoading ? : children} diff --git a/src/sys-components/Theme/useZoltraakTheme.js b/src/sys-components/Theme/useZoltraakTheme.js index bf79027..2999188 100644 --- a/src/sys-components/Theme/useZoltraakTheme.js +++ b/src/sys-components/Theme/useZoltraakTheme.js @@ -10,7 +10,17 @@ export function useZoltraakTheme(themes, components) { const [selectedTheme, setSelectedTheme] = React.useState("light") const [hideThemeTransitionIcon, setHideThemeTransitionIcon] = React.useState(true) - const theme = createTheme({ ...getTheme(selectedTheme, themes, components) }) + React.useEffect(() => { + const savedTheme = getSavedTheme(localStorage) + if (savedTheme !== selectedTheme) { + setSelectedTheme(savedTheme) + } + }, []) + + const theme = React.useMemo( + () => createTheme({ ...getTheme(selectedTheme, themes, components) }), + [selectedTheme, themes, components] + ) const setTheme = (theme) => { clearTimeout(themeTransitionTimeOutId.current) @@ -22,14 +32,10 @@ export function useZoltraakTheme(themes, components) { } const themeTransition = ( - selectedTheme.localeCompare("dark") == 0 ? + selectedTheme === "dark" ? : ) - React.useEffect(() => { - setSelectedTheme(getSavedTheme(localStorage)) - }, []) - return [selectedTheme, setTheme, theme, hideThemeTransitionIcon, themeTransition] } \ No newline at end of file From 393942b5abbd6286967f54a4b7fd48e7df47f4fa Mon Sep 17 00:00:00 2001 From: Tutul Deb Roy Date: Thu, 7 May 2026 00:30:24 +0530 Subject: [PATCH 4/6] refactor(app): migrate routing flows and shared ui/lib modules --- next.config.js | 5 + public/feature-flags.json | 8 ++ public/sitemap.xml | 34 ++++++ src/app/about/page.js | 27 ++--- src/app/global-error.js | 4 +- src/app/page.js | 32 ++--- src/app/pages/page.js | 55 ++------- src/app/projects/page.js | 67 ++--------- src/app/search/page.js | 16 +++ src/app/tools/page.js | 50 ++------ src/components/DisplayAllTopics.js | 42 +++++-- src/components/DisplayTopics.js | 14 ++- src/components/DisplayTopicsControlPanel.js | 48 +++++--- src/components/DraftBadge.js | 29 +++++ src/components/FetchPost.js | 5 +- src/components/Item.js | 63 +++++----- src/components/ProjectItem.js | 42 +++---- src/components/Topic.js | 75 ++++++------ src/components/Util.js | 22 ---- src/components/WebVitals.js | 22 ++++ src/components/api-helper/fetchApi.js | 13 +- src/components/common/AsyncState.js | 28 +++++ src/components/common/CardBase.js | 53 +++++++++ src/components/common/ItemList.js | 37 ++++++ src/components/common/SmartLink.js | 22 ++++ src/components/home/MostRecentTopics.js | 57 +++++++-- src/components/home/QuickAccess.js | 66 +++++++---- src/components/routes/AboutPage.js | 13 ++ src/components/routes/ContentPage.js | 47 ++++++++ src/components/routes/SearchPage.js | 94 +++++++++++++++ src/components/routes/ToolsPage.js | 47 ++++++++ src/lib/config/loadAppConfig.js | 15 +++ src/lib/config/validators.js | 102 ++++++++++++++++ src/lib/content-utils.js | 51 ++++++++ src/lib/data-gateway/client.js | 57 +++++++++ src/lib/flags.js | 91 ++++++++++++++ src/lib/metadata.js | 50 ++++++++ src/lib/navigation.js | 44 +++++++ src/lib/routes.js | 40 +++++++ src/lib/taxonomy.js | 125 ++++++++++++++++++++ src/sys-components/Appbar/DrawerAppBar.js | 42 ++++--- src/sys-components/FetchAndDisplayHtml.js | 10 +- 42 files changed, 1385 insertions(+), 379 deletions(-) create mode 100644 public/feature-flags.json create mode 100644 public/sitemap.xml create mode 100644 src/app/search/page.js create mode 100644 src/components/DraftBadge.js create mode 100644 src/components/WebVitals.js create mode 100644 src/components/common/AsyncState.js create mode 100644 src/components/common/CardBase.js create mode 100644 src/components/common/ItemList.js create mode 100644 src/components/common/SmartLink.js create mode 100644 src/components/routes/AboutPage.js create mode 100644 src/components/routes/ContentPage.js create mode 100644 src/components/routes/SearchPage.js create mode 100644 src/components/routes/ToolsPage.js create mode 100644 src/lib/config/loadAppConfig.js create mode 100644 src/lib/config/validators.js create mode 100644 src/lib/content-utils.js create mode 100644 src/lib/data-gateway/client.js create mode 100644 src/lib/flags.js create mode 100644 src/lib/metadata.js create mode 100644 src/lib/navigation.js create mode 100644 src/lib/routes.js create mode 100644 src/lib/taxonomy.js diff --git a/next.config.js b/next.config.js index 65cdb6d..886d200 100644 --- a/next.config.js +++ b/next.config.js @@ -1,6 +1,11 @@ /** @type {import('next').NextConfig} */ const nextConfig = { output:'export', + // next/image with output:'export' requires unoptimized mode unless a custom loader is provided. + // A CDN loader can replace this once a deployment target with image optimization is chosen. + images: { + unoptimized: true, + }, publicRuntimeConfig: { version: process.env.npm_package_version }, diff --git a/public/feature-flags.json b/public/feature-flags.json new file mode 100644 index 0000000..f266f04 --- /dev/null +++ b/public/feature-flags.json @@ -0,0 +1,8 @@ +{ + "_comment": "Runtime feature flags. Set a key to true to enable the feature for all users.", + "NEW_SEARCH": false, + "DRAFT_MODE": false, + "RSS_FEED": false, + "RELATED_POSTS": false, + "CONTENT_REVISION_HISTORY": false +} diff --git a/public/sitemap.xml b/public/sitemap.xml new file mode 100644 index 0000000..2fdc4b4 --- /dev/null +++ b/public/sitemap.xml @@ -0,0 +1,34 @@ + + + + + https://www.tu2l.com/zoltraak/ + weekly + 1.0 + + + https://www.tu2l.com/zoltraak/pages + daily + 0.9 + + + https://www.tu2l.com/zoltraak/projects + weekly + 0.8 + + + https://www.tu2l.com/zoltraak/tools + weekly + 0.8 + + + https://www.tu2l.com/zoltraak/about + monthly + 0.6 + + diff --git a/src/app/about/page.js b/src/app/about/page.js index 219fda8..616b464 100644 --- a/src/app/about/page.js +++ b/src/app/about/page.js @@ -1,14 +1,13 @@ -"use client" - -import { useApi } from '@/sys-components/ApiContext' -import FetchAndDisplayHtml from "@/sys-components/FetchAndDisplayHtml" - -const About = () => { - - const api = useApi() - const url = `${api.baseUrl}miscs/about_me.html` - - return -} - -export default About \ No newline at end of file +import AboutPage from '@/components/routes/AboutPage' +import { buildPageMetadata } from '@/lib/metadata' + +export const metadata = buildPageMetadata({ + title: 'About', + description: 'Learn more about Tu2l, the ideas behind Zoltraak, and the work showcased on this site.', + path: '/about', + keywords: ['about', 'Tu2l', 'Zoltraak'], +}) + +export default function About() { + return +} \ No newline at end of file diff --git a/src/app/global-error.js b/src/app/global-error.js index 5888257..f7cc978 100644 --- a/src/app/global-error.js +++ b/src/app/global-error.js @@ -2,11 +2,11 @@ export default function GlobalError({ error, reset }) { return ( - +

Something went wrong!

) -} \ No newline at end of file +} diff --git a/src/app/page.js b/src/app/page.js index a431d67..105451e 100644 --- a/src/app/page.js +++ b/src/app/page.js @@ -1,22 +1,26 @@ -'use client' - -import React, { useEffect, useState } from 'react' import HomeOverview from '@/components/home/HomeOverview' +import { buildPageMetadata, personJsonLd, websiteJsonLd } from '@/lib/metadata' +export const metadata = buildPageMetadata({ + title: 'Home', + description: 'Browse recent topics, quick access links, projects, and tools from Tu2l powered by Zoltraak.', + path: '/', + keywords: ['home', 'topics', 'projects', 'tools', 'Tu2l'], +}) export default function Home() { - const [isMounted, setIsMounted] = useState(false); - - useEffect(() => { - setIsMounted(true); - }, []); - - if (!isMounted) { - return null; - } - return ( - + <> +
- - -

Tutul Deb Roy

-

- A Software developer from Guwahati, Assam. -

- - - -