Why
Two foundational UX behaviors users expect from modern list interfaces, built once as reusable modules (src/ui/list_controls/) and wired into any current or future view:
- Type-to-filter — on enabled views, simply typing immediately filters the list (by tag/folder, file name, customized tile name) without clicking the search box first. Click-to-focus always keeps working.
- Sorting — a chip with the active sort key + asc/desc chevron, and an options menu (name, date, length, …), persisted per view (filter text never persists — views start unfiltered on launch).
Grouping is deliberately out of scope for v1 (favorites #14 + folder categories already cover it); the sort menu keeps a group-by seam for when user-assignable tags land.
Full design spec: docs/superpowers/specs/2026-07-06-list-controls-design.md (committed 1a2cdb5).
Wiring matrix
| View |
Filter |
Type-to-activate |
Sort (default) |
| Main tiles |
migrated onto FilterState |
✅ (+ click stays) |
SoundSortKey (Name ↑) |
| Slots |
✅ |
✅ |
SlotSortKey (SlotNumber ↑) |
| Shortcut assignment |
✅ |
✅ |
SlotSortKey (SlotNumber ↑) |
| Macros (#168) |
✅ |
✅ |
MacroSortKey (Name ↑) |
| Settings |
staged Discord-style search |
❌ click-only |
none |
Children (dependency order)
#168 (macros view) consumes the framework — amended by comment there.
Related prior art: #8 (search bar), #87 (Escape/focus staging), #14 (favorites), #16 (bulk-import review screen — future consumer).
Why
Two foundational UX behaviors users expect from modern list interfaces, built once as reusable modules (
src/ui/list_controls/) and wired into any current or future view:Grouping is deliberately out of scope for v1 (favorites #14 + folder categories already cover it); the sort menu keeps a group-by seam for when user-assignable tags land.
Full design spec:
docs/superpowers/specs/2026-07-06-list-controls-design.md(committed 1a2cdb5).Wiring matrix
FilterStateSoundSortKey(Name ↑)SlotSortKey(SlotNumber ↑)SlotSortKey(SlotNumber ↑)MacroSortKey(Name ↑)Children (dependency order)
#168 (macros view) consumes the framework — amended by comment there.
Related prior art: #8 (search bar), #87 (Escape/focus staging), #14 (favorites), #16 (bulk-import review screen — future consumer).