import Popup, { customElement, html } from "@ff/ui/Popup"; import CVLanguageManager from "../../components/CVLanguageManager"; import { ELightType } from "../../components/lights/CVLight"; import { focusTrap, getFocusableElements } from "../../utils/focusHelpers"; @customElement("sv-create-light-menu") export default class CreateLightMenu extends Popup { protected language: CVLanguageManager = null; protected allowSunLight: boolean = true; protected lightType: ELightType = ELightType.directional; protected name: string = ELightType[this.lightType]; protected errorString: string = ""; static show(parent: HTMLElement, language: CVLanguageManager): Promise<[ELightType, string]> { const menu = new CreateLightMenu(language); parent.appendChild(menu); return new Promise((resolve, reject) => { menu.on("confirm", () => resolve([menu.lightType, menu.name])); menu.on("close", () => {}); }); } constructor(language: CVLanguageManager) { super(); this.language = language; this.position = "center"; this.modal = true; } close() { this.dispatchEvent(new CustomEvent("close")); this.remove(); } confirm() { if (this.lightType === null || this.name.trim() === "") { this.errorString = this.language.getUILocalizedString("Please select a light type and enter a name."); this.requestUpdate(); } else { this.dispatchEvent(new CustomEvent("confirm")); this.remove(); } } protected firstConnected() { super.firstConnected(); this.classList.add("sv-option-menu", "sv-light-menu"); } protected renderLightTypeEntry(lightType: ELightType, index: number) { return html`