From 8d46b452b8dbdea0ea98c18f544f92c7defd6a27 Mon Sep 17 00:00:00 2001 From: Connor200024 Date: Wed, 15 Apr 2026 18:39:58 +0100 Subject: [PATCH 1/4] Updated Minecraft server URLs to new format --- packages/core/constants/game/minecraft.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/core/constants/game/minecraft.ts b/packages/core/constants/game/minecraft.ts index 55eda6d..f242263 100644 --- a/packages/core/constants/game/minecraft.ts +++ b/packages/core/constants/game/minecraft.ts @@ -10,14 +10,14 @@ export const MINECRAFT_PLANS: GamePlanSpec[] = [ priceGBP: 4, ramGB: 4, storageGB: 40, - url: "https://billing.nodebyte.host/store/minecraft-server-hosting/ember", + url: "https://billing.nodebyte.host/products/minecraft-server-hosting/ember", }, { id: "blaze", priceGBP: 6, ramGB: 6, storageGB: 60, - url: "https://billing.nodebyte.host/store/minecraft-server-hosting/blaze", + url: "https://billing.nodebyte.host/products/minecraft-server-hosting/blaze", }, { id: "inferno", @@ -25,7 +25,7 @@ export const MINECRAFT_PLANS: GamePlanSpec[] = [ ramGB: 8, storageGB: 80, popular: true, - url: "https://billing.nodebyte.host/store/minecraft-server-hosting/inferno", + url: "https://billing.nodebyte.host/products/minecraft-server-hosting/inferno", }, ] From caf4e42e062e85ce33a57b4f0ca4a67ef29b2e1e Mon Sep 17 00:00:00 2001 From: TheRealToxicDev Date: Fri, 17 Apr 2026 23:51:44 -0600 Subject: [PATCH 2/4] fix: minor ui bugs --- CHANGELOG.md | 25 +++++ app/globals.css | 42 ++++---- packages/core/constants/game/hytale.ts | 6 +- packages/core/constants/game/minecraft.ts | 22 ++++- packages/core/constants/game/rust.ts | 10 ++ packages/core/constants/links.ts | 2 +- packages/core/constants/vps/amd.ts | 12 +-- .../ui/components/Layouts/Contact/contact.tsx | 26 +++-- packages/ui/components/Static/navigation.tsx | 98 +++++++++++-------- 9 files changed, 163 insertions(+), 80 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 658df15..7725ef4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,31 @@ All notable changes to the NodeByte Hosting website will be documented in this f The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [3.5.3] - 2026-04-17 + +### Added +- **Contact Page — Support Ticket Channel** — third support channel card added to `contact.tsx` pointing to `https://billing.nodebyte.host/tickets/create` + - Uses `Headphones` icon with `bg-accent/10 text-accent` colour scheme + - Grid widened from `md:grid-cols-2 max-w-4xl` to `md:grid-cols-3 max-w-5xl` + - `contact.ticket.features` translation keys added to `translations/messages/en-US.json` and `translations/templates/en.json` + +### Changed +- **Contact Page — Card Button Alignment** — support channel card inner div converted to `flex flex-col h-full`; feature list gains `flex-1` so the CTA button is always pinned to the bottom of every card regardless of content height +- **Contact Page — GitHub Card Icon Colour** — icon box class corrected from `bg-muted text-foreground` to `bg-foreground/10 text-foreground` to match the `bg-color/10 text-color` pattern used by all other channel cards +- **Navigation — Dropdown Hover Colours** — row hover background changed from `hover:bg-accent/10` to `hover:bg-muted/60` across all three desktop dropdowns (Company, Services, Resources); icon box hover changed from solid `group-hover:bg-primary group-hover:text-primary-foreground` to a subtle `group-hover:bg-primary/20`; title text given explicit `text-foreground` to prevent blending on saturated themes +- **Navigation — `modal={false}`** — all three desktop `DropdownMenu` components now render with `modal={false}` so the Radix invisible overlay no longer blocks `mouseEnter` events on sibling nav items, fixing the hover-jump bug between dropdowns +- **Navigation — ExternalLink Icon** — `ExternalLink` indicator in the Resources dropdown is now conditionally rendered based on `resource.external` instead of always showing +- **Navigation — Mobile Resources Links** — mobile Resources items now render as `` for internal routes and `` for external ones instead of always using `` + +### Fixed +- **Theme Colour Contrast — Emerald / Amber / Teal** — `--primary` and `--accent` lightness values were too high (0.58–0.68) while `--primary-foreground` / `--accent-foreground` remained near-black (0.10–0.12), producing illegible black-on-dark text on buttons and icon boxes + - Emerald: `--primary` `0.58 → 0.42`, `--accent` `0.62 → 0.48`, foregrounds `0.10 → 0.98` + - Amber: `--primary` `0.62 → 0.46`, `--accent` `0.68 → 0.52`, foregrounds `0.12 → 0.98` + - Teal: `--primary` `0.60 → 0.44`, `--accent` `0.64 → 0.50`, foregrounds `0.10 → 0.98` +- **Translations — Rust `premium` Plan Keys** — `games.rust.plans.premium.name` and `games.rust.plans.premium.description` were missing from `en-US.json` and `en.json`, causing `MISSING_MESSAGE` errors at runtime; both files updated + +--- + ## [3.5.2] - 2026-03-19 ### Added diff --git a/app/globals.css b/app/globals.css index 851f9ef..046bb30 100644 --- a/app/globals.css +++ b/app/globals.css @@ -335,21 +335,21 @@ --card-foreground: oklch(0.98 0.01 160); --popover: oklch(0.13 0.02 160); --popover-foreground: oklch(0.98 0.01 160); - --primary: oklch(0.58 0.18 160); - --primary-foreground: oklch(0.10 0.01 160); + --primary: oklch(0.42 0.18 160); + --primary-foreground: oklch(0.98 0.01 160); --secondary: oklch(0.22 0.02 160); --secondary-foreground: oklch(0.98 0.01 160); --muted: oklch(0.18 0.02 160); --muted-foreground: oklch(0.60 0.02 160); - --accent: oklch(0.62 0.16 165); - --accent-foreground: oklch(0.10 0.01 160); + --accent: oklch(0.48 0.16 165); + --accent-foreground: oklch(0.98 0.01 160); --destructive: oklch(0.577 0.245 27.325); --destructive-foreground: oklch(0.985 0 0); --border: oklch(0.20 0.02 160); --input: oklch(0.18 0.02 160); - --ring: oklch(0.58 0.18 160); - --chart-1: oklch(0.58 0.18 160); - --chart-2: oklch(0.62 0.16 165); + --ring: oklch(0.42 0.18 160); + --chart-1: oklch(0.42 0.18 160); + --chart-2: oklch(0.48 0.16 165); --chart-3: oklch(0.55 0.18 320); --chart-4: oklch(0.7 0.2 140); --chart-5: oklch(0.6 0.2 40); @@ -407,21 +407,21 @@ --card-foreground: oklch(0.98 0.01 60); --popover: oklch(0.15 0.02 60); --popover-foreground: oklch(0.98 0.01 60); - --primary: oklch(0.62 0.18 60); - --primary-foreground: oklch(0.12 0.01 60); + --primary: oklch(0.46 0.18 60); + --primary-foreground: oklch(0.98 0.01 60); --secondary: oklch(0.24 0.02 60); --secondary-foreground: oklch(0.98 0.01 60); --muted: oklch(0.20 0.02 60); --muted-foreground: oklch(0.62 0.02 60); - --accent: oklch(0.68 0.16 50); - --accent-foreground: oklch(0.12 0.01 60); + --accent: oklch(0.52 0.16 50); + --accent-foreground: oklch(0.98 0.01 60); --destructive: oklch(0.577 0.245 27.325); --destructive-foreground: oklch(0.985 0 0); --border: oklch(0.22 0.02 60); --input: oklch(0.20 0.02 60); - --ring: oklch(0.62 0.18 60); - --chart-1: oklch(0.62 0.18 60); - --chart-2: oklch(0.68 0.16 50); + --ring: oklch(0.46 0.18 60); + --chart-1: oklch(0.46 0.18 60); + --chart-2: oklch(0.52 0.16 50); --chart-3: oklch(0.55 0.18 320); --chart-4: oklch(0.7 0.2 140); --chart-5: oklch(0.6 0.2 40); @@ -443,21 +443,21 @@ --card-foreground: oklch(0.98 0.01 180); --popover: oklch(0.13 0.02 180); --popover-foreground: oklch(0.98 0.01 180); - --primary: oklch(0.60 0.16 180); - --primary-foreground: oklch(0.10 0.01 180); + --primary: oklch(0.44 0.16 180); + --primary-foreground: oklch(0.98 0.01 180); --secondary: oklch(0.22 0.02 180); --secondary-foreground: oklch(0.98 0.01 180); --muted: oklch(0.18 0.02 180); --muted-foreground: oklch(0.62 0.02 180); - --accent: oklch(0.64 0.14 175); - --accent-foreground: oklch(0.10 0.01 180); + --accent: oklch(0.50 0.14 175); + --accent-foreground: oklch(0.98 0.01 180); --destructive: oklch(0.577 0.245 27.325); --destructive-foreground: oklch(0.985 0 0); --border: oklch(0.20 0.02 180); --input: oklch(0.18 0.02 180); - --ring: oklch(0.60 0.16 180); - --chart-1: oklch(0.60 0.16 180); - --chart-2: oklch(0.64 0.14 175); + --ring: oklch(0.44 0.16 180); + --chart-1: oklch(0.44 0.16 180); + --chart-2: oklch(0.50 0.14 175); --chart-3: oklch(0.55 0.18 320); --chart-4: oklch(0.7 0.2 140); --chart-5: oklch(0.6 0.2 40); diff --git a/packages/core/constants/game/hytale.ts b/packages/core/constants/game/hytale.ts index 693ec18..6e45ef4 100644 --- a/packages/core/constants/game/hytale.ts +++ b/packages/core/constants/game/hytale.ts @@ -7,14 +7,14 @@ export const HYTALE_PLANS: GamePlanSpec[] = [ priceGBP: 5, ramGB: 4, storageGB: 40, - url: "https://billing.nodebyte.host/store/hytale-hosting/starter", + url: "https://billing.nodebyte.host/products/hytale-hosting/hytale-starter", }, { id: "standard", priceGBP: 7.5, ramGB: 6, storageGB: 60, - url: "https://billing.nodebyte.host/store/hytale-hosting/standard", + url: "https://billing.nodebyte.host/products/hytale-hosting/hytale-standard", }, { id: "performance", @@ -22,7 +22,7 @@ export const HYTALE_PLANS: GamePlanSpec[] = [ ramGB: 8, storageGB: 80, popular: true, - url: "https://billing.nodebyte.host/store/hytale-hosting/performance", + url: "https://billing.nodebyte.host/products/hytale-hosting/hytale-performance", }, ] diff --git a/packages/core/constants/game/minecraft.ts b/packages/core/constants/game/minecraft.ts index 55eda6d..aa5aae4 100644 --- a/packages/core/constants/game/minecraft.ts +++ b/packages/core/constants/game/minecraft.ts @@ -10,14 +10,14 @@ export const MINECRAFT_PLANS: GamePlanSpec[] = [ priceGBP: 4, ramGB: 4, storageGB: 40, - url: "https://billing.nodebyte.host/store/minecraft-server-hosting/ember", + url: "https://billing.nodebyte.host/products/minecraft-server-hosting/ember", }, { id: "blaze", priceGBP: 6, ramGB: 6, storageGB: 60, - url: "https://billing.nodebyte.host/store/minecraft-server-hosting/blaze", + url: "https://billing.nodebyte.host/products/minecraft-server-hosting/blaze", }, { id: "inferno", @@ -25,7 +25,23 @@ export const MINECRAFT_PLANS: GamePlanSpec[] = [ ramGB: 8, storageGB: 80, popular: true, - url: "https://billing.nodebyte.host/store/minecraft-server-hosting/inferno", + url: "https://billing.nodebyte.host/products/minecraft-server-hosting/inferno", + }, + { + id: "firestorm", + priceGBP: 15, + ramGB: 16, + storageGB: 160, + popular: true, + url: "https://billing.nodebyte.host/products/minecraft-server-hosting/firestorm", + }, + { + id: "supernova", + priceGBP: 30, + ramGB: 32, + storageGB: 320, + popular: true, + url: "https://billing.nodebyte.host/products/minecraft-server-hosting/supernova", }, ] diff --git a/packages/core/constants/game/rust.ts b/packages/core/constants/game/rust.ts index c2db1a9..3fe8779 100644 --- a/packages/core/constants/game/rust.ts +++ b/packages/core/constants/game/rust.ts @@ -6,6 +6,7 @@ export const RUST_PLANS: GamePlanSpec[] = [ priceGBP: 5.75, ramGB: 8, storageGB: 150, + url: "https://billing.nodebyte.host/products/rust-hosting/starter" }, { id: "standard", @@ -13,12 +14,21 @@ export const RUST_PLANS: GamePlanSpec[] = [ ramGB: 12, storageGB: 200, popular: true, + url: "https://billing.nodebyte.host/products/rust-hosting/standard" }, { id: "performance", priceGBP: 12.75, ramGB: 16, storageGB: 250, + url: "https://billing.nodebyte.host/products/rust-hosting/performance" + }, + { + id: "premium", + priceGBP: 18.99, + ramGB: 32, + storageGB: 350, + url: "https://billing.nodebyte.host/products/rust-hosting/premium" }, ] diff --git a/packages/core/constants/links.ts b/packages/core/constants/links.ts index 11accef..06a52a4 100644 --- a/packages/core/constants/links.ts +++ b/packages/core/constants/links.ts @@ -16,7 +16,7 @@ export const LINKS = { root: "https://billing.nodebyte.host", store: "https://billing.nodebyte.host/store", login: "https://billing.nodebyte.host/login", - submitTicket: "https://billing.nodebyte.host/submitticket.php", + submitTicket: "https://billing.nodebyte.host/tickets/create", freeTrial: "https://billing.nodebyte.host/store/free-trial", amdVps: "https://billing.nodebyte.host/store/vps-hosting", intelVps: "https://billing.nodebyte.host/store/vps-hosting", diff --git a/packages/core/constants/vps/amd.ts b/packages/core/constants/vps/amd.ts index 29688fb..85c71aa 100644 --- a/packages/core/constants/vps/amd.ts +++ b/packages/core/constants/vps/amd.ts @@ -20,7 +20,7 @@ export const AMD_PLANS: VpsPlanSpec[] = [ bandwidth: { amount: 1, unit: "GB" }, uplink: { amount: 1, unit: "Gbps" }, ddos: { layers: [3, 4, 7], autoOn: true }, - url: "https://billing.nodebyte.host/store/vps-hosting/2gb-r71700x", + url: "https://billing.nodebyte.host/products/amdvps/base-rg1-2gb", }, { id: "4GB-R71700X", @@ -37,7 +37,7 @@ export const AMD_PLANS: VpsPlanSpec[] = [ bandwidth: { amount: 1, unit: "GB" }, uplink: { amount: 1, unit: "Gbps" }, ddos: { layers: [3, 4, 7], autoOn: true }, - url: "https://billing.nodebyte.host/store/vps-hosting/4gb-r71700x", + url: "https://billing.nodebyte.host/products/amdvps/comp-rg1-4gb", }, { id: "8GB-R71700X", @@ -55,7 +55,7 @@ export const AMD_PLANS: VpsPlanSpec[] = [ uplink: { amount: 1, unit: "Gbps" }, ddos: { layers: [3, 4, 7], autoOn: true }, popular: true, - url: "https://billing.nodebyte.host/store/vps-hosting/8gb-r71700x", + url: "https://billing.nodebyte.host/products/amdvps/comp-rg1-8gb", }, { id: "16GB-R71700X", @@ -72,7 +72,7 @@ export const AMD_PLANS: VpsPlanSpec[] = [ bandwidth: null, uplink: { amount: 1, unit: "Gbps" }, ddos: { layers: [3, 4, 7], autoOn: true }, - url: "https://billing.nodebyte.host/store/vps-hosting/16gb-r71700x", + url: "https://billing.nodebyte.host/products/amdvps/comp-rg1-16gb", }, { id: "32GB-R71700X", @@ -90,7 +90,7 @@ export const AMD_PLANS: VpsPlanSpec[] = [ bandwidth: null, uplink: { amount: 1, unit: "Gbps" }, ddos: { layers: [3, 4, 7], autoOn: true }, - url: "https://billing.nodebyte.host/store/vps-hosting/16gb-r71700x", + url: "https://billing.nodebyte.host/products/amdvps/comp-rg1-32gb", }, { id: "64GB-R71700X", @@ -108,7 +108,7 @@ export const AMD_PLANS: VpsPlanSpec[] = [ bandwidth: null, uplink: { amount: 1, unit: "Gbps" }, ddos: { layers: [3, 4, 7], autoOn: true }, - url: "https://billing.nodebyte.host/store/vps-hosting/16gb-r71700x", + url: "https://billing.nodebyte.host/products/amdvps/comp-rg1-64gb", }, ] diff --git a/packages/ui/components/Layouts/Contact/contact.tsx b/packages/ui/components/Layouts/Contact/contact.tsx index f2aa9cd..66f3f3d 100644 --- a/packages/ui/components/Layouts/Contact/contact.tsx +++ b/packages/ui/components/Layouts/Contact/contact.tsx @@ -46,7 +46,7 @@ export function Contact() { icon: Github, href: LINKS.githubDiscussions, cta: t("contact.github.button"), - color: "bg-muted text-foreground", + color: "bg-foreground/10 text-foreground", hoverColor: "hover:bg-foreground hover:text-background", features: [ t("contact.github.features.0"), @@ -54,6 +54,20 @@ export function Contact() { t("contact.github.features.2"), ], }, + { + title: t("contact.ticket.title"), + description: t("contact.ticket.description"), + icon: Headphones, + 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", + features: [ + t("contact.ticket.features.0"), + t("contact.ticket.features.1"), + t("contact.ticket.features.2"), + ], + }, ] const emailContacts = [ @@ -116,7 +130,7 @@ export function Contact() { {/* Social Links & Warning - Now at top */} -
+
@@ -159,13 +173,13 @@ export function Contact() {
{/* Support Channels */} -
+
{supportChannels.map((channel) => ( -
+
{channel.title}

{channel.description}

-
    +
      {channel.features.map((feature, i) => (
    • @@ -198,7 +212,7 @@ export function Contact() {
{/* Email Contacts */} -
+
diff --git a/packages/ui/components/Static/navigation.tsx b/packages/ui/components/Static/navigation.tsx index 151b2f3..f042b95 100644 --- a/packages/ui/components/Static/navigation.tsx +++ b/packages/ui/components/Static/navigation.tsx @@ -108,7 +108,7 @@ export function Navigation() { }, { title: t("resources.vpsPanel.title"), - href: "https://panel.nodebyte.host/", + href: "https://vps.nodebyte.host/", description: t("resources.vpsPanel.description"), icon: Cpu, external: true, @@ -118,12 +118,14 @@ export function Navigation() { href: "/kb", description: t("resources.kb.description"), icon: Book, + external: false }, { title: t("resources.changelog.title"), href: "/changelog", description: t("resources.changelog.description"), icon: Sparkles, + external: false }, ], [t]) @@ -276,7 +278,7 @@ export function Navigation() { {/* Desktop Navigation */}
{/* Company Dropdown */} - +
openDropdown(setCompanyOpen, () => { setServicesOpen(false); setResourcesOpen(false) })} onMouseLeave={() => closeDropdown(setCompanyOpen)} @@ -301,14 +303,14 @@ export function Navigation() { -
+
- {item.title} + {item.title}

{item.description} @@ -322,7 +324,7 @@ export function Navigation() { {/* Services Dropdown */} - +

openDropdown(setServicesOpen, () => { setCompanyOpen(false); setResourcesOpen(false) })} onMouseLeave={() => closeDropdown(setServicesOpen)} @@ -351,13 +353,13 @@ export function Navigation() { -
+
- {service.title} + {service.title}

{service.description}

@@ -374,13 +376,13 @@ export function Navigation() { -
+
- {service.title} + {service.title}

{service.description}

@@ -393,7 +395,7 @@ export function Navigation() { {/* Resources Dropdown */} - +
openDropdown(setResourcesOpen, () => { setCompanyOpen(false); setServicesOpen(false) })} onMouseLeave={() => closeDropdown(setResourcesOpen)} @@ -418,17 +420,16 @@ export function Navigation() {
From 11c6958434b274a0333b8a817ce0596eaf3d7179 Mon Sep 17 00:00:00 2001 From: Pixelated Date: Sat, 18 Apr 2026 00:08:20 -0600 Subject: [PATCH 3/4] Update URL for AMD VPS configuration Corrected billing panel URLs --- packages/core/constants/vps/amd.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/core/constants/vps/amd.ts b/packages/core/constants/vps/amd.ts index 85c71aa..e5be962 100644 --- a/packages/core/constants/vps/amd.ts +++ b/packages/core/constants/vps/amd.ts @@ -20,7 +20,7 @@ export const AMD_PLANS: VpsPlanSpec[] = [ bandwidth: { amount: 1, unit: "GB" }, uplink: { amount: 1, unit: "Gbps" }, ddos: { layers: [3, 4, 7], autoOn: true }, - url: "https://billing.nodebyte.host/products/amdvps/base-rg1-2gb", + url: "https://billing.nodebyte.host/products/amdvps/2gb-r71700x", }, { id: "4GB-R71700X", @@ -138,4 +138,4 @@ export const AMD_SPECS = [ { icon: "Network" as const, label: "Network", value: "1 Gbps Uplink" }, { icon: "Shield" as const, label: "Protection", value: "Enterprise DDoS" }, { icon: "Terminal" as const, label: "Access", value: "Full Root / SSH" }, -] \ No newline at end of file +] From e68a94ebfe1c7eb381aaa6e2e8f4ba88363ac955 Mon Sep 17 00:00:00 2001 From: Ranveer Soni Date: Sat, 18 Apr 2026 12:55:28 +0530 Subject: [PATCH 4/4] 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