From ed9bbfe60aa7051a90b89b45a5fb801b8a090060 Mon Sep 17 00:00:00 2001 From: AI Assistant Date: Fri, 27 Feb 2026 12:36:39 +0200 Subject: [PATCH] feat: redesign sidebar logos (wider, theme-aware) + animated sun/moon theme toggle --- src/shared/components/common/theme-toggle.tsx | 100 ++++++++++++++++++ src/shared/components/layout/header.tsx | 28 +---- src/shared/components/layout/sidebar.tsx | 32 +++--- 3 files changed, 123 insertions(+), 37 deletions(-) create mode 100644 src/shared/components/common/theme-toggle.tsx diff --git a/src/shared/components/common/theme-toggle.tsx b/src/shared/components/common/theme-toggle.tsx new file mode 100644 index 0000000..e7a44fe --- /dev/null +++ b/src/shared/components/common/theme-toggle.tsx @@ -0,0 +1,100 @@ +"use client"; + +import { useTheme } from "next-themes"; +import { useEffect, useState } from "react"; +import { cn } from "@/shared/lib/utils"; + +export function ThemeToggle() { + const { resolvedTheme, setTheme } = useTheme(); + const [mounted, setMounted] = useState(false); + + useEffect(() => setMounted(true), []); + + if (!mounted) { + // Prevent hydration mismatch — render placeholder + return
; + } + + const isDark = resolvedTheme === "dark"; + + return ( + + ); +} diff --git a/src/shared/components/layout/header.tsx b/src/shared/components/layout/header.tsx index 732180d..9473164 100644 --- a/src/shared/components/layout/header.tsx +++ b/src/shared/components/layout/header.tsx @@ -1,9 +1,6 @@ "use client"; -import { useTheme } from "next-themes"; import { - Moon, - Sun, PanelLeft, User as UserIcon, LogOut, @@ -20,13 +17,13 @@ import { } from "@/shared/components/ui/dropdown-menu"; import { useAuth } from "@/core/auth"; import { signIn, signOut } from "next-auth/react"; +import { ThemeToggle } from "@/shared/components/common/theme-toggle"; interface HeaderProps { onToggleSidebar?: () => void; } export function Header({ onToggleSidebar }: HeaderProps) { - const { setTheme } = useTheme(); const { user, isAuthenticated } = useAuth(); return ( @@ -42,27 +39,8 @@ export function Header({ onToggleSidebar }: HeaderProps) {
-
- - - - - - setTheme("light")}> - Luminos - - setTheme("dark")}> - Întunecat - - setTheme("system")}> - Sistem - - - +
+ diff --git a/src/shared/components/layout/sidebar.tsx b/src/shared/components/layout/sidebar.tsx index 57590d4..8630786 100644 --- a/src/shared/components/layout/sidebar.tsx +++ b/src/shared/components/layout/sidebar.tsx @@ -130,7 +130,7 @@ function SidebarLogos() { ); return ( -
+
{LOGO_COMPANIES.map((companyId, index) => { const company = COMPANIES[companyId]; const logoSrc = @@ -159,9 +159,9 @@ function SidebarLogos() { {company.shortName} @@ -170,7 +170,7 @@ function SidebarLogos() { {/* Confetti burst on secret combo */} {showConfetti && ( -
+
{["🎉", "✨", "🏗️", "✨", "🎉"].map((emoji, i) => ( - - - ArchiTools - +
+ + + + + ArchiTools + +