fix(ui): focus, paging and state that a key or a finger can reach

- A key landing on a side panel's tab steps into the card it peeks open, not onto the hidden tab.
- The Channels cards keep their status / pager row at the list's end while the band is folded.
- A menu row's note shows on an enabled row too: the download state under 'Download…', not a title.
- A removal chip hands the focus to its neighbour before it goes, for every caller (the feed's and
  Plex's active filters); the hidden-filter cue's own copy is gone.
- Back to a spot within a page's end spacer lands at the page's end, not its top.
- A running push / revert is tracked per list: another list's push is no longer refused unseen.
This commit is contained in:
2026-09-27 19:43:04 +02:00
parent e31a588f19
commit 740602b9bf
15 changed files with 231 additions and 48 deletions
@@ -44,13 +44,14 @@ function downloadRow(state: string | undefined) {
}
describe("the video menu's download row", () => {
it("says what it does, whatever the state, and carries the state as its hint", async () => {
// Round 2 (F5): the state rode in a `title`, which a key or a finger never shows.
it("says what it does, whatever the state, and carries the state as its note", async () => {
const done = downloadRow("done");
await waitFor(() => expect(done().title).toBe("downloads.button.downloaded"));
await waitFor(() => expect(done().note).toBe("downloads.button.downloaded"));
expect(done().label).toBe("downloads.menu.download");
cleanup();
const none = downloadRow(undefined);
await waitFor(() => expect(none().label).toBe("downloads.menu.download"));
expect(none().title).toBeUndefined();
expect(none().note).toBeUndefined();
});
});