Widgets: bars countdown widget + unified slate/orange theme (KC-15)

- New EventBarsWidget ("Event Countdown (Bars)") using BarGrid + EventBarsView,
  with a fine "X hr, Y min left" label; registered in the bundle.
- Re-themed every home-screen widget to the shared WidgetTheme (dark slate
  background + brand orange): Day Progress, Tasks Done Today, Event Countdown
  (dots), My Tasks. Lock-screen widgets keep .thinMaterial (system-tinted).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
kutesir
2026-06-10 17:31:55 +03:00
parent 063df4ba03
commit 0362d586e5
5 changed files with 91 additions and 9 deletions

View File

@@ -98,7 +98,7 @@ struct ProgressDotView: View {
DotGrid(total: 100, filled: Int(progress * 100), color: accent)
}
.padding(.horizontal, isMedium ? 4 : 0)
.containerBackground(.black, for: .widget)
.containerBackground(WidgetTheme.background, for: .widget)
}
}
@@ -106,7 +106,7 @@ struct ProgressDotView: View {
struct TasksCompleteView: View {
@Environment(\.widgetFamily) private var family
private let teal = Color(red: 0.48, green: 0.87, blue: 0.80)
private let teal = WidgetTheme.accent
private var stats: (done: Int, total: Int) { todayTaskCompletion() }
private var percent: Int {
@@ -144,7 +144,7 @@ struct TasksCompleteView: View {
}
}
.padding(.horizontal, isMedium ? 4 : 0)
.containerBackground(.black, for: .widget)
.containerBackground(WidgetTheme.background, for: .widget)
}
}
@@ -211,7 +211,7 @@ struct EventCountdownView: View {
let entry: EventEntry
@Environment(\.widgetFamily) var family
private let teal = Color(red: 0.48, green: 0.87, blue: 0.80)
private let teal = WidgetTheme.accent
private var percent: Int { Int((entry.progress * 100).rounded()) }
@@ -223,7 +223,7 @@ struct EventCountdownView: View {
medium
}
}
.containerBackground(.black, for: .widget)
.containerBackground(WidgetTheme.background, for: .widget)
}
private var filled: Int { Int(entry.progress * Double(entry.totalDays)) }
@@ -274,6 +274,36 @@ struct EventCountdownView: View {
}
}
// MARK: - Event Countdown Bars style (medium)
struct EventBarsView: View {
let entry: EventEntry
var body: some View {
VStack(alignment: .leading, spacing: 0) {
HStack(alignment: .firstTextBaseline, spacing: 10) {
Text(LocalizedStringKey(entry.eventName))
.font(.system(size: 22, weight: .heavy))
.foregroundColor(WidgetTheme.accent)
.lineLimit(1)
Button(intent: CycleCountdownUnitIntent()) {
Text(entry.fineTimeLeft)
.font(.system(size: 16, weight: .semibold))
.foregroundColor(WidgetTheme.textDim)
.lineLimit(1)
}
.buttonStyle(.plain)
Spacer(minLength: 0)
}
Spacer(minLength: 8)
BarGrid(progress: entry.progress, color: WidgetTheme.accent)
.frame(maxHeight: .infinity)
}
.padding(.horizontal, 4).padding(.vertical, 2)
.containerBackground(WidgetTheme.background, for: .widget)
}
}
// MARK: - Lock Screen Widget (accessoryRectangular)
struct LockScreenRectView: View {