import { on } from "../lib/bus.js"; class OpsShell extends HTMLElement { constructor() { super(); this.attachShadow({ mode: "open" }); this._currentView = "chat"; this.shadowRoot.innerHTML = `

Bot Ops Console

SSE: connecting…
`; } connectedCallback() { this._unsub = on("sse:status", (s) => { const el = this.shadowRoot.getElementById("sseStatus"); el.textContent = s.ok ? "SSE: connected" : "SSE: disconnected (retrying…)"; }); // Listen for view switch requests from other components this._unsubSwitch = on("ui:switchView", ({ view }) => { if (view) this.setView(view); }); // Navigation const navBtns = this.shadowRoot.querySelectorAll(".nav-btn"); for (const btn of navBtns) { btn.onclick = () => this.setView(btn.dataset.view); } } disconnectedCallback() { this._unsub?.(); this._unsubSwitch?.(); } setView(viewName) { this._currentView = viewName; // Update nav buttons const navBtns = this.shadowRoot.querySelectorAll(".nav-btn"); for (const btn of navBtns) { btn.classList.toggle("active", btn.dataset.view === viewName); } // Update views const views = this.shadowRoot.querySelectorAll(".view"); for (const view of views) { const isActive = view.id === `view${viewName.charAt(0).toUpperCase() + viewName.slice(1)}`; view.classList.toggle("active", isActive); } } } customElements.define("ops-shell", OpsShell);