diff --git a/web/static/panel.js b/web/static/panel.js index c6b0279..39897c5 100644 --- a/web/static/panel.js +++ b/web/static/panel.js @@ -6,6 +6,45 @@ function qs(selector, root = document) { return root.querySelector(selector); } function qsa(selector, root = document) { return Array.from(root.querySelectorAll(selector)); } + function ensureThemeStyles() { + if (qs('link[data-virtuality-themes="1"]')) return; + const link = document.createElement('link'); + link.rel = 'stylesheet'; + link.href = '/static/themes.css'; + link.dataset.virtualityThemes = '1'; + document.head.appendChild(link); + } + + function getTheme() { + return localStorage.getItem('virtualityTheme') || 'neon'; + } + + function applyTheme(theme) { + const selected = theme === 'macos' ? 'macos' : 'neon'; + document.documentElement.dataset.theme = selected; + localStorage.setItem('virtualityTheme', selected); + qsa('[data-theme-select]').forEach((btn) => { + btn.classList.toggle('is-active', btn.dataset.themeSelect === selected); + }); + } + + function wireThemeSwitcher() { + ensureThemeStyles(); + const nav = qs('.v-nav'); + if (!nav || qs('.theme-switcher')) { + applyTheme(getTheme()); + return; + } + const switcher = document.createElement('div'); + switcher.className = 'theme-switcher'; + switcher.innerHTML = '