import SwiftUI import WidgetKit /// Family-Switch für das Cards-Due-Widget. struct DueWidgetView: View { let entry: DueEntry @Environment(\.widgetFamily) private var family var body: some View { Group { switch family { case .systemSmall: smallView case .systemMedium: mediumView case .accessoryCircular: circularView case .accessoryInline: inlineView case .accessoryRectangular: rectangularView default: smallView } } } private var smallView: some View { VStack(alignment: .leading, spacing: 4) { Text("\(entry.totalDueCount)") .font(.system(size: 48, weight: .bold)) Text(entry.totalDueCount == 1 ? "Karte fällig" : "Karten fällig") .font(.caption) .foregroundStyle(.secondary) Spacer() if let top = entry.topDecks.first { Text(top.name) .font(.caption2) .lineLimit(1) .foregroundStyle(.primary) } } .frame(maxWidth: .infinity, alignment: .leading) } private var mediumView: some View { HStack(alignment: .top, spacing: 16) { VStack(alignment: .leading, spacing: 2) { Text("\(entry.totalDueCount)") .font(.system(size: 40, weight: .bold)) Text(entry.totalDueCount == 1 ? "Karte fällig" : "Karten fällig") .font(.caption) .foregroundStyle(.secondary) } Divider() VStack(alignment: .leading, spacing: 4) { ForEach(entry.topDecks.prefix(3)) { deck in HStack { Text(deck.name) .font(.caption.weight(.medium)) .lineLimit(1) Spacer() Text("\(deck.dueCount)") .font(.caption.weight(.bold)) } } if entry.topDecks.isEmpty { Text("Keine Decks") .font(.caption) .foregroundStyle(.secondary) } } .frame(maxWidth: .infinity, alignment: .leading) } } private var circularView: some View { ZStack { Circle() .fill(.tint.opacity(0.2)) Text("\(entry.totalDueCount)") .font(.headline.bold()) } } private var inlineView: some View { Text("Cards: \(entry.totalDueCount) fällig") } private var rectangularView: some View { VStack(alignment: .leading, spacing: 2) { Text("\(entry.totalDueCount) fällig") .font(.headline) if let top = entry.topDecks.first { Text(top.name) .font(.caption) .lineLimit(1) } } } }