import { useEffect, useState } from 'react' import { createPortal } from 'react-dom' import { Sparkles, X } from 'lucide-react' import { useLocale } from '@meshkee/dashboard-ui' import { useT } from '../i18n/useT' import type { TranslationLocale } from '../types/translation' import modalStyles from './CategoryModal.module.css' import { LanguageLocaleOptions } from './LanguageLocaleOptions' import aiStyles from '../styles/ai.module.css' import styles from './TranslateAllLanguageModal.module.css' const ANIMATION_MS = 220 interface TranslateAllLanguageModalProps { open: boolean title: string subtitle: string running: boolean runLabel?: string runningLabel?: string onClose: () => void onConfirm: (locale: TranslationLocale) => void } export function TranslateAllLanguageModal({ open, title, subtitle, running, runLabel, runningLabel, onClose, onConfirm, }: TranslateAllLanguageModalProps) { const t = useT() const { locale: uiLocale } = useLocale() const isFa = uiLocale === 'fa' const [mounted, setMounted] = useState(open) const [closing, setClosing] = useState(false) const [locale, setLocale] = useState('en') useEffect(() => { if (open) { setMounted(true) setClosing(false) setLocale('en') } else if (mounted) { setClosing(true) const timer = setTimeout(() => { setMounted(false) setClosing(false) }, ANIMATION_MS) return () => clearTimeout(timer) } }, [open, mounted]) useEffect(() => { if (!mounted || closing || running) return const onKey = (e: KeyboardEvent) => { if (e.key === 'Escape') onClose() } document.addEventListener('keydown', onKey) return () => document.removeEventListener('keydown', onKey) }, [mounted, closing, running, onClose]) if (!mounted) return null return createPortal(
!running && onClose()} >
e.stopPropagation()} role="dialog" aria-modal="true" aria-labelledby="translate-all-language-title" lang={isFa ? 'fa' : 'en'} dir={isFa ? 'rtl' : 'ltr'} >

{title}

{subtitle}

, document.body, ) }