ui: round 6 — Enter submits from anywhere; model dashes ACTUALLY kept; dumbbell right

- ENTER SUBMITS REGARDLESS OF FOCUS (owner): dictation means the dock
  fields are rarely focused. New useEnterSubmits hook — a window-level
  listener inside both docks (mounted only while a problem/question is
  active). Plain Enter anywhere outside a typing surface submits the
  practice thinking / the teaching answer; typing surfaces keep their
  own handlers, buttons keep their click-activation (the collapsed
  Problem bar still expands on Enter), modified Enters untouched.
  Teaching sessions get the same law as practice — one standard.
- MODEL DASHES: the round-5 join("-") edit never landed (the batch
  script aborted on an earlier assert before reaching it) — the source
  still joined with spaces while the commit message claimed otherwise.
  Now actually joined with dashes: 'glm-5.3-flash' everywhere (picker,
  setup dialog, stats bar); pins updated to match.
- SIDEBAR: the practice dumbbell moves to the far right of the session
  row — titles sit flush with teaching rows, cleaner list.
This commit is contained in:
amosblomqvist
2026-10-05 05:18:26 +03:00
parent a2cddb4dca
commit f4775ebc93
7 changed files with 80 additions and 18 deletions
+6 -3
View File
@@ -268,9 +268,6 @@ export function SessionRow({
)}
>
<SessionStatus busy={chat.busy} />
{(chat.kind ?? "teach") === "practice" && (
<DumbbellIcon className="size-3.5 shrink-0 text-muted-foreground/70" aria-label="Practice session" />
)}
<span className="min-w-0 flex-1">
{/* Titles are the learner's/teacher's WORDS — Source Sans 3, the
same voice the words were typed in (every input is lh-prose);
@@ -280,6 +277,12 @@ export function SessionRow({
<span className="block truncate font-prose text-(length:--lh-prose-size)">{chat.title}</span>
<span className="block text-xs text-muted-foreground">{sessionMeta(chat)}</span>
</span>
{/* The dumbbell rides the FAR RIGHT (owner round 6, 2026-10-05) —
was left of the name; right-aligned keeps the titles flush with
the teaching rows and reads cleaner. */}
{(chat.kind ?? "teach") === "practice" && (
<DumbbellIcon className="size-3.5 shrink-0 text-muted-foreground/70" aria-label="Practice session" />
)}
</button>
);
}