fix(design): the saved-view chip on one line, one Escape per layer, the /watch action row (E28 S3d)

- SelectTrigger lays its toolbar value out as a row; the saved-view chip passes its glyph and
  modified dot through the icon/trailing slots (an <svg> is display:block and broke the chip in two).
- One Escape in a dialog's open list closed the list AND the dialog: the list's close flushes
  synchronously and pops its layer before the dialog's window listener runs. takeEscape() is the one
  close-on-Escape test (topmost AND not yet taken); Modal, the Welcome lightbox and useLayer use it,
  and keymap.dispatch ignores a taken Escape.
- /watch: the Download sits on the toolbar rung, level with the Repeat chip.
This commit is contained in:
2026-09-25 01:40:45 +02:00
parent 1833f594cb
commit b4a6569d0d
12 changed files with 144 additions and 26 deletions
@@ -14,12 +14,17 @@ import { SelectTrigger } from "./ui/SelectTrigger";
export default function SavedViewsPopover({
trigger,
toolbar = false,
icon,
trailing,
ariaLabel,
placement = "bottom-start",
}: {
trigger: ReactNode;
/** The toolbar's view chip: the A5 dropdown trigger around `trigger`, instead of a glyph. */
toolbar?: boolean;
/** Toolbar only: the trigger's leading glyph and its after-the-value mark, in their own slots. */
icon?: ReactNode;
trailing?: ReactNode;
ariaLabel?: string;
placement?: "bottom-start" | "bottom-end";
}) {
@@ -34,6 +39,8 @@ export default function SavedViewsPopover({
<SelectTrigger
context="toolbar"
open={open}
icon={icon}
trailing={trailing}
ref={pop.refs.setReference}
{...pop.getReferenceProps()}
aria-label={label}