'use client' import * as React from 'react' import { Moon, Sun, Palette, Check } from 'lucide-react' import { useTheme } from 'next-themes' import { Button } from '@/components/ui/button' import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu' import { colorPalettes, type ColorPalette } from '@/lib/themes' export function ThemeSwitcher() { const { theme, setTheme } = useTheme() const [selectedPalette, setSelectedPalette] = React.useState('awesome') const [mounted, setMounted] = React.useState(false) React.useEffect(() => { setMounted(true) // Load saved palette from localStorage const savedPalette = localStorage.getItem('color-palette') if (savedPalette) { setSelectedPalette(savedPalette) applyPalette(colorPalettes.find(p => p.id === savedPalette) || colorPalettes[0]) } }, []) const applyPalette = (palette: ColorPalette) => { const root = document.documentElement // Apply CSS custom properties root.style.setProperty('--color-primary', palette.colors.primary) root.style.setProperty('--color-primary-light', palette.colors.primaryLight) root.style.setProperty('--color-primary-dark', palette.colors.primaryDark) root.style.setProperty('--color-secondary', palette.colors.secondary) root.style.setProperty('--color-secondary-light', palette.colors.secondaryLight) root.style.setProperty('--color-secondary-dark', palette.colors.secondaryDark) root.style.setProperty('--color-accent', palette.colors.accent) root.style.setProperty('--color-accent-light', palette.colors.accentLight) root.style.setProperty('--color-accent-dark', palette.colors.accentDark) root.style.setProperty('--gradient-awesome', palette.gradient) // Update awesome-specific colors root.style.setProperty('--awesome-purple', palette.colors.primary) root.style.setProperty('--awesome-pink', palette.colors.secondary) root.style.setProperty('--awesome-gold', palette.colors.accent) // Save to localStorage localStorage.setItem('color-palette', palette.id) setSelectedPalette(palette.id) } const handlePaletteChange = (palette: ColorPalette) => { applyPalette(palette) } if (!mounted) { return null } const isDark = theme === 'dark' return ( Theme Settings {/* Mode Selection */}
MODE
{/* Palette Selection */}
COLOR PALETTE
{colorPalettes.map((palette) => ( ))}
{/* Footer */}
Choose your awesome style! 💜💗💛
) }