From 145b2e5f525b0e6e1c5c876fae4a4618d7d79288 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sun, 18 Jan 2026 19:03:21 +0000 Subject: [PATCH] fix: menu preview label colors --- CHANGELOG.md | 2 + .../Clawdbot/SessionMenuPreviewView.swift | 39 ++++++++++++------- 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 93ea9893f..79d28fd83 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,8 @@ Docs: https://docs.clawd.bot ### Fixes - Configure: hide OpenRouter auto routing model from the model picker. (#1182) — thanks @zerone0x. +- macOS: load menu session previews asynchronously so items populate while the menu is open. +- macOS: use label colors for session preview text so previews render in menu subviews. ## 2026.1.18-4 diff --git a/apps/macos/Sources/Clawdbot/SessionMenuPreviewView.swift b/apps/macos/Sources/Clawdbot/SessionMenuPreviewView.swift index 497e54a5c..8fd825b7d 100644 --- a/apps/macos/Sources/Clawdbot/SessionMenuPreviewView.swift +++ b/apps/macos/Sources/Clawdbot/SessionMenuPreviewView.swift @@ -86,11 +86,17 @@ struct SessionMenuPreviewView: View { } private var primaryColor: Color { - self.isHighlighted ? Color(nsColor: .selectedMenuItemTextColor) : .primary + if self.isHighlighted { + return Color(nsColor: .selectedMenuItemTextColor) + } + return Color(nsColor: .labelColor) } private var secondaryColor: Color { - self.isHighlighted ? Color(nsColor: .selectedMenuItemTextColor).opacity(0.85) : .secondary + if self.isHighlighted { + return Color(nsColor: .selectedMenuItemTextColor).opacity(0.85) + } + return Color(nsColor: .secondaryLabelColor) } var body: some View { @@ -104,21 +110,19 @@ struct SessionMenuPreviewView: View { switch self.status { case .loading: - Text("Loading preview…") - .font(.caption) - .foregroundStyle(self.secondaryColor) + self.placeholder("Loading preview…") case .empty: - Text("No recent messages") - .font(.caption) - .foregroundStyle(self.secondaryColor) + self.placeholder("No recent messages") case let .error(message): - Text(message) - .font(.caption) - .foregroundStyle(self.secondaryColor) + self.placeholder(message) case .ready: - VStack(alignment: .leading, spacing: 6) { - ForEach(self.items) { item in - self.previewRow(item) + if self.items.isEmpty { + self.placeholder("No recent messages") + } else { + VStack(alignment: .leading, spacing: 6) { + ForEach(self.items) { item in + self.previewRow(item) + } } } } @@ -158,6 +162,13 @@ struct SessionMenuPreviewView: View { } } + @ViewBuilder + private func placeholder(_ text: String) -> some View { + Text(text) + .font(.caption) + .foregroundStyle(self.primaryColor) + } + } enum SessionMenuPreviewLoader {