Unify card background styles

This commit is contained in:
世界
2025-12-03 19:57:15 +08:00
parent 215677131d
commit 7c8863b53a
5 changed files with 55 additions and 66 deletions
@@ -56,3 +56,42 @@ public extension View {
}
}
#endif
public extension View {
@ViewBuilder
func cardStyle() -> some View {
modifier(CardStyleModifier())
}
}
private struct CardStyleModifier: ViewModifier {
@Environment(\.colorScheme) private var colorScheme
func body(content: Content) -> some View {
if #available(iOS 26.0, macOS 26.0, tvOS 26.0, *) {
content
.glassEffect(.regular.interactive(), in: .rect(cornerRadius: 16))
} else {
content
.background(backgroundColor)
.cornerRadius(16)
}
}
private var backgroundColor: Color {
#if os(iOS)
return Color(uiColor: .secondarySystemGroupedBackground)
#elseif os(macOS)
return Color(nsColor: .textBackgroundColor)
#elseif os(tvOS)
switch colorScheme {
case .dark:
return Color(uiColor: .black)
default:
return Color(uiColor: .white)
}
#else
return Color.clear
#endif
}
}
@@ -76,9 +76,8 @@ public struct ConnectionView: View {
}
.foregroundColor(.textColor)
#if !os(tvOS)
.padding(EdgeInsets(top: 10, leading: 13, bottom: 10, trailing: 13))
.background(backgroundColor)
.cornerRadius(10)
.padding(16)
.cardStyle()
#endif
}
.background(.clear)
@@ -99,16 +98,6 @@ public struct ConnectionView: View {
}
}
private var backgroundColor: Color {
#if os(iOS)
return Color(uiColor: .secondarySystemGroupedBackground)
#elseif os(macOS)
return Color(nsColor: .textBackgroundColor)
#elseif os(tvOS)
return Color.black
#endif
}
private nonisolated func closeConnection() async {
do {
try await LibboxNewStandaloneCommandClient()!.closeConnection(connection.id)
@@ -1,8 +1,6 @@
import SwiftUI
public struct DashboardCardView<Content: View>: View {
@Environment(\.colorScheme) private var colorScheme
private let title: String
private let isHalfWidth: Bool
@ViewBuilder private let content: () -> Content
@@ -26,40 +24,8 @@ public struct DashboardCardView<Content: View>: View {
#if os(tvOS)
.padding(EdgeInsets(top: 20, leading: 26, bottom: 20, trailing: 26))
#else
.padding(EdgeInsets(top: 16, leading: 16, bottom: 16, trailing: 16))
#endif
.modifier(CardStyleModifier(colorScheme: colorScheme))
}
}
private struct CardStyleModifier: ViewModifier {
let colorScheme: ColorScheme
func body(content: Content) -> some View {
if #available(iOS 26.0, macOS 26.0, tvOS 26.0, *) {
content
.glassEffect(.regular.interactive(), in: .rect(cornerRadius: 16))
} else {
content
.background(backgroundColor)
.cornerRadius(16)
}
}
private var backgroundColor: Color {
#if os(iOS)
return Color(uiColor: .secondarySystemGroupedBackground)
#elseif os(macOS)
return Color(nsColor: .textBackgroundColor)
#elseif os(tvOS)
switch colorScheme {
case .dark:
return Color(uiColor: .black)
default:
return Color(uiColor: .white)
}
#else
return Color.clear
.padding(16)
#endif
.cardStyle()
}
}
@@ -183,8 +183,12 @@ struct ProfilePickerSheet: View {
List {
ForEach(profileList, id: \.id) { profile in
macOSProfileRow(profile)
.listRowBackground(Color.clear)
.listRowSeparator(.hidden)
.listRowInsets(EdgeInsets(top: 6, leading: 16, bottom: 6, trailing: 16))
}
}
.listStyle(.plain)
#else
List {
ForEach(profileList, id: \.id) { profile in
@@ -204,10 +208,14 @@ struct ProfilePickerSheet: View {
}
)
.environmentObject(environments)
.listRowBackground(Color.clear)
.listRowSeparator(.hidden)
.listRowInsets(EdgeInsets(top: 6, leading: 16, bottom: 6, trailing: 16))
}
.onMove(perform: moveProfile)
.onDelete(perform: deleteProfile)
}
.listStyle(.plain)
#endif
}
@@ -623,6 +631,8 @@ private struct ProfilePickerRow: View {
}
}
.contentShape(Rectangle())
.padding(16)
.cardStyle()
}
#endif
@@ -57,23 +57,8 @@ public struct GroupItemView: View {
}
#if !os(tvOS)
.buttonStyle(.borderless)
.padding(EdgeInsets(top: 10, leading: 13, bottom: 10, trailing: 13))
.background(backgroundColor)
.cornerRadius(10)
.overlay(
RoundedRectangle(cornerRadius: 10)
.stroke(Color.gray.opacity(0.3), lineWidth: 1)
)
#endif
}
private var backgroundColor: Color {
#if os(iOS)
return Color(uiColor: .secondarySystemGroupedBackground)
#elseif os(macOS)
return Color(nsColor: .textBackgroundColor)
#elseif os(tvOS)
return Color.black
.padding(16)
.cardStyle()
#endif
}
}