mirror of
https://github.com/koala73/worldmonitor.git
synced 2026-04-25 17:14:57 +02:00
feat(settings): redesign settings window with VS Code-style sidebar layout (#461)
Replace the 4-tab horizontal layout with a sidebar + content panel design: - Overview section with SVG progress ring showing feature readiness - 5 logical category sections (AI, Economy, Markets, Security, Tracking) - Debug & Logs section with diagnostics - Expandable feature cards with toggle switches and status pills - Debounced search with <mark> highlighting across all features - Buffered secret management extracted to SettingsManager service - Shared constants (HUMAN_LABELS, SIGNUP_URLS, CATEGORIES) extracted - Ollama model fetching extracted to standalone service - ARIA roles for sidebar navigation accessibility - Content area fade transitions between sections - Responsive layout at 860px breakpoint Removed deprecated WorldMonitorTab (zero imports, functionality in Overview). RuntimeConfigPanel alert mode in main window unchanged.
This commit is contained in:
@@ -5,55 +5,28 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>World Monitor Settings</title>
|
||||
<script>(function(){try{var t=localStorage.getItem('worldmonitor-theme');if(t==='light')document.documentElement.dataset.theme='light';}catch(e){}document.documentElement.classList.add('no-transition');})()</script>
|
||||
<style>.settings-tab-panel{display:none}.settings-tab-panel.active{display:block}.settings-shell{height:100vh;display:flex;flex-direction:column}.settings-tab-panels{flex:1;min-height:0;overflow-y:auto;padding:20px 24px}.settings-footer{display:flex;justify-content:flex-end;gap:10px;padding:12px 24px;border-top:1px solid rgba(255,255,255,0.08)}</style>
|
||||
<style>.settings-shell{height:100vh;display:flex;flex-direction:column}.settings-main{display:flex;flex:1;min-height:0}.settings-sidebar{width:220px;flex-shrink:0;border-right:1px solid rgba(255,255,255,0.08);display:flex;flex-direction:column}.settings-content{flex:1;overflow-y:auto;padding:20px 24px}</style>
|
||||
</head>
|
||||
<body style="background:#1a1c1e;color:#e8eaed;margin:0">
|
||||
<div class="settings-shell">
|
||||
<div class="settings-tabs" role="tablist">
|
||||
<button class="settings-tab active" role="tab" aria-selected="true" aria-controls="tabPanelWorldMonitor" data-tab="worldmonitor">World Monitor</button>
|
||||
<button class="settings-tab" role="tab" aria-selected="false" aria-controls="tabPanelLLMs" data-tab="llms">LLMs</button>
|
||||
<button class="settings-tab" role="tab" aria-selected="false" aria-controls="tabPanelKeys" data-tab="keys">API Keys</button>
|
||||
<button class="settings-tab" role="tab" aria-selected="false" aria-controls="tabPanelDebug" data-tab="debug">Debug & Logs</button>
|
||||
<div class="settings-header">
|
||||
<svg class="settings-header-icon" viewBox="0 0 24 24" width="20" height="20"><path fill="currentColor" d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 17.93c-3.95-.49-7-3.85-7-7.93 0-.62.08-1.21.21-1.79L9 15v1c0 1.1.9 2 2 2v1.93zm6.9-2.54c-.26-.81-1-1.39-1.9-1.39h-1v-3c0-.55-.45-1-1-1H8v-2h2c.55 0 1-.45 1-1V7h2c1.1 0 2-.9 2-2v-.41c2.93 1.19 5 4.06 5 7.41 0 2.08-.8 3.97-2.1 5.39z"/></svg>
|
||||
<span class="settings-header-title">World Monitor Settings</span>
|
||||
<span class="settings-header-badge" id="versionBadge"></span>
|
||||
</div>
|
||||
<p id="settingsActionStatus" class="settings-action-status" aria-live="polite"></p>
|
||||
<div class="settings-tab-panels">
|
||||
<div id="tabPanelWorldMonitor" class="settings-tab-panel active" role="tabpanel">
|
||||
<main id="worldmonitorApp" class="settings-content"></main>
|
||||
</div>
|
||||
<div id="tabPanelLLMs" class="settings-tab-panel" role="tabpanel">
|
||||
<main id="llmApp" class="settings-content"><div style="display:flex;align-items:center;justify-content:center;padding:60px 0;color:#9aa0a6;font-size:14px;gap:10px"><svg width="20" height="20" viewBox="0 0 24 24" style="animation:spin 1s linear infinite"><style>@keyframes spin{to{transform:rotate(360deg)}}</style><circle cx="12" cy="12" r="10" stroke="currentColor" stroke-width="2" fill="none" stroke-dasharray="31 31"/></svg>Loading...</div></main>
|
||||
</div>
|
||||
<div id="tabPanelKeys" class="settings-tab-panel" role="tabpanel">
|
||||
<main id="apiKeysApp" class="settings-content"><div style="display:flex;align-items:center;justify-content:center;padding:60px 0;color:#9aa0a6;font-size:14px;gap:10px"><svg width="20" height="20" viewBox="0 0 24 24" style="animation:spin 1s linear infinite"><style>@keyframes spin{to{transform:rotate(360deg)}}</style><circle cx="12" cy="12" r="10" stroke="currentColor" stroke-width="2" fill="none" stroke-dasharray="31 31"/></svg>Loading...</div></main>
|
||||
</div>
|
||||
<div id="tabPanelDebug" class="settings-tab-panel" role="tabpanel">
|
||||
<div class="debug-actions">
|
||||
<button id="openLogsBtn" type="button">Open Logs Folder</button>
|
||||
<button id="openSidecarLogBtn" type="button">Open API Log</button>
|
||||
<div class="settings-main">
|
||||
<div class="settings-sidebar">
|
||||
<div class="settings-sidebar-search">
|
||||
<input id="settingsSearch" type="text" placeholder="Search settings..." autocomplete="off" />
|
||||
</div>
|
||||
<section class="settings-diagnostics" id="diagnosticsSection">
|
||||
<header class="diag-header">
|
||||
<h2>Diagnostics</h2>
|
||||
<div class="diag-toggles">
|
||||
<label><input type="checkbox" id="verboseApiLog"> Verbose Sidecar Log</label>
|
||||
<label><input type="checkbox" id="fetchDebugLog"> Frontend Fetch Debug</label>
|
||||
</div>
|
||||
</header>
|
||||
<div class="diag-traffic-bar">
|
||||
<h3>API Traffic <span id="trafficCount"></span></h3>
|
||||
<div class="diag-traffic-controls">
|
||||
<label><input type="checkbox" id="autoRefreshLog" checked> Auto</label>
|
||||
<button id="refreshLogBtn" type="button">Refresh</button>
|
||||
<button id="clearLogBtn" type="button">Clear</button>
|
||||
</div>
|
||||
</div>
|
||||
<div id="trafficLog" class="diag-traffic-log"></div>
|
||||
</section>
|
||||
<nav class="settings-sidebar-nav" id="sidebarNav" role="tablist" aria-label="Settings sections"></nav>
|
||||
</div>
|
||||
<div class="settings-content" id="contentArea" role="tabpanel"></div>
|
||||
</div>
|
||||
<footer class="settings-footer">
|
||||
<p id="settingsActionStatus" class="settings-action-status" aria-live="polite"></p>
|
||||
<button id="cancelBtn" type="button" class="settings-btn settings-btn-secondary">Cancel</button>
|
||||
<button id="okBtn" type="button" class="settings-btn settings-btn-primary">OK</button>
|
||||
<button id="okBtn" type="button" class="settings-btn settings-btn-primary">Save & Close</button>
|
||||
</footer>
|
||||
</div>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user