From 6f2b0f39f72e0aba42d986dc4d9e5e67a2c701cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gjermund=20H=C3=B8s=C3=B8ien=20Wiggen?= Date: Sun, 7 Jun 2026 22:34:31 +0200 Subject: [PATCH] feat: breadcrumb nav, grouped properties sidebar, larger status selector, transitions --- web/src/app/tickets/[id]/page.tsx | 337 ++++++++++++++++-------------- 1 file changed, 178 insertions(+), 159 deletions(-) diff --git a/web/src/app/tickets/[id]/page.tsx b/web/src/app/tickets/[id]/page.tsx index 56b8e6e..e212937 100644 --- a/web/src/app/tickets/[id]/page.tsx +++ b/web/src/app/tickets/[id]/page.tsx @@ -19,6 +19,7 @@ import type { PreviewResult, UpdateResult, } from "@/lib/types"; +import { Separator } from "@/components/ui/separator"; import { cn } from "@/lib/utils"; const STATUS_COLORS: Record = { @@ -85,7 +86,7 @@ function TransactionBubble({ return (
- + {message} · {timeAgo}
@@ -109,28 +110,28 @@ function TransactionBubble({ style={{ backgroundColor: isAgent ? getInitialColor(tx.creator_id) - : "#191a1b", + : "var(--muted)", }} > {getInitial(tx.creator_id)}
{isInternal && ( -
+
Internal note
)} @@ -139,7 +140,7 @@ function TransactionBubble({ ? String((tx.data as Record).body) : tx.transaction_type}

-

{timeAgo}

+

{timeAgo}

); @@ -262,17 +263,17 @@ export default function TicketDetailPage({
{Array.from({ length: 6 }).map((_, i) => (
-
+
-
-
+
+
))}
-
+
{Array.from({ length: 5 }).map((_, i) => ( -
+
))}
@@ -282,10 +283,10 @@ export default function TicketDetailPage({ if (error && !ticket) { return (
-

{error}

+

{error}

@@ -296,7 +297,7 @@ export default function TicketDetailPage({ if (!ticket) { return (
-

Ticket not found

+

Ticket not found

); } @@ -311,28 +312,31 @@ export default function TicketDetailPage({ {/* Left panel — conversation */}
{/* Header */} -
+
- + + All tickets -
-

- {ticket.subject} -

-

- {ticket.id.slice(0, 8)} · {queue?.name || ticket.queue_id} -

-
+
+ + {/* Title */} +
+

+ {ticket.subject} +

+

+ {ticket.id.slice(0, 8)} · {queue?.name || ticket.queue_id} +

{/* Conversation */}
{transactions.length === 0 && (
-

+

No activity yet

@@ -343,16 +347,16 @@ export default function TicketDetailPage({
{/* Reply box */} -
+
{/* Toggle tabs */} -
+
{/* Right panel — properties */} -
-
- {/* Status */} +
+
+ {/* Section: Status */}
-