feat(tui): Gallery screen — search, filter, sort #67

Merged
charles merged 1 commit from tui/gallery-filter-28 into main 2026-04-11 20:42:47 +00:00
Owner

Stacks on #66. Closes charles/loom#28.

GalleryFilter + search_input + searching flag. / enters search mode; editing keys update search_input; Enter commits into filter.search, Esc cancels. S cycles sort (NewestFirst → OldestFirst → ByFavorite → ByModel → wrap).

3 new tests, 87 total. Actual pagination against GalleryStorage::list(&filter) is wired with the later glue PR; this ticket owns the filter state machine.

Stacks on #66. Closes charles/loom#28. `GalleryFilter` + `search_input` + `searching` flag. `/` enters search mode; editing keys update `search_input`; Enter commits into `filter.search`, Esc cancels. `S` cycles sort (NewestFirst → OldestFirst → ByFavorite → ByModel → wrap). 3 new tests, 87 total. Actual pagination against `GalleryStorage::list(&filter)` is wired with the later glue PR; this ticket owns the filter state machine.
Extends GalleryScreen with a GalleryFilter, a search input, and a
search-entry mode. / enters search mode; printable chars/Backspace/
Ctrl+U edit the live input; Enter commits into filter.search and
exits; Esc cancels and restores. S cycles through the four sort
modes (NewestFirst → OldestFirst → ByFavorite → ByModel → wrap).

Actual paging against GalleryStorage::list(&filter) is wired in the
later glue PR; this ticket owns the filter state machine.

Closes charles/loom#28

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
charles changed target branch from tui/gallery-grid-27 to main 2026-04-11 20:42:45 +00:00
charles deleted branch tui/gallery-filter-28 2026-04-11 20:42:47 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
charles/loom!67
No description provided.