mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-24 05:18:38 +00:00
refactor(macos): dedupe UI, pairing, and runtime helpers
This commit is contained in:
52
apps/macos/Sources/OpenClaw/MenuHeaderCard.swift
Normal file
52
apps/macos/Sources/OpenClaw/MenuHeaderCard.swift
Normal file
@@ -0,0 +1,52 @@
|
||||
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 }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user