import { useState } from 'react' import { useTranslation } from 'react-i18next' import { motion, AnimatePresence } from 'framer-motion' import { Globe, ChevronDown } from 'lucide-react' import { languages } from '@/i18n/config' interface LanguageSwitcherProps { className?: string variant?: 'default' | 'minimal' | 'mobile' } export function LanguageSwitcher({ className = '', variant = 'default' }: LanguageSwitcherProps) { const { i18n, t } = useTranslation() const [isOpen, setIsOpen] = useState(false) const currentLang = i18n.language || 'en' const currentLanguage = languages[currentLang as keyof typeof languages] const handleLanguageChange = (langCode: string) => { i18n.changeLanguage(langCode) setIsOpen(false) // Update document direction for RTL languages const langConfig = languages[langCode as keyof typeof languages] document.documentElement.dir = langConfig.dir document.documentElement.lang = langCode // Store preference localStorage.setItem('i18nextLng', langCode) } const dropdownVariants = { hidden: { opacity: 0, scale: 0.95, y: -10 }, visible: { opacity: 1, scale: 1, y: 0, transition: { duration: 0.2, ease: 'easeOut' } }, exit: { opacity: 0, scale: 0.95, y: -10, transition: { duration: 0.15, ease: 'easeIn' } } } if (variant === 'minimal') { return (
{isOpen && ( {Object.entries(languages).map(([code, lang]) => ( ))} )}
) } if (variant === 'mobile') { return (
{isOpen && ( {Object.entries(languages).map(([code, lang]) => ( ))} )}
) } // Default variant return (
{isOpen && ( <> {/* Backdrop */}
setIsOpen(false)} /> {/* Dropdown */}
Select Language
{Object.entries(languages).map(([code, lang]) => ( ))}
)}
) } export default LanguageSwitcher