feat(design): the download, notification and Scheduler action lists (C1) — the rows' "…", the band's and the strip's "…" (E28 S3e3)

A download row keeps play (pause / resume / retry in the queue) and the save link; the editors,
sharing, re-download, the copies and cancel / delete / remove moved into its "…"
(useDownloadActions). A link inside the row keeps the browser's own right-click menu. A
notification row keeps its link and its unread mark and shows its dismiss on hover; an activity
notice's Find in feed and Undo are in its "…". The inbox band keeps Mark all read and puts Clear
everything, now behind a confirm, in its "…". The Scheduler strip keeps Run all and Pause and puts
Purge discovery in its "…". Polled lists key their menus by id (keyOf). ui/menuGroups draws a
rule only between two non-empty groups. Find in feed also drops the tag, search and age filters
that could hide the video it looks for.
This commit is contained in:
2026-09-26 07:10:02 +02:00
parent c4917619ee
commit a2d17d693c
16 changed files with 1455 additions and 324 deletions
+12
View File
@@ -0,0 +1,12 @@
import { type ActionMenuItem } from "./ActionMenu";
/** One menu from its groups, a rule between each two that are not empty: the first row of every
* group but the first carries `separatorBefore`. An empty group leaves no rule behind, so a row
* that a job's kind or state takes out cannot strand a divider at the top or doubled in the middle. */
export function menuGroups(...groups: readonly (readonly ActionMenuItem[])[]): ActionMenuItem[] {
return groups
.filter((g) => g.length > 0)
.flatMap((g, gi) =>
g.map((it, i) => (i === 0 && gi > 0 ? { ...it, separatorBefore: true } : it)),
);
}