summaryrefslogtreecommitdiffstats
path: root/Solsnu.Widget/Views
diff options
context:
space:
mode:
Diffstat (limited to 'Solsnu.Widget/Views')
-rw-r--r--Solsnu.Widget/Views/LargeWidgetView.swift51
-rw-r--r--Solsnu.Widget/Views/MediumWidgetView.swift36
-rw-r--r--Solsnu.Widget/Views/SmallWidgetView.swift28
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)
+}