diff --git a/ios/App/App/CoachWidgetSnapshot.swift b/ios/App/App/CoachWidgetSnapshot.swift index 2783a14..4aeb78d 100644 --- a/ios/App/App/CoachWidgetSnapshot.swift +++ b/ios/App/App/CoachWidgetSnapshot.swift @@ -59,12 +59,6 @@ struct CoachWidgetSnapshot: Codable { var kcalToday: Double? var kcalGoal: Double? - /// Objectif d'hydratation, en millilitres. **Optionnel et sans valeur par - /// défaut** : aucun objectif d'hydratation n'est défini dans les objectifs - /// nutritionnels. Tant qu'il vaut nil, le widget affiche le volume bu sans - /// barre — une jauge sur un objectif inventé donnerait un pourcentage qui ne - /// veut rien dire. - var waterGoalMl: Double? /// Séance planifiée du jour (nil = jour OFF / pas de séance). struct TodaySession: Codable { diff --git a/ios/App/CoachLiveActivity/CoachQuickWidget.swift b/ios/App/CoachLiveActivity/CoachQuickWidget.swift index 1b260d5..05fcda2 100644 --- a/ios/App/CoachLiveActivity/CoachQuickWidget.swift +++ b/ios/App/CoachLiveActivity/CoachQuickWidget.swift @@ -62,14 +62,13 @@ struct CoachQuickEntryTimeline: TimelineEntry { let pending: Int let kcal: Double? let kcalGoal: Double? - let waterGoal: Double? } struct CoachQuickProvider: TimelineProvider { func placeholder(in context: Context) -> CoachQuickEntryTimeline { CoachQuickEntryTimeline( date: Date(), waterMl: 1250, coffeeCount: 2, pending: 0, - kcal: 1420, kcalGoal: 1950, waterGoal: 2000 + kcal: 1420, kcalGoal: 1950 ) } @@ -99,8 +98,7 @@ struct CoachQuickProvider: TimelineProvider { coffeeCount: CoachQuickLog.todayCount(kind: "coffee", syncedCount: syncedCoffee), pending: CoachQuickLog.pending().count, kcal: snapshot?.kcalToday, - kcalGoal: snapshot?.kcalGoal, - waterGoal: snapshot?.waterGoalMl + kcalGoal: snapshot?.kcalGoal ) } } @@ -126,24 +124,20 @@ struct CoachQuickWidgetView: View { .lineLimit(1) .minimumScaleFactor(0.8) - // Deux jauges : hydratation et énergie. La barre n'apparaît que si - // un objectif existe — une jauge sur un objectif inventé donnerait - // un pourcentage qui ne veut rien dire. + // Hydratation en total, énergie en jauge : seule l'énergie a un + // objectif fixé (1950 kcal). Une barre suppose une cible ; sans + // cible, un chiffre dit plus qu'un pourcentage inventé. VStack(alignment: .leading, spacing: 3) { + // Hydratation : un TOTAL, pas une jauge. Décision assumée — + // aucun objectif de boisson n'est fixé, et en inventer un + // donnerait un pourcentage qui n'a pas de sens. HStack(spacing: 6) { Text("\(litres) L") .font(.system(.subheadline, design: .rounded).weight(.semibold)) .monospacedDigit() - if let goal = entry.waterGoal, goal > 0 { - ProgressView(value: min(entry.waterMl / goal, 1)) - .tint(.blue) - Text("\(Int(goal / 1000)) L") - .font(.caption2).foregroundStyle(.tertiary).monospacedDigit() - } else { - Text("bue aujourd'hui") - .font(.caption2).foregroundStyle(.secondary) - Spacer() - } + Text("bue aujourd'hui") + .font(.caption2).foregroundStyle(.secondary) + Spacer() } if let kcal = entry.kcal {