SUI Dashboard
Installation
📍 Install dependencies
pnpm add next-themes lucide-react
📍 Add dark-mode file
components/ui/dark-mode
"use client";
import * as React from "react";
import { Moon, Sun } from "lucide-react";
import { useTheme } from "next-themes";
import { Button } from "@/components/ui/button";
export function ModeToggle() {
const { theme, setTheme } = useTheme();
const [mounted, setMounted] = React.useState(false);
React.useEffect(() => {
setMounted(true);
}, []);
const toggleTheme = () => {
setTheme(theme === "dark" ? "light" : "dark");
};
if (!mounted) {
return null;
}
return (
<Button
variant="outline"
size="icon"
onClick={toggleTheme}
className="shrink-0 rounded-full transition"
>
{theme === "dark" ? (
<Sun className="h-[1.2rem] w-[1.2rem]" />
) : (
<Moon className="h-[1.2rem] w-[1.2rem]" />
)}
<span className="sr-only">Toggle theme</span>
</Button>
);
}
📍 Add the ThemeProvider to your root layout
app/layout.tsx
import { ThemeProvider } from "@/components/theme-provider"
export default function RootLayout({ children }: RootLayoutProps) {
return (
<>
<html lang="en" suppressHydrationWarning>
<head />
<body>
<ThemeProvider
attribute="class"
defaultTheme="system"
enableSystem
disableTransitionOnChange
>
{children}
</ThemeProvider>
</body>
</html>
</>
)
}
Happiness lies not in the mere possession of money; it lies in the joy of achievement, in the thrill of creative effort.
Suman Sharma
CEO @whysumancode.com