import { LitElement, css, html } from "lit"; import { customElement, state } from "lit/decorators.js"; import { renderPlayerFlag } from "../core/CustomFlag"; const flagKey = "flag"; @customElement("flag-input") export class FlagInput extends LitElement { @state() public flag = ""; static styles = css` @media (max-width: 768px) { .flag-modal { width: 80vw; } .dropdown-item { width: calc(100% / 3 - 15px); } } `; public getCurrentFlag(): string { return this.flag; } private getStoredFlag(): string { const storedFlag = localStorage.getItem(flagKey); if (storedFlag) { return storedFlag; } return ""; } private dispatchFlagEvent() { this.dispatchEvent( new CustomEvent("flag-change", { detail: { flag: this.flag }, bubbles: true, composed: true, }), ); } connectedCallback() { super.connectedCallback(); this.flag = this.getStoredFlag(); this.dispatchFlagEvent(); } createRenderRoot() { return this; } render() { return html`
`; } updated() { const preview = this.renderRoot.querySelector( "#flag-preview", ) as HTMLElement; if (!preview) return; preview.innerHTML = ""; if (this.flag?.startsWith("!")) { renderPlayerFlag(this.flag, preview); } else { const img = document.createElement("img"); img.src = this.flag ? `/flags/${this.flag}.svg` : `/flags/xx.svg`; img.style.width = "100%"; img.style.height = "100%"; img.style.objectFit = "contain"; img.onerror = () => { if (!img.src.endsWith("/flags/xx.svg")) { img.src = "/flags/xx.svg"; } }; preview.appendChild(img); } } }