import { html } from "lit"; import { customElement, property } from "lit/decorators.js"; import { translateText } from "../client/Utils"; import "./components/baseComponents/Modal"; import { BaseModal } from "./components/BaseModal"; import { modalHeader } from "./components/ui/ModalHeader"; interface LanguageOption { code: string; svg: string; native: string; en: string; } @customElement("language-modal") export class LanguageModal extends BaseModal { @property({ type: Array }) languageList: LanguageOption[] = []; @property({ type: String }) currentLang = "en"; private selectLanguage = (lang: string) => { this.dispatchEvent( new CustomEvent("language-selected", { detail: { lang }, bubbles: true, composed: true, }), ); this.close(); }; render() { const content = html`
${modalHeader({ title: translateText("select_lang.title"), onBack: this.close, ariaLabel: translateText("common.back"), })}
${this.languageList.map((lang) => { const isActive = this.currentLang === lang.code; const isDebug = lang.code === "debug"; let buttonClasses = "relative group rounded-xl border transition-all duration-200 flex items-center p-3 gap-3 w-full cursor-pointer"; if (isDebug) { buttonClasses += " animate-pulse font-bold text-white border-2 border-dashed border-cyan-400 shadow-[0_0_15px_rgba(34,211,238,0.2)] bg-gradient-to-r from-red-600 via-yellow-600 via-green-600 via-blue-600 to-purple-600"; } else if (isActive) { buttonClasses += " bg-blue-500/20 border-blue-500/50"; } else { buttonClasses += " bg-white/5 border-white/10 hover:bg-white/10 hover:border-white/20"; } return html` `; })}
`; if (this.inline) { return content; } return html` ${content} `; } }