The phone's rows learn their faces and two more orders — icons everywhere, lanes and cards sortable

Boards, lanes, and cards all show their frontmatter icon leading the
row, tinted through the palette with a secondary fallback; the board
scanner now reads icon and iconColor from the same one-file parse as
the title. Lane and card lists gain the segmented Manual/Name/Recent
control — display-only sorting layered over the rank order, never
rewriting what's on disk.

Claude-Session: https://claude.ai/code/session_01SR4XGjmBE16ZUYWpfFHXwY
This commit is contained in:
2026-08-08 12:34:10 -04:00
parent 445d035a83
commit e8791b239d
7 changed files with 209 additions and 44 deletions
+14 -11
View File
@@ -150,9 +150,9 @@ struct BoardsTabView: View {
}
}
/// One board row: title, lane/card counts, modified date, a marker for a board that is not in iCloud,
/// and while the package is not fully current a download-state subtitle in place of the counts a
/// shallow scan cannot yet answer.
/// One board row: its icon when it has one, title, lane/card counts, modified date, a marker for a
/// board that is not in iCloud, and while the package is not fully current a download-state
/// subtitle in place of the counts a shallow scan cannot yet answer.
///
/// Only the local side is marked. iCloud is where a board is expected to be, so saying so on every
/// row would be noise; "Local" is the exception, and the exception is what a marker is for.
@@ -160,16 +160,19 @@ private struct BoardSummaryRow: View {
let board: BoardSummary
var body: some View {
VStack(alignment: .leading, spacing: 2) {
Text(board.title)
HStack(spacing: 6) {
if board.location == .local {
Label("Local", systemImage: "iphone")
HStack {
ItemIconView(icon: board.icon, iconColor: board.iconColor)
VStack(alignment: .leading, spacing: 2) {
Text(board.title)
HStack(spacing: 6) {
if board.location == .local {
Label("Local", systemImage: "iphone")
}
Text(subtitle)
}
Text(subtitle)
.font(.caption)
.foregroundStyle(.secondary)
}
.font(.caption)
.foregroundStyle(.secondary)
}
}