Closes #134.
What changed
Every repository tab now draws its filters and search as one row:
- Left: state/kind chips, labelled dropdowns, ref pickers — in that tab’s own order.
- Right: the search field, its button, and the clear action, in one
.filters-searchgroup that takes the row’s leftover space (margin-left: auto).
Pages
- Issues: state chips + Label + Assignee + Search on one line. The chips are inside the form now, so a search keeps the selected state; the htmx swap replaces the row with the server’s values.
- Changes: state chips + Search.
- Activity: kind chips + Actor + Assignee, with Clear on the right when a filter is active. The chips are inside the form so a picker change keeps the kind.
- Code: Branch and Tag pickers on the left, Search on the right (the search form moved after the ref pickers).
- Code search and global search: the same
.filters-searchgroup, so a lone search sits where every other page’s search sits. - Runs, releases, compare: unchanged; they have no search, and runs’ chips are already one row.
Responsive
The row keeps wrapping at medium widths and stacks on a phone
(max-width: 720px). The search stays one line there: the field flexes and the
button stays beside it.
Tests
TestFilterRowPutsFiltersBeforeSearch checks every surface: a .filters row
exists, a .filters-search group is the last thing in it, chips/labelled
filters come before it, and the tabs that own chips keep them inside the row.
TestFilterRowsShareOneShape and TestCodeBrowserRefPickers still pass.
gofmt, go vet, the link check, the full -race suite and
vole workflow run verify are green.