"use client"; import { Moon, Sun } from "lucide-react"; import { useTheme } from "next-themes"; import { useEffect, useState } from "react"; import { useSound } from "@/components/sound-provider"; import { Button, type ButtonProps } from "@/components/ui/button"; import { toast } from "@/lib/toast"; import { cn } from "@/lib/utils"; type ThemeToggleProps = { ariaLabel?: string; label?: string; lightToastLabel?: string; darkToastLabel?: string; variant?: ButtonProps["variant"]; className?: string; iconClassName?: string; }; export function ThemeToggle({ ariaLabel = "Toggle theme", label, lightToastLabel = "Light mode enabled", darkToastLabel = "Dark mode enabled", variant = "outline", className, iconClassName, }: ThemeToggleProps) { const { setTheme, theme, resolvedTheme } = useTheme(); const { playSound } = useSound(); const [mounted, setMounted] = useState(false); useEffect(() => { setMounted(true); }, []); if (!mounted) { return ( ); } const activeTheme = theme === "system" ? resolvedTheme : theme; const isDark = activeTheme === "dark"; const handleThemeToggle = () => { const nextTheme = isDark ? "light" : "dark"; setTheme(nextTheme); playSound(nextTheme === "dark" ? "/audio/dark.mp3" : "/audio/light.mp3"); toast(nextTheme === "dark" ? darkToastLabel : lightToastLabel); }; return ( ); }