refactor(design): remove gamification — replace emoji icons with progress ring
WorkoutTodayBanner: progress ring replaces emoji cell as the lead visual. Card background is now surface/border, not blue-tinted. StreakBannerView: strip gradient, dot trail, and "Don't break the chain". Replace with clean number + 7-tick week bar. ProgressRingCard: "Keep going 🔥" / "Workout complete! 🎉" removed; replaced with "N sets remaining" / "All sets done". Sample programs: 🔥 Shoulders & Arms -> 🔄, 💥 Full Body -> 🏋️. Emoji picker: 🔥 replaced with 🫀 (heart/cardio) as last option.
This commit is contained in:
@@ -374,7 +374,7 @@ struct ProgressRingCard: View {
|
||||
VStack(alignment: .leading, spacing: 2) {
|
||||
Text("\(done) / \(total) sets done")
|
||||
.font(AppFonts.sans(12.5, weight: .semibold)).foregroundColor(AppColors.text(cs))
|
||||
Text(total == 0 ? "Add exercises to get started" : done == total && total > 0 ? "Workout complete! 🎉" : "Keep going 🔥")
|
||||
Text(total == 0 ? "Add exercises to get started" : done == total && total > 0 ? "All sets done" : "\(total - done) sets remaining")
|
||||
.font(AppFonts.sans(10)).foregroundColor(AppColors.text3(cs))
|
||||
}
|
||||
Spacer()
|
||||
@@ -387,24 +387,31 @@ struct ProgressRingCard: View {
|
||||
struct StreakBannerView: View {
|
||||
@Environment(\.colorScheme) private var cs
|
||||
let streak: Int
|
||||
|
||||
var body: some View {
|
||||
HStack(spacing: 10) {
|
||||
Text("\(streak)").font(AppFonts.mono(26, weight: .bold)).foregroundColor(AppColors.accent)
|
||||
VStack(alignment: .leading, spacing: 1) {
|
||||
Text("Day Streak").font(AppFonts.sans(12, weight: .semibold)).foregroundColor(AppColors.text(cs))
|
||||
Text("Don't break the chain").font(AppFonts.sans(10)).foregroundColor(AppColors.text3(cs))
|
||||
HStack(spacing: 0) {
|
||||
VStack(alignment: .leading, spacing: 2) {
|
||||
Text("\(streak)")
|
||||
.font(AppFonts.mono(28, weight: .bold))
|
||||
.foregroundColor(AppColors.text(cs))
|
||||
Text("day streak")
|
||||
.font(AppFonts.sans(11))
|
||||
.foregroundColor(AppColors.text3(cs))
|
||||
}
|
||||
Spacer()
|
||||
HStack(spacing: 4) {
|
||||
// 7-day tick bar — current week progress
|
||||
HStack(spacing: 3) {
|
||||
ForEach(0..<7, id: \.self) { i in
|
||||
Circle().fill(i < streak ? AppColors.accent : AppColors.borderHi(cs)).frame(width: 7, height: 7)
|
||||
let filled = streak > 0 && i < (streak % 7 == 0 ? 7 : streak % 7)
|
||||
RoundedRectangle(cornerRadius: 1.5)
|
||||
.fill(filled ? AppColors.accent : AppColors.borderHi(cs))
|
||||
.frame(width: 18, height: 3)
|
||||
}
|
||||
}
|
||||
}
|
||||
.padding(11)
|
||||
.background(LinearGradient(colors: [AppColors.accent.opacity(0.12), AppColors.yellow.opacity(0.08)], startPoint: .topLeading, endPoint: .bottomTrailing))
|
||||
.clipShape(RoundedRectangle(cornerRadius: AppRadius.large))
|
||||
.overlay(RoundedRectangle(cornerRadius: AppRadius.large).stroke(AppColors.accent.opacity(0.18), lineWidth: 1))
|
||||
.padding(.horizontal, 14)
|
||||
.padding(.vertical, 13)
|
||||
.cardStyle()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1116,7 +1123,7 @@ struct RenameProgramSheet: View {
|
||||
@State private var name: String
|
||||
@State private var selectedEmoji: String
|
||||
@FocusState private var nameFocused: Bool
|
||||
private let emojis = ["💪", "🦵", "🔄", "🏃", "🤸", "🏋️", "🧘", "🚴", "🥊", "🎯", "⚡️", "🔥"]
|
||||
private let emojis = ["💪", "🦵", "🔄", "🏃", "🤸", "🏋️", "🧘", "🚴", "🥊", "🎯", "⚡️", "🫀"]
|
||||
|
||||
init(program: WorkoutProgram) {
|
||||
self.program = program
|
||||
@@ -1190,7 +1197,7 @@ struct AddProgramSheet: View {
|
||||
@State private var name = ""
|
||||
@State private var selectedEmoji = "💪"
|
||||
@FocusState private var nameFocused: Bool
|
||||
private let emojis = ["💪", "🦵", "🔄", "🏃", "🤸", "🏋️", "🧘", "🚴", "🥊", "🎯", "⚡️", "🔥"]
|
||||
private let emojis = ["💪", "🦵", "🔄", "🏃", "🤸", "🏋️", "🧘", "🚴", "🥊", "🎯", "⚡️", "🫀"]
|
||||
|
||||
var body: some View {
|
||||
VStack(spacing: 0) {
|
||||
|
||||
Reference in New Issue
Block a user