From ffd094d631ae2e6987680b5b5ae1b6d9fd02ef80 Mon Sep 17 00:00:00 2001 From: Arne Baeumler Date: Sat, 13 Jun 2026 08:49:33 +0200 Subject: [PATCH] feat: add themed sidebar logo --- src/client/app.ts | 6 ++++++ src/server/app-assets.ts | 14 +++++++++++++- src/server/page-template.ts | 8 ++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/client/app.ts b/src/client/app.ts index 64dba19..275e6bd 100644 --- a/src/client/app.ts +++ b/src/client/app.ts @@ -87,6 +87,7 @@ const timelineSelection = mustGet("timeline-selection"); const timelineBrush = mustGet("timeline-brush"); const themeToggle = mustGet("theme-toggle"); const themeToggleIcon = mustGet("theme-toggle-icon"); +const panelLogo = mustGet("panel-logo"); const sidebarCollapseButton = mustGet("sidebar-collapse"); const sidebarCollapseIcon = mustGet("sidebar-collapse-icon"); const timelineCollapseButton = mustGet("timeline-collapse"); @@ -203,6 +204,10 @@ async function createThumbnailObjectUrl(blob) { return URL.createObjectURL(thumbnailBlob); } +function setBrandLogo(theme) { + panelLogo.src = theme === "dark" ? "/assets/logo-dark.svg" : "/assets/logo-light.svg"; +} + function setTheme(theme, persist = true) { const resolvedTheme = theme === "light" ? "light" : "dark"; document.body.dataset.theme = resolvedTheme; @@ -210,6 +215,7 @@ function setTheme(theme, persist = true) { localStorage.setItem("theme", resolvedTheme); } setMapTheme(resolvedTheme); + setBrandLogo(resolvedTheme); if (resolvedTheme === "dark") { themeToggle.setAttribute("aria-label", "Switch to light mode"); diff --git a/src/server/app-assets.ts b/src/server/app-assets.ts index 6967ea1..655b644 100644 --- a/src/server/app-assets.ts +++ b/src/server/app-assets.ts @@ -215,6 +215,10 @@ export const APP_STYLES = ` :root { display: none; } + aside.sidebar-collapsed .panel-logo { + display: none; + } + .card { min-width: 0; padding: 10px; @@ -274,10 +278,18 @@ export const APP_STYLES = ` :root { .panel-toolbar { display: flex; justify-content: space-between; - align-items: center; + align-items: flex-start; gap: 8px; } + .panel-logo { + display: block; + width: min(150px, calc(100% - 40px)); + height: auto; + object-fit: contain; + flex: 0 1 auto; + } + .theme-toggle { width: 40px; height: 40px; diff --git a/src/server/page-template.ts b/src/server/page-template.ts index 88e4938..a8a10c4 100644 --- a/src/server/page-template.ts +++ b/src/server/page-template.ts @@ -49,6 +49,14 @@ ${APP_STYLES} +