From e43e2a7549fa4cb045b35524b395d850f81eb404 Mon Sep 17 00:00:00 2001 From: Test Date: Tue, 31 Mar 2026 11:38:13 +0200 Subject: [PATCH] feat: move filter chips to bottom of note list with gradient fade MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Move FilterPills and InboxFilterPills from the top (below header) to a floating position at the bottom of the note list. When position is "bottom", pills are absolutely positioned with a gradient background (transparent → card color) to create a "floating above content" effect. Pills are centered with gap-2 and wrap to multiple lines. Matches the ui-design.pen "Filter Pills Bar" frame. Co-Authored-By: Claude Opus 4.6 (1M context) --- src/components/NoteList.tsx | 6 +++--- src/components/note-list/FilterPills.tsx | 14 ++++++++++++-- src/components/note-list/InboxFilterPills.tsx | 14 ++++++++++++-- 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/src/components/NoteList.tsx b/src/components/NoteList.tsx index 13c7c0de..c84ca409 100644 --- a/src/components/NoteList.tsx +++ b/src/components/NoteList.tsx @@ -103,9 +103,7 @@ function NoteListInner({ entries, selection, selectedNote, noteListFilter, onNot return (
- {showFilterPills && } - {isInboxView && onInboxPeriodChange && } -
+
{entitySelection ? ( @@ -114,6 +112,8 @@ function NoteListInner({ entries, selection, selectedNote, noteListFilter, onNot )}
{isChangesView && deletedCount > 0 && } + {showFilterPills && } + {isInboxView && onInboxPeriodChange && }
{multiSelect.isMultiSelecting && ( diff --git a/src/components/note-list/FilterPills.tsx b/src/components/note-list/FilterPills.tsx index c3a3bb9f..abdf827d 100644 --- a/src/components/note-list/FilterPills.tsx +++ b/src/components/note-list/FilterPills.tsx @@ -5,6 +5,7 @@ interface FilterPillsProps { active: NoteListFilter counts: Record onChange: (filter: NoteListFilter) => void + position?: 'top' | 'bottom' } const PILLS: { value: NoteListFilter; label: string }[] = [ @@ -13,9 +14,18 @@ const PILLS: { value: NoteListFilter; label: string }[] = [ { value: 'trashed', label: 'Trashed' }, ] -function FilterPillsInner({ active, counts, onChange }: FilterPillsProps) { +const BOTTOM_GRADIENT = 'linear-gradient(to bottom, transparent 0%, var(--card, #fff) 30%, var(--card, #fff) 100%)' + +function FilterPillsInner({ active, counts, onChange, position = 'top' }: FilterPillsProps) { + const isBottom = position === 'bottom' return ( -
+
{PILLS.map(({ value, label }) => (