From e68a94ebfe1c7eb381aaa6e2e8f4ba88363ac955 Mon Sep 17 00:00:00 2001 From: Ranveer Soni Date: Sat, 18 Apr 2026 12:55:28 +0530 Subject: [PATCH] feat(fix): visual bugs and ui issues Currency Selector price.tsx - Fixed a critical contrast issue in the currency dropdown where secondary text (currency symbols and codes) would become invisible upon hovering or focus - Implemented the group class on DropdownMenuItem to synchronize state. - Transitioned the hardcoded ext-muted-foreground to intelligently shift to group-hover:text-accent-foreground/70 and group-focus:text-accent-foreground/70, guaranteeing perfect legibility against the dynamic g-accent highlight color in both light and dark modes. Knowledge Base Article Card (kb-article-card.tsx): - Eliminated the murky hover:bg-accent/50 background modifier that caused poor contrast and an unappealing solid-block effect. - Introduced a more sophisticated elevation-based interaction: the card now lifts seamlessly (hover:-translate-y-0.5), projects a subtle shadow (hover:shadow-md), and gains an elegant primary-tinted border (hover:border-primary/40). - Orchestrated several micro-animations on hover to make the component feel alive: - The leading document icon scales up smoothly (scale-105) with a soft under-shadow. - The trailing chevron shifts progressively to the right to indicate clickability. - The article description fades gracefully ( ext-foreground/80). - Refined component typography, specifically for the reading metadata and tag pill badges, aligning their paddings, fonts, and primary-icon tints to match the upscale visual hierarchy. fixed site links being treated as external links --- bun.lock | 49 +++++++++++----- package.json | 2 +- packages/kb/components/kb-article-card.tsx | 36 ++++++------ .../components/Layouts/About/about-page.tsx | 10 ++-- .../ui/components/Layouts/Contact/contact.tsx | 4 +- .../components/Layouts/Error/error-page.tsx | 2 +- .../Layouts/Error/not-found-page.tsx | 2 +- .../ui/components/Layouts/Games/game-hero.tsx | 2 +- .../ui/components/Layouts/Home/features.tsx | 2 +- packages/ui/components/Layouts/Home/hero.tsx | 2 +- .../components/Layouts/Nodes/nodes-client.tsx | 2 +- .../ui/components/Layouts/VPS/vps-hero.tsx | 2 +- .../ui/components/Layouts/VPS/vps-hub.tsx | 2 +- packages/ui/components/Static/footer.tsx | 58 ++++++++++++------- packages/ui/components/Static/navigation.tsx | 38 ++++++++---- packages/ui/components/ui/button.tsx | 2 +- packages/ui/components/ui/price.tsx | 12 ++-- translations | 2 +- 18 files changed, 141 insertions(+), 88 deletions(-) diff --git a/bun.lock b/bun.lock index ac7c7ff..ae8b695 100644 --- a/bun.lock +++ b/bun.lock @@ -1,5 +1,6 @@ { "lockfileVersion": 1, + "configVersion": 0, "workspaces": { "": { "name": "defyx", @@ -51,7 +52,7 @@ "input-otp": "1.4.1", "jsonwebtoken": "^9.0.3", "lucide-react": "^0.454.0", - "next": "^16.1.6", + "next": "^16.2.4", "next-intl": "^4.6.1", "next-themes": "^0.4.6", "react": "^19.2.3", @@ -291,25 +292,25 @@ "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@0.2.12", "", { "dependencies": { "@emnapi/core": "^1.4.3", "@emnapi/runtime": "^1.4.3", "@tybys/wasm-util": "^0.10.0" } }, "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ=="], - "@next/env": ["@next/env@16.1.7", "", {}, "sha512-rJJbIdJB/RQr2F1nylZr/PJzamvNNhfr3brdKP6s/GW850jbtR70QlSfFselvIBbcPUOlQwBakexjFzqLzF6pg=="], + "@next/env": ["@next/env@16.2.4", "", {}, "sha512-dKkkOzOSwFYe5RX6y26fZgkSpVAlIOJKQHIiydQcrWH6y/97+RceSOAdjZ14Qa3zLduVUy0TXcn+EiM6t4rPgw=="], "@next/eslint-plugin-next": ["@next/eslint-plugin-next@16.1.0", "", { "dependencies": { "fast-glob": "3.3.1" } }, "sha512-sooC/k0LCF4/jLXYHpgfzJot04lZQqsttn8XJpTguP8N3GhqXN3wSkh68no2OcZzS/qeGwKDFTqhZ8WofdXmmQ=="], - "@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@16.1.7", "", { "os": "darwin", "cpu": "arm64" }, "sha512-b2wWIE8sABdyafc4IM8r5Y/dS6kD80JRtOGrUiKTsACFQfWWgUQ2NwoUX1yjFMXVsAwcQeNpnucF2ZrujsBBPg=="], + "@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@16.2.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-OXTFFox5EKN1Ym08vfrz+OXxmCcEjT4SFMbNRsWZE99dMqt2Kcusl5MqPXcW232RYkMLQTy0hqgAMEsfEd/l2A=="], - "@next/swc-darwin-x64": ["@next/swc-darwin-x64@16.1.7", "", { "os": "darwin", "cpu": "x64" }, "sha512-zcnVaaZulS1WL0Ss38R5Q6D2gz7MtBu8GZLPfK+73D/hp4GFMrC2sudLky1QibfV7h6RJBJs/gOFvYP0X7UVlQ=="], + "@next/swc-darwin-x64": ["@next/swc-darwin-x64@16.2.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-XhpVnUfmYWvD3YrXu55XdcAkQtOnvaI6wtQa8fuF5fGoKoxIUZ0kWPtcOfqJEWngFF/lOS9l3+O9CcownhiQxQ=="], - "@next/swc-linux-arm64-gnu": ["@next/swc-linux-arm64-gnu@16.1.7", "", { "os": "linux", "cpu": "arm64" }, "sha512-2ant89Lux/Q3VyC8vNVg7uBaFVP9SwoK2jJOOR0L8TQnX8CAYnh4uctAScy2Hwj2dgjVHqHLORQZJ2wH6VxhSQ=="], + "@next/swc-linux-arm64-gnu": ["@next/swc-linux-arm64-gnu@16.2.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-Mx/tjlNA3G8kg14QvuGAJ4xBwPk1tUHq56JxZ8CXnZwz1Etz714soCEzGQQzVMz4bEnGPowzkV6Xrp6wAkEWOQ=="], - "@next/swc-linux-arm64-musl": ["@next/swc-linux-arm64-musl@16.1.7", "", { "os": "linux", "cpu": "arm64" }, "sha512-uufcze7LYv0FQg9GnNeZ3/whYfo+1Q3HnQpm16o6Uyi0OVzLlk2ZWoY7j07KADZFY8qwDbsmFnMQP3p3+Ftprw=="], + "@next/swc-linux-arm64-musl": ["@next/swc-linux-arm64-musl@16.2.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-iVMMp14514u7Nup2umQS03nT/bN9HurK8ufylC3FZNykrwjtx7V1A7+4kvhbDSCeonTVqV3Txnv0Lu+m2oDXNg=="], - "@next/swc-linux-x64-gnu": ["@next/swc-linux-x64-gnu@16.1.7", "", { "os": "linux", "cpu": "x64" }, "sha512-KWVf2gxYvHtvuT+c4MBOGxuse5TD7DsMFYSxVxRBnOzok/xryNeQSjXgxSv9QpIVlaGzEn/pIuI6Koosx8CGWA=="], + "@next/swc-linux-x64-gnu": ["@next/swc-linux-x64-gnu@16.2.4", "", { "os": "linux", "cpu": "x64" }, "sha512-EZOvm1aQWgnI/N/xcWOlnS3RQBk0VtVav5Zo7n4p0A7UKyTDx047k8opDbXgBpHl4CulRqRfbw3QrX2w5UOXMQ=="], - "@next/swc-linux-x64-musl": ["@next/swc-linux-x64-musl@16.1.7", "", { "os": "linux", "cpu": "x64" }, "sha512-HguhaGwsGr1YAGs68uRKc4aGWxLET+NevJskOcCAwXbwj0fYX0RgZW2gsOCzr9S11CSQPIkxmoSbuVaBp4Z3dA=="], + "@next/swc-linux-x64-musl": ["@next/swc-linux-x64-musl@16.2.4", "", { "os": "linux", "cpu": "x64" }, "sha512-h9FxsngCm9cTBf71AR4fGznDEDx1hS7+kSEiIRjq5kO1oXWm07DxVGZjCvk0SGx7TSjlUqhI8oOyz7NfwAdPoA=="], - "@next/swc-win32-arm64-msvc": ["@next/swc-win32-arm64-msvc@16.1.7", "", { "os": "win32", "cpu": "arm64" }, "sha512-S0n3KrDJokKTeFyM/vGGGR8+pCmXYrjNTk2ZozOL1C/JFdfUIL9O1ATaJOl5r2POe56iRChbsszrjMAdWSv7kQ=="], + "@next/swc-win32-arm64-msvc": ["@next/swc-win32-arm64-msvc@16.2.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-3NdJV5OXMSOeJYijX+bjaLge3mJBlh4ybydbT4GFoB/2hAojWHtMhl3CYlYoMrjPuodp0nzFVi4Tj2+WaMg+Ow=="], - "@next/swc-win32-x64-msvc": ["@next/swc-win32-x64-msvc@16.1.7", "", { "os": "win32", "cpu": "x64" }, "sha512-mwgtg8CNZGYm06LeEd+bNnOUfwOyNem/rOiP14Lsz+AnUY92Zq/LXwtebtUiaeVkhbroRCQ0c8GlR4UT1U+0yg=="], + "@next/swc-win32-x64-msvc": ["@next/swc-win32-x64-msvc@16.2.4", "", { "os": "win32", "cpu": "x64" }, "sha512-kMVGgsqhO5YTYODD9IPGGhA6iprWidQckK3LmPeW08PIFENRmgfb4MjXHO+p//d+ts2rpjvK5gXWzXSMrPl9cw=="], "@nodelib/fs.scandir": ["@nodelib/fs.scandir@2.1.5", "", { "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" } }, "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g=="], @@ -871,7 +872,7 @@ "date-fns-jalali": ["date-fns-jalali@4.1.0-0", "", {}, "sha512-hTIP/z+t+qKwBDcmmsnmjWTduxCg+5KfdqWQvb2X/8C9+knYY6epN/pfxdDuyVlSVeFz0sM5eEfwIUQ70U4ckg=="], - "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + "debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], "decimal.js": ["decimal.js@10.6.0", "", {}, "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg=="], @@ -1481,7 +1482,7 @@ "negotiator": ["negotiator@1.0.0", "", {}, "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg=="], - "next": ["next@16.1.7", "", { "dependencies": { "@next/env": "16.1.7", "@swc/helpers": "0.5.15", "baseline-browser-mapping": "^2.9.19", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" }, "optionalDependencies": { "@next/swc-darwin-arm64": "16.1.7", "@next/swc-darwin-x64": "16.1.7", "@next/swc-linux-arm64-gnu": "16.1.7", "@next/swc-linux-arm64-musl": "16.1.7", "@next/swc-linux-x64-gnu": "16.1.7", "@next/swc-linux-x64-musl": "16.1.7", "@next/swc-win32-arm64-msvc": "16.1.7", "@next/swc-win32-x64-msvc": "16.1.7", "sharp": "^0.34.4" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@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", "sass": "^1.3.0" }, "optionalPeers": ["@opentelemetry/api", "@playwright/test", "babel-plugin-react-compiler", "sass"], "bin": { "next": "dist/bin/next" } }, "sha512-WM0L7WrSvKwoLegLYr6V+mz+RIofqQgVAfHhMp9a88ms0cFX8iX9ew+snpWlSBwpkURJOUdvCEt3uLl3NNzvWg=="], + "next": ["next@16.2.4", "", { "dependencies": { "@next/env": "16.2.4", "@swc/helpers": "0.5.15", "baseline-browser-mapping": "^2.9.19", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" }, "optionalDependencies": { "@next/swc-darwin-arm64": "16.2.4", "@next/swc-darwin-x64": "16.2.4", "@next/swc-linux-arm64-gnu": "16.2.4", "@next/swc-linux-arm64-musl": "16.2.4", "@next/swc-linux-x64-gnu": "16.2.4", "@next/swc-linux-x64-musl": "16.2.4", "@next/swc-win32-arm64-msvc": "16.2.4", "@next/swc-win32-x64-msvc": "16.2.4", "sharp": "^0.34.5" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@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", "sass": "^1.3.0" }, "optionalPeers": ["@opentelemetry/api", "@playwright/test", "babel-plugin-react-compiler", "sass"], "bin": { "next": "dist/bin/next" } }, "sha512-kPvz56wF5frc+FxlHI5qnklCzbq53HTwORaWBGdT0vNoKh1Aya9XC8aPauH4NJxqtzbWsS5mAbctm4cr+EkQ2Q=="], "next-intl": ["next-intl@4.6.1", "", { "dependencies": { "@formatjs/intl-localematcher": "^0.5.4", "@parcel/watcher": "^2.4.1", "@swc/core": "^1.15.2", "negotiator": "^1.0.0", "next-intl-swc-plugin-extractor": "^4.6.1", "po-parser": "^2.0.0", "use-intl": "^4.6.1" }, "peerDependencies": { "next": "^12.0.0 || ^13.0.0 || ^14.0.0 || ^15.0.0 || ^16.0.0", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc <19.0.0 || ^19.0.0", "typescript": "^5.0.0" }, "optionalPeers": ["typescript"] }, "sha512-KlWgWtKLBPUsTPgxqwyjws1wCMD2QKxLlVjeeGj53DC1JWfKmBShKOrhIP0NznZrRQ0GleeoDUeHSETmyyIFeA=="], @@ -1915,6 +1916,8 @@ "zwitch": ["zwitch@2.0.4", "", {}, "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A=="], + "@babel/core/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + "@babel/core/json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="], "@babel/core/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], @@ -1925,6 +1928,8 @@ "@babel/helper-compilation-targets/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], + "@babel/traverse/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + "@commitlint/config-validator/ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="], "@commitlint/is-ignored/semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="], @@ -1939,6 +1944,10 @@ "@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="], + "@eslint/config-array/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "@eslint/eslintrc/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + "@eslint/eslintrc/globals": ["globals@14.0.0", "", {}, "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ=="], "@eslint/eslintrc/js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="], @@ -1977,6 +1986,14 @@ "@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], + "@typescript-eslint/parser/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "@typescript-eslint/project-service/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "@typescript-eslint/type-utils/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + + "@typescript-eslint/typescript-estree/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + "@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], "@typescript-eslint/typescript-estree/semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="], @@ -1993,11 +2010,9 @@ "eslint/chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], - "eslint-import-resolver-node/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], + "eslint/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], - "eslint-module-utils/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], - - "eslint-plugin-import/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="], + "eslint-import-resolver-typescript/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], "eslint-plugin-import/semver": ["semver@6.3.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="], @@ -2025,6 +2040,8 @@ "mdast-util-find-and-replace/escape-string-regexp": ["escape-string-regexp@5.0.0", "", {}, "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw=="], + "micromark/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + "next/caniuse-lite": ["caniuse-lite@1.0.30001779", "", {}, "sha512-U5og2PN7V4DMgF50YPNtnZJGWVLFjjsN3zb6uMT5VGYIewieDj1upwfuVNXf4Kor+89c3iCRJnSzMD5LmTvsfA=="], "next/postcss": ["postcss@8.4.31", "", { "dependencies": { "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } }, "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ=="], diff --git a/package.json b/package.json index 3d68c5e..4fc5cdc 100644 --- a/package.json +++ b/package.json @@ -62,7 +62,7 @@ "input-otp": "1.4.1", "jsonwebtoken": "^9.0.3", "lucide-react": "^0.454.0", - "next": "^16.1.6", + "next": "^16.2.4", "next-intl": "^4.6.1", "next-themes": "^0.4.6", "react": "^19.2.3", diff --git a/packages/kb/components/kb-article-card.tsx b/packages/kb/components/kb-article-card.tsx index 46b84f8..f7850f9 100644 --- a/packages/kb/components/kb-article-card.tsx +++ b/packages/kb/components/kb-article-card.tsx @@ -35,37 +35,37 @@ export function KBArticleCard({
-
+
-
-

+
+

{article.title}

{showCategory && ( - + {article.category.replace(/-/g, " ")} )}
-

+

{article.description}

-
- - +
+ + {article.readingTime} {translations?.minRead || "min read"} - - + + {new Date(article.lastUpdated).toLocaleDateString("en-US", { year: "numeric", month: "short", @@ -73,22 +73,22 @@ export function KBArticleCard({ })} {article.author && ( - - + + {article.author} )}
{article.tags && article.tags.length > 0 && ( -
+
{article.tags.slice(0, 4).map((tag) => ( - + {tag} ))} {article.tags.length > 4 && ( - + +{article.tags.length - 4} more )} @@ -96,7 +96,9 @@ export function KBArticleCard({ )}
- +
+ +

); diff --git a/packages/ui/components/Layouts/About/about-page.tsx b/packages/ui/components/Layouts/About/about-page.tsx index b569545..1be8ae8 100644 --- a/packages/ui/components/Layouts/About/about-page.tsx +++ b/packages/ui/components/Layouts/About/about-page.tsx @@ -32,19 +32,19 @@ export function AboutPage() { icon: Gamepad2, title: t("aboutPage.values.players.title"), description: t("aboutPage.values.players.description"), - gradient: "from-blue-500 to-cyan-500", + gradient: "from-primary to-accent", }, { icon: Code, title: t("aboutPage.values.community.title"), description: t("aboutPage.values.community.description"), - gradient: "from-orange-500 to-rose-500", + gradient: "from-accent to-primary", }, { icon: Sparkles, title: t("aboutPage.values.open.title"), description: t("aboutPage.values.open.description"), - gradient: "from-violet-500 to-blue-500", + gradient: "from-primary/80 to-accent/80", }, ] @@ -93,7 +93,7 @@ export function AboutPage() { {/* Grid pattern overlay */} -
+
@@ -210,7 +210,7 @@ export function AboutPage() {
diff --git a/packages/ui/components/Layouts/Contact/contact.tsx b/packages/ui/components/Layouts/Contact/contact.tsx index 66f3f3d..188640b 100644 --- a/packages/ui/components/Layouts/Contact/contact.tsx +++ b/packages/ui/components/Layouts/Contact/contact.tsx @@ -61,7 +61,7 @@ export function Contact() { href: "https://billing.nodebyte.host/tickets/create", cta: t("contact.ticket.button"), color: "bg-accent/10 text-accent", - hoverColor: "hover:bg-accent hover:text-white", + hoverColor: "hover:bg-accent hover:text-accent-foreground", features: [ t("contact.ticket.features.0"), t("contact.ticket.features.1"), @@ -103,7 +103,7 @@ export function Contact() {
{/* Background */}
-
+
{/* Animated orbs */}
diff --git a/packages/ui/components/Layouts/Error/error-page.tsx b/packages/ui/components/Layouts/Error/error-page.tsx index 3b3145f..a3ff036 100644 --- a/packages/ui/components/Layouts/Error/error-page.tsx +++ b/packages/ui/components/Layouts/Error/error-page.tsx @@ -29,7 +29,7 @@ export function ErrorPage({ error, reset }: ErrorPageProps) {
{/* Grid pattern overlay */} -
+
diff --git a/packages/ui/components/Layouts/Error/not-found-page.tsx b/packages/ui/components/Layouts/Error/not-found-page.tsx index 0f642f3..0cb7f72 100644 --- a/packages/ui/components/Layouts/Error/not-found-page.tsx +++ b/packages/ui/components/Layouts/Error/not-found-page.tsx @@ -30,7 +30,7 @@ export function NotFoundPage() {
{/* Grid pattern overlay */} -
+
diff --git a/packages/ui/components/Layouts/Games/game-hero.tsx b/packages/ui/components/Layouts/Games/game-hero.tsx index ef744b5..1f0bb30 100644 --- a/packages/ui/components/Layouts/Games/game-hero.tsx +++ b/packages/ui/components/Layouts/Games/game-hero.tsx @@ -61,7 +61,7 @@ export function GameHero({
{/* Grid pattern */} -
+
diff --git a/packages/ui/components/Layouts/Home/features.tsx b/packages/ui/components/Layouts/Home/features.tsx index 7217256..3831932 100644 --- a/packages/ui/components/Layouts/Home/features.tsx +++ b/packages/ui/components/Layouts/Home/features.tsx @@ -80,7 +80,7 @@ export function Features() {
{/* Background */}
-
+
{/* Section Header */} diff --git a/packages/ui/components/Layouts/Home/hero.tsx b/packages/ui/components/Layouts/Home/hero.tsx index 9604d47..7363a49 100644 --- a/packages/ui/components/Layouts/Home/hero.tsx +++ b/packages/ui/components/Layouts/Home/hero.tsx @@ -84,7 +84,7 @@ export function Hero() {
{/* Grid pattern overlay */} -
+
diff --git a/packages/ui/components/Layouts/Nodes/nodes-client.tsx b/packages/ui/components/Layouts/Nodes/nodes-client.tsx index a20d735..d886292 100644 --- a/packages/ui/components/Layouts/Nodes/nodes-client.tsx +++ b/packages/ui/components/Layouts/Nodes/nodes-client.tsx @@ -291,7 +291,7 @@ export function NodesClient() {
{/* ── Background ─────────────────────────────────────────────────────── */}
-
+
diff --git a/packages/ui/components/Layouts/VPS/vps-hero.tsx b/packages/ui/components/Layouts/VPS/vps-hero.tsx index 6ee3c07..74f4a7d 100644 --- a/packages/ui/components/Layouts/VPS/vps-hero.tsx +++ b/packages/ui/components/Layouts/VPS/vps-hero.tsx @@ -59,7 +59,7 @@ export function VpsHero({ )} />
-
+
diff --git a/packages/ui/components/Layouts/VPS/vps-hub.tsx b/packages/ui/components/Layouts/VPS/vps-hub.tsx index ea4613c..ad49b0b 100644 --- a/packages/ui/components/Layouts/VPS/vps-hub.tsx +++ b/packages/ui/components/Layouts/VPS/vps-hub.tsx @@ -258,7 +258,7 @@ export function VpsHub({ plans }: VpsHubProps) {
{/* Background */}
-
+
diff --git a/packages/ui/components/Static/footer.tsx b/packages/ui/components/Static/footer.tsx index 8e7d952..52aa94e 100644 --- a/packages/ui/components/Static/footer.tsx +++ b/packages/ui/components/Static/footer.tsx @@ -121,21 +121,30 @@ export function Footer() {
    {[ - { href: "https://nodebyte.host/games", label: t("footer.services.gameServers") }, - { href: "https://nodebyte.host/vps", label: t("footer.services.vpsServers") }, + { href: "/games", label: t("footer.services.gameServers") }, + { href: "/vps", label: t("footer.services.vpsServers") }, { href: "https://panel.nodebyte.host", label: t("footer.services.gamePanel") }, { href: "https://vps.nodebyte.host", label: t("footer.services.vpsPanel") }, ].map((link) => (
  • - - {link.label} - - + {link.href.startsWith("http") ? ( + + {link.label} + + + ) : ( + + {link.label} + + )}
  • ))}
@@ -155,17 +164,24 @@ export function Footer() { { href: LINKS.billing.root, label: t("footer.resources.billingPanel") }, ].map((link) => (
  • - - {link.label} - {link.href.startsWith("http") && ( + {link.href.startsWith("http") ? ( + + {link.label} - )} - + + ) : ( + + {link.label} + + )}
  • ))} diff --git a/packages/ui/components/Static/navigation.tsx b/packages/ui/components/Static/navigation.tsx index f042b95..f2cbd5f 100644 --- a/packages/ui/components/Static/navigation.tsx +++ b/packages/ui/components/Static/navigation.tsx @@ -416,13 +416,9 @@ export function Navigation() { onMouseEnter={cancelClose} onMouseLeave={() => closeDropdown(setResourcesOpen)} > - {resources.map((resource) => ( - - + {resources.map((resource) => { + const innerContent = ( + <>
    @@ -435,9 +431,31 @@ export function Navigation() { {resource.description}

    - - - ))} + + ) + + return ( + + {resource.external ? ( + + {innerContent} + + ) : ( + + {innerContent} + + )} + + ) + })}
    diff --git a/packages/ui/components/ui/button.tsx b/packages/ui/components/ui/button.tsx index f64632d..b748d36 100644 --- a/packages/ui/components/ui/button.tsx +++ b/packages/ui/components/ui/button.tsx @@ -13,7 +13,7 @@ const buttonVariants = cva( destructive: 'bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60', outline: - 'border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50', + 'border border-input bg-background shadow-xs hover:bg-accent hover:text-accent-foreground', secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80', ghost: diff --git a/packages/ui/components/ui/price.tsx b/packages/ui/components/ui/price.tsx index 9502c56..7a7ccfb 100644 --- a/packages/ui/components/ui/price.tsx +++ b/packages/ui/components/ui/price.tsx @@ -15,10 +15,10 @@ import { cn } from "@/lib/utils" // Import flag components import { GB, US, EU, CA, AU } from "country-flag-icons/react/3x2" -import type { ComponentType, SVGProps } from "react" +import type { ElementType } from "react" // Currency to flag component mapping -const currencyFlags: Record>> = { +const currencyFlags: Record = { GBP: GB, USD: US, EUR: EU, @@ -94,15 +94,15 @@ export function CurrencySelector({ setOpen(false) }} className={cn( - "flex items-center justify-between cursor-pointer rounded-md mx-1 mb-0.5", - currency === curr.code && "bg-accent" + "group flex items-center justify-between cursor-pointer rounded-md mx-1 mb-0.5", + currency === curr.code && "bg-accent text-accent-foreground" )} >
    - {curr.name} - {curr.symbol} {curr.code} + {curr.name} + {curr.symbol} {curr.code}
    {currency === curr.code && } diff --git a/translations b/translations index b6c5756..ea4231f 160000 --- a/translations +++ b/translations @@ -1 +1 @@ -Subproject commit b6c57564bb7f9bd18e7d39d797e6af34b1fc8b00 +Subproject commit ea4231f6de878e3073cfbdb05264d729c682294d