diff options
Diffstat (limited to 'Solsnu.Widget/Views')
| -rw-r--r-- | Solsnu.Widget/Views/LargeWidgetView.swift | 51 | ||||
| -rw-r--r-- | Solsnu.Widget/Views/MediumWidgetView.swift | 36 | ||||
| -rw-r--r-- | Solsnu.Widget/Views/SmallWidgetView.swift | 28 |
3 files changed, 115 insertions, 0 deletions
diff --git a/Solsnu.Widget/Views/LargeWidgetView.swift b/Solsnu.Widget/Views/LargeWidgetView.swift new file mode 100644 index 0000000..beba39c --- /dev/null +++ b/Solsnu.Widget/Views/LargeWidgetView.swift @@ -0,0 +1,51 @@ +import SwiftUI +import WidgetKit + +struct LargeWidgetView: View { + let entry: SolvervEntry + + var body: some View { + VStack(spacing: 12) { + // Top: Emoji + Text(entry.emoji) + .font(.system(size: 80)) + .frame(height: 100) + + // Bottom: Info + VStack(alignment: .leading, spacing: 10) { + // Event name and countdown + VStack(alignment: .leading, spacing: 4) { + Text("Season Event") + .font(.headline) + + Text("\(entry.def.daysUntilNext()) days") + .font(.system(.title2, design: .default).weight(.bold)) + } + + // Progress bar + ProgressView(value: Double(entry.def.progressRatio())) + + Divider() + + // Event info + VStack(alignment: .leading, spacing: 6) { + Text("Upcoming") + .font(.caption) + .foregroundColor(.secondary) + + Text("More events coming soon") + .font(.caption) + } + + Spacer() + } + .padding(.horizontal) + .padding(.vertical, 8) + } + } +} + +#Preview { + let entry = SolvervEntry(def: SolvervDef(utcString: "2026-12-21 20:50:00")) + LargeWidgetView(entry: entry) +} diff --git a/Solsnu.Widget/Views/MediumWidgetView.swift b/Solsnu.Widget/Views/MediumWidgetView.swift new file mode 100644 index 0000000..6f1c8e9 --- /dev/null +++ b/Solsnu.Widget/Views/MediumWidgetView.swift @@ -0,0 +1,36 @@ +import SwiftUI +import WidgetKit + +struct MediumWidgetView: View { + let entry: SolvervEntry + + var body: some View { + HStack(spacing: 12) { + // Left: Emoji + Text(entry.emoji) + .font(.system(size: 60)) + + // Right: Info + VStack(alignment: .leading, spacing: 8) { + Text("Season Event") + .font(.headline) + .lineLimit(1) + + Text("\(entry.def.daysUntilNext()) days") + .font(.system(.title3, design: .default).weight(.semibold)) + + ProgressView(value: Double(entry.def.progressRatio())) + + Spacer() + } + + Spacer() + } + .padding() + } +} + +#Preview { + let entry = SolvervEntry(def: SolvervDef(utcString: "2026-12-21 20:50:00")) + MediumWidgetView(entry: entry) +} diff --git a/Solsnu.Widget/Views/SmallWidgetView.swift b/Solsnu.Widget/Views/SmallWidgetView.swift new file mode 100644 index 0000000..4ca73a7 --- /dev/null +++ b/Solsnu.Widget/Views/SmallWidgetView.swift @@ -0,0 +1,28 @@ +import SwiftUI +import WidgetKit + +struct SmallWidgetView: View { + let entry: SolvervEntry + @Environment(\.widgetRenderingMode) var renderingMode + + var body: some View { + VStack(spacing: 8) { + // Seasonal emoji + Text(entry.emoji) + .font(.system(size: 40)) + + // Days countdown + Text("\(entry.def.daysUntilNext())") + .font(.system(.title, design: .default).weight(.bold)) + + Text("days") + .font(.caption2) + } + .padding() + } +} + +#Preview { + let entry = SolvervEntry(def: SolvervDef(utcString: "2026-12-21 20:50:00")) + SmallWidgetView(entry: entry) +} |
