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 */}
{Object.entries(languages).map(([code, lang]) => (
))}
>
)}
)
}
export default LanguageSwitcher