Complete native rewrite of the web-based SoliCards game as a SwiftUI multiplatform app targeting iOS 17+, iPadOS 17+, and macOS 14+. Three solitaire variants (Klondike, Spider, FreeCell) with full game rules, drag & drop, smart zoom layout, 6 themes, 4 difficulty levels, SwiftData persistence, VoiceOver accessibility, and 57 unit tests. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
38 lines
1.3 KiB
Swift
38 lines
1.3 KiB
Swift
import SwiftUI
|
|
|
|
struct ThemePickerView: View {
|
|
@Binding var selectedTheme: GameTheme
|
|
|
|
var body: some View {
|
|
LazyVGrid(columns: [GridItem(.adaptive(minimum: 100))], spacing: 12) {
|
|
ForEach(GameTheme.allThemes) { theme in
|
|
Button {
|
|
selectedTheme = theme
|
|
} label: {
|
|
VStack(spacing: 6) {
|
|
RoundedRectangle(cornerRadius: 8)
|
|
.fill(theme.backgroundColor)
|
|
.frame(height: 50)
|
|
.overlay {
|
|
RoundedRectangle(cornerRadius: 8)
|
|
.strokeBorder(theme.accentColor, lineWidth: 2)
|
|
}
|
|
|
|
Text(theme.displayName)
|
|
.font(.caption2)
|
|
.lineLimit(1)
|
|
}
|
|
.overlay {
|
|
if theme == selectedTheme {
|
|
RoundedRectangle(cornerRadius: 8)
|
|
.stroke(Color.accentColor, lineWidth: 3)
|
|
.padding(-4)
|
|
}
|
|
}
|
|
}
|
|
.buttonStyle(.plain)
|
|
}
|
|
}
|
|
}
|
|
}
|