"use client"; import React, { useState, useEffect } from "react"; import { motion } from "framer-motion"; import { Sun, Moon, Cloud, Star } from "lucide-react"; import { cn } from "../lib/utils"; interface CoolThemeToggleProps { className?: string; size?: "sm" | "md" | "lg"; } export function CoolThemeToggle({ className, size = "md" }: CoolThemeToggleProps) { const [theme, setTheme] = useState<"light" | "dark">("light"); const [mounted, setMounted] = useState(false); useEffect(() => { setMounted(true); const isDark = document.documentElement.classList.contains("dark"); setTheme(isDark ? "dark" : "light"); const observer = new MutationObserver(() => { setTheme(document.documentElement.classList.contains("dark") ? "dark" : "light"); }); observer.observe(document.documentElement, { attributes: true, attributeFilter: ["class"] }); return () => observer.disconnect(); }, []); const toggleTheme = () => { const newTheme = theme === "light" ? "dark" : "light"; setTheme(newTheme); if (newTheme === "dark") { document.documentElement.classList.add("dark"); localStorage.setItem("theme", "dark"); } else { document.documentElement.classList.remove("dark"); localStorage.setItem("theme", "light"); } }; if (!mounted) return
; const sizes = { sm: { button: "w-12 h-6", thumb: "w-4 h-4", icon: "w-2.5 h-2.5", padding: "p-1", translateX: "translateX(24px)", cloudSize: "w-3 h-3" }, md: { button: "w-16 h-8", thumb: "w-6 h-6", icon: "w-4 h-4", padding: "p-1", translateX: "translateX(32px)", cloudSize: "w-5 h-5" }, lg: { button: "w-20 h-10", thumb: "w-8 h-8", icon: "w-5 h-5", padding: "p-1", translateX: "translateX(40px)", cloudSize: "w-6 h-6" } }; const currentSize = sizes[size]; return ( ); }