feat(ui): E31 S4a — rail rows are links, the channel page opens on unwatched, users and audit tidied

- Nav rail page rows are real links (/?page=<id>): a middle-click or
  Ctrl-click opens the page in a new tab; a plain click stays in-app.
- A fresh channel page shows the unwatched videos; a picked watch state
  is a remembered preference (channelShow).
- Users: the role, suspend and delete move into the row's one menu
  (the "…", right-click, Shift+F10); locked ones keep their reason.
- Audit log: back-to-back successful runs of one job fold into one row
  that opens to the earlier ones; a failed run reads in the danger colour.
- DESIGN.md decision log: the E31 picks.
This commit is contained in:
2026-10-01 22:51:38 +02:00
parent ab146211fa
commit 87d71e3762
23 changed files with 542 additions and 98 deletions
+7
View File
@@ -17,6 +17,13 @@ export function navigateTo(p: Page): void {
_navigate?.(p);
}
/** A page's own address, for a link to it (the nav rail's rows). Only the page: the rest of a page's
* state — the feed's filters, Plex's library — a fresh tab restores from the account's own storage,
* as a bookmark would; the CURRENT page's params would be the wrong page's state. */
export function pageHref(p: Page): string {
return `/?page=${p}`;
}
/** Should this click be handled IN-APP, or left to the browser?
*
* An anchor that ALSO navigates in-app has to keep the browser's own gestures working — Ctrl/Cmd-click