+
+ Select which sessions should receive broadcast input:
+
+ ${listHtml}
+
+
+ `;
+
+ backdrop.appendChild(modal);
+ document.body.appendChild(backdrop);
+ requestAnimationFrame(() => {
+ backdrop.classList.add("is-visible");
+ modal.classList.add("is-visible");
+ });
+
+ const close = () => {
+ backdrop.classList.remove("is-visible");
+ modal.classList.remove("is-visible");
+ setTimeout(() => backdrop.remove(), 200);
+ };
+
+ modal.querySelector(".modal-close").addEventListener("click", close);
+ modal.querySelector(".broadcast-cancel").addEventListener("click", close);
+ backdrop.addEventListener("click", (e) => { if (e.target === backdrop) close(); });
+
+ modal.querySelector(".broadcast-all").addEventListener("click", () => {
+ modal.querySelectorAll(".broadcast-target-check").forEach((cb) => { cb.checked = true; });
+ });
+
+ modal.querySelector(".broadcast-apply").addEventListener("click", () => {
+ const checks = modal.querySelectorAll(".broadcast-target-check");
+ const selected = new Set();
+ checks.forEach((cb) => {
+ if (cb.checked) selected.add(cb.dataset.sessionId);
+ });
+
+ if (selected.size === 0) {
+ this.notifications.error("Select at least one target session");
+ return;
+ }
+
+ // If all are selected, use null (broadcast to all)
+ this.state.broadcastTargets = selected.size === sessions.length ? null : selected;
+ if (!this.state.broadcastMode) {
+ this.toggleBroadcast();
+ } else {
+ const targetLabel = selected.size === sessions.length ? "all sessions" : selected.size + " sessions";
+ this.notifications.info("Broadcasting to " + targetLabel);
+ }
+ close();
+ });
+ }
+
// ── Connection lifecycle ─────────────────────────────────────────
/**
@@ -873,6 +979,7 @@
updateStatusBar() {
const connEl = document.getElementById("status-connection");
const countEl = document.getElementById("status-session-count");
+ const latencyEl = document.getElementById("status-latency");
const vaultEl = document.getElementById("status-vault");
const updateEl = document.getElementById("status-update");
if (!connEl) return;
@@ -892,6 +999,16 @@
'No bookmarks yet. Navigate to a directory and click "Bookmark Current".
';
+ } else {
+ for (var i = 0; i < bookmarks.length; i++) {
+ listHtml += '