tickets panel: parent/child as a tree, bold subject ticket (T-281)

Replace the ambiguous inline "T-1 ← T-9" id row on ticket cards with a
small tree: the parent renders as a muted, clickable breadcrumb above, and
the card's own ticket sits below it under a "└" connector in bold — so it's
clear which id is the subject and which is its parent. Tapping the parent
selects it.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-08 13:49:36 +02:00
co-authored by Claude Opus 4.8
parent 67081709ec
commit a62003a833
5 changed files with 65 additions and 5 deletions
+18 -5
View File
@@ -251,8 +251,25 @@ class _TicketCard extends StatelessWidget {
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// Parent shown as a muted breadcrumb above; the card's own ticket
// sits below it under a tree connector and in bold, so it's clear
// which id is the subject and which is its parent (T-281).
if (entry.parentId != null)
ClideTappable(
onTap: () => ClideKernel.of(context).messages.publish('builtin.tickets', 'selection', {'id': entry.parentId}),
builder: (ctx, hovered, _) => Padding(
padding: const EdgeInsets.only(bottom: 1),
child: ClideText(
entry.parentId!,
fontSize: clideFontSmall,
color: hovered ? tokens.globalForeground : tokens.globalTextMuted,
fontFamily: clideMonoFamily,
),
),
),
Row(
children: [
if (entry.parentId != null) ClideText('', fontSize: clideFontSmall, color: tokens.globalTextMuted),
ClideTooltip(
message: entry.type ?? 'task',
child: Container(
@@ -262,11 +279,7 @@ class _TicketCard extends StatelessWidget {
),
),
const SizedBox(width: 6),
ClideText(entry.id, fontSize: clideFontSmall, color: tokens.globalTextMuted, fontFamily: clideMonoFamily),
if (entry.parentId != null) ...[
ClideText('', fontSize: clideFontSmall, color: tokens.globalTextMuted),
ClideText(entry.parentId!, fontSize: clideFontSmall, color: tokens.globalTextMuted, fontFamily: clideMonoFamily),
],
ClideText(entry.id, fontSize: clideFontSmall, color: tokens.globalForeground, fontFamily: clideMonoFamily, fontWeight: FontWeight.w600),
],
),
const SizedBox(height: 4),