Files
bot/apps/macos/Sources/Bot/MenuSessionsHeaderView.swift
zooqueen fd1d312208 feat: merge upstream improvements via rebrand bridge
Squash merge of 1,462 upstream commits with openclaw→hanzo-bot
naming transforms applied. Conflicts resolved favoring our main
branch to preserve existing customizations.

Key upstream additions:
- iOS Security Stack (concurrency locks, runtime guards, TTS fallback)
- Discord CDN hostname allowlisting for SSRF protection
- Discord mention handling improvements
- Various bug fixes and stability improvements
2026-03-03 09:38:30 -08:00

53 lines
1.5 KiB
Swift

import SwiftUI
struct MenuHeaderCard<Content: View>: View {
let title: String
let subtitle: String
let statusText: String?
let paddingBottom: CGFloat
@ViewBuilder var content: Content
init(
title: String,
subtitle: String,
statusText: String? = nil,
paddingBottom: CGFloat = 6,
@ViewBuilder content: () -> Content = { EmptyView() })
{
self.title = title
self.subtitle = subtitle
self.statusText = statusText
self.paddingBottom = paddingBottom
self.content = content()
}
var body: some View {
VStack(alignment: .leading, spacing: 6) {
HStack(alignment: .firstTextBaseline) {
Text(self.title)
.font(.caption.weight(.semibold))
.foregroundStyle(.secondary)
Spacer(minLength: 10)
Text(self.subtitle)
.font(.caption)
.foregroundStyle(.secondary)
}
if let statusText, !statusText.isEmpty {
Text(statusText)
.font(.caption)
.foregroundStyle(.secondary)
.lineLimit(1)
.truncationMode(.tail)
}
self.content
}
.padding(.top, 8)
.padding(.bottom, self.paddingBottom)
.padding(.leading, 20)
.padding(.trailing, 10)
.frame(minWidth: 300, maxWidth: .infinity, alignment: .leading)
.transaction { txn in txn.animation = nil }
}
}