import SwiftUI /// 编辑页共享样式:深色 Form 行背景 + 主文字色。 extension View { func txRow(_ p: TXPalette) -> some View { self.listRowBackground(p.surface).foregroundStyle(p.textPrimary) } } /// 深色主题的表单文本字段。 struct TXTextField: View { let title: String @Binding var text: String var placeholder: String = "" var keyboard: UIKeyboardType = .default var secure: Bool = false @EnvironmentObject var theme: TXThemeManager private var p: TXPalette { theme.palette } var body: some View { Group { if secure { SecureField(placeholder.isEmpty ? title : placeholder, text: $text) } else { TextField(placeholder.isEmpty ? title : placeholder, text: $text) .keyboardType(keyboard) .autocorrectionDisabled() .textInputAutocapitalization(.never) } } .foregroundStyle(p.textPrimary) .txRow(p) } } /// 空状态占位(列表为空时)。 struct TXEmptyState: View { let icon: String let title: String let subtitle: String @EnvironmentObject var theme: TXThemeManager private var p: TXPalette { theme.palette } var body: some View { VStack(spacing: TX.Space.s) { Image(systemName: icon) .font(.system(size: 34, weight: .light)) .foregroundStyle(p.textTertiary) Text(title).font(.system(size: 15)).foregroundStyle(p.textSecondary) Text(subtitle).font(.system(size: 13)).foregroundStyle(p.textTertiary) .multilineTextAlignment(.center) } .frame(maxWidth: .infinity) .padding(.vertical, 48) } }