From ab7ec68dd87f5f5e872274a7298affef5f728938 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 11 Jul 2026 09:21:33 +0000 Subject: [PATCH] fix: top 3 mobile UX issues from audit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit UX audit at 390px/1440px against a Linear-style bar found three mobile-breaking issues: 1. Bookmark rows showed only the title on mobile — domain and tags were hidden below md, and the invisible hover checkbox reserved space and intercepted taps. Rows now render a second line with domain + tag chips on mobile, and the checkbox only renders there in selection mode. Desktop layout is unchanged. 2. The selection action bar overflowed the viewport horizontally on phones, cutting off the count and Cancel button. It now docks as a full-width bottom bar with safe-area padding on small screens and keeps the floating pill on sm+, with compact labels so all actions fit down to 320px. 3. The top bar squeezed the search field until its placeholder truncated to "Sea". The sort select collapses to an icon trigger (native select overlay) on mobile, spacing tightens, and the search input keeps usable width. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_016huxQpLUq98cV3CJf2RCNW --- src/components/bookmarks/BookmarkItem.jsx | 35 +++++++++++-- src/components/bookmarks/FilterBar.jsx | 50 ++++++++++++++----- .../bookmarks/SelectionActionBar.jsx | 31 ++++++------ src/components/ui/Icons.jsx | 1 + 4 files changed, 87 insertions(+), 30 deletions(-) diff --git a/src/components/bookmarks/BookmarkItem.jsx b/src/components/bookmarks/BookmarkItem.jsx index 9176429..cb1fd87 100644 --- a/src/components/bookmarks/BookmarkItem.jsx +++ b/src/components/bookmarks/BookmarkItem.jsx @@ -16,6 +16,8 @@ export const BookmarkItem = forwardRef(function BookmarkItem( const faviconUrl = `https://www.google.com/s2/favicons?domain=${domain}&sz=32` + const sortedTags = Array.isArray(tags) ? [...tags].sort((a, b) => a.localeCompare(b)) : [] + // Long-press detection for mobile context menu const longPressTimer = useRef(null) const isLongPress = useRef(false) @@ -103,10 +105,14 @@ export const BookmarkItem = forwardRef(function BookmarkItem( : '' }`} > - {/* Checkbox */} + {/* Checkbox — on mobile only rendered in selection mode so it doesn't + reserve space or steal taps; on md+ it appears on hover */} @@ -37,31 +38,33 @@ export function SelectionActionBar({ selectedCount, onTag, onReadLater, onDelete <> )} diff --git a/src/components/ui/Icons.jsx b/src/components/ui/Icons.jsx index 48a99c7..93c9f04 100644 --- a/src/components/ui/Icons.jsx +++ b/src/components/ui/Icons.jsx @@ -20,6 +20,7 @@ export { Square, CheckSquare, ListChecks, + ArrowUpDown, Upload, Cloud, CloudOff,