Skip to content

Commit b587403

Browse files
feat(header): simplify Dark/Light toggle in non-demo mode (#453)
- Add `iconOnly` prop to ThemeToggler component to display only sun/moon icon - Update NavigationControls to use iconOnly in non-demo mode - Keep combobox with text in demo mode (unchanged behavior) - Footer remains unaffected and keeps the combobox Co-authored-by: Ruslan Konviser <[email protected]>
1 parent 5677af7 commit b587403

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

components/navigation-controls.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ export function NavigationControls() {
1818
</div>
1919
)}
2020
{settings.languageEnabled && <LanguageSwitcher />}
21-
{settings.themeEnabled && <ThemeToggler />}
21+
{settings.themeEnabled && <ThemeToggler iconOnly={!isDemo} />}
2222
</div>
2323
);
2424
}

components/theme-toggler.tsx

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,11 @@ interface ThemeTogglerProps {
88
compact?: boolean;
99
/** Open dropdown upward instead of downward (useful for footer) */
1010
openUp?: boolean;
11+
/** Show only icon without text or dropdown (useful for header in non-demo mode) */
12+
iconOnly?: boolean;
1113
}
1214

13-
export function ThemeToggler({ compact = false, openUp = false }: ThemeTogglerProps) {
15+
export function ThemeToggler({ compact = false, openUp = false, iconOnly = false }: ThemeTogglerProps) {
1416
const { theme, setTheme } = useTheme();
1517
const [mounted, setMounted] = useState(false);
1618
const [isOpen, setIsOpen] = useState(false);
@@ -57,6 +59,22 @@ export function ThemeToggler({ compact = false, openUp = false }: ThemeTogglerPr
5759
return null;
5860
}
5961

62+
if (iconOnly) {
63+
return (
64+
<button
65+
onClick={() => setTheme(theme === "dark" ? "light" : "dark")}
66+
className="relative inline-flex items-center justify-center h-9 w-9 rounded-lg transition-all duration-200 hover:bg-gray-100 dark:hover:bg-gray-800 focus:outline-none focus:ring-2 focus:ring-theme-primary focus:ring-offset-2 text-gray-700 dark:text-gray-300"
67+
aria-label={`Switch to ${theme === "dark" ? "light" : "dark"} mode`}
68+
>
69+
{theme === "dark" ? (
70+
<Sun className="h-5 w-5 text-yellow-500 dark:text-yellow-400" />
71+
) : (
72+
<Moon className="h-5 w-5 text-theme-primary" />
73+
)}
74+
</button>
75+
);
76+
}
77+
6078
if (compact) {
6179
return (
6280
<button

0 commit comments

Comments
 (0)