From e0253893ffb5a28580c19fd7962965e066fcd7a6 Mon Sep 17 00:00:00 2001 From: sagesan2580 Date: Wed, 29 Jul 2026 18:07:11 +0100 Subject: [PATCH] feat(frontend): add dark mode toggle with theme-aware styling (#235) - Add ThemeProvider (next-themes) to root layout with system default - Create ThemeToggle (sun/moon) component with hydration-safe rendering - Add toggle button to sidebar header and mobile navbar - Add missing --input-background and --switch-background to .dark CSS - Convert all 22 dashboard pages from hardcoded dark colors to theme-aware CSS variables (bg-background, text-foreground, bg-card, border-border, text-muted-foreground, bg-sidebar, etc.) - Use semantic tokens: bg-accent for active states, bg-muted for icon containers, bg-card for cards, border-border for borders - Preserve all semantic status colors (green/red/yellow/blue) --- .../src/app/components/theme-toggle.tsx | 39 +++++++++++ .../src/app/dashboard/api-keys/loading.tsx | 4 +- .../src/app/dashboard/api-keys/page.tsx | 26 ++++---- .../src/app/dashboard/audit-logs/loading.tsx | 8 +-- .../src/app/dashboard/audit-logs/page.tsx | 38 +++++------ .../src/app/dashboard/compliance/loading.tsx | 10 +-- .../src/app/dashboard/compliance/page.tsx | 22 +++---- .../src/app/dashboard/escrow/loading.tsx | 8 +-- .../src/app/dashboard/escrow/page.tsx | 34 +++++----- apps/frontend/src/app/dashboard/layout.tsx | 37 ++++++----- apps/frontend/src/app/dashboard/loading.tsx | 14 ++-- apps/frontend/src/app/dashboard/page.tsx | 66 +++++++++---------- .../src/app/dashboard/payments/loading.tsx | 8 +-- .../src/app/dashboard/payments/page.tsx | 48 +++++++------- .../app/dashboard/subscriptions/loading.tsx | 8 +-- .../src/app/dashboard/subscriptions/page.tsx | 34 +++++----- .../src/app/dashboard/tokens/loading.tsx | 6 +- .../src/app/dashboard/tokens/page.tsx | 36 +++++----- .../src/app/dashboard/treasury/loading.tsx | 12 ++-- .../src/app/dashboard/treasury/page.tsx | 44 ++++++------- .../src/app/dashboard/webhooks/loading.tsx | 8 +-- .../src/app/dashboard/webhooks/page.tsx | 36 +++++----- apps/frontend/src/app/globals.css | 2 + apps/frontend/src/app/layout.tsx | 7 +- apps/frontend/src/app/login/page.tsx | 30 ++++----- 25 files changed, 317 insertions(+), 268 deletions(-) create mode 100644 apps/frontend/src/app/components/theme-toggle.tsx diff --git a/apps/frontend/src/app/components/theme-toggle.tsx b/apps/frontend/src/app/components/theme-toggle.tsx new file mode 100644 index 0000000..babafee --- /dev/null +++ b/apps/frontend/src/app/components/theme-toggle.tsx @@ -0,0 +1,39 @@ +'use client'; + +import { useTheme } from 'next-themes'; +import { Moon, Sun } from 'lucide-react'; +import { useEffect, useState } from 'react'; + +export function ThemeToggle() { + const { theme, setTheme } = useTheme(); + const [mounted, setMounted] = useState(false); + + useEffect(() => { + setMounted(true); + }, []); + + if (!mounted) { + return ( + + ); + } + + const isDark = theme === 'dark'; + + return ( + + ); +} diff --git a/apps/frontend/src/app/dashboard/api-keys/loading.tsx b/apps/frontend/src/app/dashboard/api-keys/loading.tsx index c5b72cd..7d8d688 100644 --- a/apps/frontend/src/app/dashboard/api-keys/loading.tsx +++ b/apps/frontend/src/app/dashboard/api-keys/loading.tsx @@ -22,10 +22,10 @@ export default function ApiKeysLoading() { -
+
{Array.from({ length: 2 }).map((_, i) => ( -
+
diff --git a/apps/frontend/src/app/dashboard/api-keys/page.tsx b/apps/frontend/src/app/dashboard/api-keys/page.tsx index 343ed87..a863b80 100644 --- a/apps/frontend/src/app/dashboard/api-keys/page.tsx +++ b/apps/frontend/src/app/dashboard/api-keys/page.tsx @@ -32,7 +32,7 @@ export default function ApiKeysPage() { > API Keys -

Manage authentication credentials for API access

+

Manage authentication credentials for API access

Keep your keys secure
-
+
Never share your API keys in publicly accessible areas such as GitHub, client-side code, or logging systems.
@@ -56,14 +56,14 @@ export default function ApiKeysPage() { initial={{ opacity: 0, y: 20 }} animate={{ opacity: 1, y: 0 }} > - (
{key.name}
- {key.permissions} + {key.permissions}
-
+
{visibleKeys.has(key.id) ? key.id : "sk_" + "•".repeat(20)}
-
+
- Created: {key.created} + Created: {key.created}
- Last used: {key.lastUsed} + Last used: {key.lastUsed}
-