import { Communicator } from "../../communication"; import "./popup.scss"; const con = new Communicator(); class ExtensionToggle extends HTMLButtonElement { isON: boolean = false; textContent: string = "OFF"; public set on(v: boolean) { if (this.isON == v) { return; } this.isON = v; this.render(); } public get on(): boolean { return this.isON; } public render() { this.textContent = this.on ? "ON" : "OFF"; } constructor() { super(); this.addEventListener("click", () => { this.on = !this.on; const toggleEvent = new CustomEvent("extensionToggled", { detail: this.on, }); this.dispatchEvent(toggleEvent); }); } } customElements.define("extension-toggle", ExtensionToggle, { extends: "button", }); const toggle = <ExtensionToggle>( document.querySelector("button[is=extension-toggle]") ); toggle.addEventListener("extensionToggled", (e: CustomEvent) => Communicator.setEnabled(e.detail) ); con.setEnabledCallback = (v) => (toggle.on = v); Communicator.getEnabled().then((v) => (toggle.on = v));