From 57e8c5a34be7ac460c899e6605d920bce0ca3e27 Mon Sep 17 00:00:00 2001 From: kutesir Date: Thu, 9 Jul 2026 14:26:40 +0300 Subject: [PATCH] tasks: rebalance row layout, countdown+icons move to right column (KC-62 follow-up) The category icon column sat empty for most rows (default tasks have no glyph/alarm/series), leaving a lone repeat icon floating in dead space on the right per user's device screenshot. Move the countdown label out from under the title into a trailing column paired with the indicator icons, so both sides of the row carry equal weight. Co-Authored-By: Claude Opus 4.8 --- KisaniCal/ISSUES.md | 11 +++++++ KisaniCal/Views/TodayView.swift | 55 +++++++++++++++++---------------- 2 files changed, 39 insertions(+), 27 deletions(-) diff --git a/KisaniCal/ISSUES.md b/KisaniCal/ISSUES.md index 17b8eec..0d2aeee 100644 --- a/KisaniCal/ISSUES.md +++ b/KisaniCal/ISSUES.md @@ -2165,3 +2165,14 @@ imbalance confirmed via `git stash` to predate this change — a comment artifact, not introduced here). `TagChip` itself is left intact in `SharedComponents.swift` since it's a generic shared component, just no longer called from these two sites. + +### Follow-up — right side was dead space +Device screenshot of the "Later" list showed the icon column sitting empty +for most rows (default `.reminder` tasks have no glyph, no alarm, no +series), leaving a lone floating repeat icon on recurring rows and a big +gap everywhere else. Rebalanced `TaskRowView`: the countdown (`in 1 wk` +etc., previously crammed under the title on the left) moved to a trailing +`VStack` on the right, with the icon row underneath it — so the row now +reads title/date on the left, countdown/indicators on the right, instead of +all metadata piled on the left and the right column empty. `TodayTLRow` was +left as-is (its leading time-track column already fills that role there). diff --git a/KisaniCal/Views/TodayView.swift b/KisaniCal/Views/TodayView.swift index 90b7961..4a65283 100644 --- a/KisaniCal/Views/TodayView.swift +++ b/KisaniCal/Views/TodayView.swift @@ -1355,38 +1355,39 @@ struct TaskRowView: View { .font(AppFonts.sans(13)) .foregroundColor(AppColors.text(cs)) if let d = task.dueDate, showDetails { - HStack(spacing: 4) { - Text("\(dueFmt.string(from: d))\(task.isRecurring ? " · \(task.recurrenceLabel ?? "Repeat")" : "")") - .font(AppFonts.mono(9.5)) - .foregroundColor(AppColors.text3(cs)) - Text("·") - .font(AppFonts.mono(9.5)) - .foregroundColor(AppColors.text3(cs).opacity(0.4)) - Text(countdownLabel(to: d)) - .font(AppFonts.mono(9.5, weight: .semibold)) - .foregroundColor(countdownColor(to: d)) - } + Text("\(dueFmt.string(from: d))\(task.isRecurring ? " · \(task.recurrenceLabel ?? "Repeat")" : "")") + .font(AppFonts.mono(9.5)) + .foregroundColor(AppColors.text3(cs)) } } - Spacer() + Spacer(minLength: 8) - // ⏰ reminder · 🔁 recurring · tag icon indicators (TickTick-style — icon only, no text badge) - HStack(spacing: 5) { - if let glyph = task.category.glyph { - Image(systemName: glyph) - .font(.system(size: 11)) - .foregroundColor(task.quadrant.color) + // Right column mirrors the left: countdown metadata on top, + // icon-only category/reminder/series indicators below — fills + // what used to be dead space instead of a lone floating icon. + VStack(alignment: .trailing, spacing: 3) { + if let d = task.dueDate, showDetails { + Text(countdownLabel(to: d)) + .font(AppFonts.mono(9.5, weight: .semibold)) + .foregroundColor(countdownColor(to: d)) } - if task.reminderDate != nil || task.constantReminder { - Image(systemName: "alarm") - .font(.system(size: 11)) - .foregroundColor(AppColors.text3(cs)) - } - if task.isRecurring { - Image(systemName: "repeat") - .font(.system(size: 11)) - .foregroundColor(AppColors.text3(cs)) + HStack(spacing: 5) { + if let glyph = task.category.glyph { + Image(systemName: glyph) + .font(.system(size: 10.5)) + .foregroundColor(task.quadrant.color) + } + if task.reminderDate != nil || task.constantReminder { + Image(systemName: "alarm") + .font(.system(size: 10.5)) + .foregroundColor(AppColors.text3(cs)) + } + if task.isRecurring { + Image(systemName: "repeat") + .font(.system(size: 10.5)) + .foregroundColor(AppColors.text3(cs)) + } } } .padding(.trailing, 9)