Merge develop -> main: full session (KC-51 through KC-71) #28

Merged
kutesir merged 64 commits from develop into main 2026-07-12 22:57:14 +00:00
2 changed files with 39 additions and 27 deletions
Showing only changes of commit 57e8c5a34b - Show all commits

View File

@@ -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).

View File

@@ -1355,40 +1355,41 @@ 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))
}
}
Spacer(minLength: 8)
// 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))
}
}
}
Spacer()
// 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))
.font(.system(size: 10.5))
.foregroundColor(task.quadrant.color)
}
if task.reminderDate != nil || task.constantReminder {
Image(systemName: "alarm")
.font(.system(size: 11))
.font(.system(size: 10.5))
.foregroundColor(AppColors.text3(cs))
}
if task.isRecurring {
Image(systemName: "repeat")
.font(.system(size: 11))
.font(.system(size: 10.5))
.foregroundColor(AppColors.text3(cs))
}
}
}
.padding(.trailing, 9)
}
.frame(minHeight: 48)