diff --git a/clients/macos/vellum-assistant/Features/Settings/HeartbeatSettingsTab.swift b/clients/macos/vellum-assistant/Features/Settings/HeartbeatSettingsTab.swift index 28b023422c4..41db863dc80 100644 --- a/clients/macos/vellum-assistant/Features/Settings/HeartbeatSettingsTab.swift +++ b/clients/macos/vellum-assistant/Features/Settings/HeartbeatSettingsTab.swift @@ -198,49 +198,48 @@ struct HeartbeatSettingsTab: View { .padding(.vertical, VSpacing.lg) } else { ForEach(runs, id: \.id) { run in - Button { - withAnimation(VAnimation.fast) { - expandedRunId = expandedRunId == run.id ? nil : run.id - } - } label: { - VStack(alignment: .leading, spacing: 0) { - HStack(spacing: VSpacing.md) { - resultBadge(run.result) - VStack(alignment: .leading, spacing: 2) { - Text(run.title) - .font(VFont.body) - .foregroundColor(VColor.textPrimary) - .lineLimit(1) - Text(formatTimestamp(run.createdAt)) - .font(VFont.caption) - .foregroundColor(VColor.textMuted) - } - Spacer() - Image(systemName: expandedRunId == run.id ? "chevron.down" : "chevron.right") - .font(.system(size: 10, weight: .semibold)) + VStack(alignment: .leading, spacing: 0) { + HStack(spacing: VSpacing.md) { + resultBadge(run.result) + VStack(alignment: .leading, spacing: 2) { + Text(run.title) + .font(VFont.body) + .foregroundColor(VColor.textPrimary) + .lineLimit(1) + Text(formatTimestamp(run.createdAt)) + .font(VFont.caption) .foregroundColor(VColor.textMuted) } - .padding(VSpacing.sm) - - if expandedRunId == run.id { - Text(run.summary?.isEmpty == false ? run.summary! : "No summary available") - .font(VFont.mono) - .foregroundColor(VColor.textSecondary) - .textSelection(.enabled) - .padding(VSpacing.sm) - .frame(maxWidth: .infinity, alignment: .leading) - .background(VColor.surface) - .clipShape(RoundedRectangle(cornerRadius: VRadius.md)) - .overlay( - RoundedRectangle(cornerRadius: VRadius.md) - .stroke(VColor.surfaceBorder, lineWidth: 1) - ) - .padding(.horizontal, VSpacing.sm) - .padding(.bottom, VSpacing.sm) + Spacer() + Image(systemName: expandedRunId == run.id ? "chevron.down" : "chevron.right") + .font(.system(size: 10, weight: .semibold)) + .foregroundColor(VColor.textMuted) + } + .padding(VSpacing.sm) + .contentShape(Rectangle()) + .onTapGesture { + withAnimation(VAnimation.fast) { + expandedRunId = expandedRunId == run.id ? nil : run.id } } + + if expandedRunId == run.id { + Text(run.summary?.isEmpty == false ? run.summary! : "No summary available") + .font(VFont.mono) + .foregroundColor(VColor.textSecondary) + .textSelection(.enabled) + .padding(VSpacing.sm) + .frame(maxWidth: .infinity, alignment: .leading) + .background(VColor.surface) + .clipShape(RoundedRectangle(cornerRadius: VRadius.md)) + .overlay( + RoundedRectangle(cornerRadius: VRadius.md) + .stroke(VColor.surfaceBorder, lineWidth: 1) + ) + .padding(.horizontal, VSpacing.sm) + .padding(.bottom, VSpacing.sm) + } } - .buttonStyle(.plain) if run.id != runs.last?.id { Divider().background(VColor.surfaceBorder)