diff --git a/frontend/packages/agent/src/agent.css b/frontend/packages/agent/src/agent.css index dde06fa6..8684cbad 100644 --- a/frontend/packages/agent/src/agent.css +++ b/frontend/packages/agent/src/agent.css @@ -1000,7 +1000,10 @@ pre.diff { font-family: inherit; cursor: pointer; } -.window-tabs button.active { +/* Active window: createTabStrip (@hive/shared/tabs.js) toggles + `.hive-tab--active`. The window selector keeps its own pill look rather + than the shared `.hive-tab` text-tab base. */ +.window-tabs button.hive-tab--active { background: var(--purple-dim); border-color: var(--purple); color: var(--purple); diff --git a/frontend/packages/agent/src/stats.html b/frontend/packages/agent/src/stats.html index 8ed0a608..adecbff1 100644 --- a/frontend/packages/agent/src/stats.html +++ b/frontend/packages/agent/src/stats.html @@ -17,13 +17,13 @@

◆ … ◆

-
- - - - - - +
+ + + + + +
diff --git a/frontend/packages/agent/src/stats.js b/frontend/packages/agent/src/stats.js index b2560e26..93eeb897 100644 --- a/frontend/packages/agent/src/stats.js +++ b/frontend/packages/agent/src/stats.js @@ -3,6 +3,7 @@ // when the operator clicks a window tab. import Chart from 'chart.js/auto'; +import { createTabStrip } from '@hive/shared/tabs.js'; // Expose for the IIFE below — pre-split this was a window global from // the jsDelivr CDN script tag. esbuild now bundles chart.js into @@ -413,20 +414,15 @@ window.Chart = Chart; } catch (_) { /* non-fatal */ } } - function bindTabs() { - const tabs = document.getElementById('window-tabs'); - tabs.addEventListener('click', (ev) => { - const btn = ev.target.closest('button[data-w]'); - if (!btn) return; - currentWindow = btn.dataset.w; - for (const b of tabs.querySelectorAll('button')) b.classList.toggle('active', b === btn); - loadStats(); - }); - } - document.addEventListener('DOMContentLoaded', () => { - bindTabs(); loadIdentity(); - loadStats(); + // The shared hash-routed tab strip drives the stat-window selector, + // making it deep-linkable (#1h / #24h / …). onShow updates the + // window + reloads; the strip's initial show fires onShow once, so + // there's no separate loadStats() call here (avoids a double fetch). + createTabStrip(document.getElementById('window-tabs'), { + defaultId: currentWindow, + onShow: (w) => { currentWindow = w; loadStats(); }, + }); }); })();