From 49c7fb7fbd6bb600bbdc623c3d0ac5dda2042a07 Mon Sep 17 00:00:00 2001 From: dotta Date: Thu, 26 Mar 2026 08:51:06 -0500 Subject: [PATCH] Unify unread badge and archive X into single column on Mine tab The unread dot and dismiss X now share the same rightmost column on the Mine tab. When an issue is unread the blue dot shows first; clicking it marks the issue as read and reveals the X on hover for archiving. Read/unread state stays in sync across all inbox tabs. Desktop dismiss animation polished with scale + slide. Co-Authored-By: Paperclip Co-Authored-By: Claude Opus 4.6 --- ui/src/components/IssueRow.tsx | 25 +++++++++++++++++ ui/src/pages/Inbox.tsx | 49 ++++++---------------------------- 2 files changed, 33 insertions(+), 41 deletions(-) diff --git a/ui/src/components/IssueRow.tsx b/ui/src/components/IssueRow.tsx index 7f6eaada..d3bcfcff 100644 --- a/ui/src/components/IssueRow.tsx +++ b/ui/src/components/IssueRow.tsx @@ -1,6 +1,7 @@ import type { ReactNode } from "react"; import type { Issue } from "@paperclipai/shared"; import { Link } from "@/lib/router"; +import { X } from "lucide-react"; import { cn } from "../lib/utils"; import { StatusIcon } from "./StatusIcon"; @@ -17,6 +18,8 @@ interface IssueRowProps { trailingMeta?: ReactNode; unreadState?: UnreadState | null; onMarkRead?: () => void; + onArchive?: () => void; + archiveDisabled?: boolean; className?: string; } @@ -31,6 +34,8 @@ export function IssueRow({ trailingMeta, unreadState = null, onMarkRead, + onArchive, + archiveDisabled, className, }: IssueRowProps) { const issuePathId = issue.identifier ?? issue.id; @@ -113,6 +118,26 @@ export function IssueRow({ )} /> + ) : onArchive ? ( + ) : (