keyboard: Enter submits from the custom answer; Enter opens the waiting check (keyboard 1-2 of 4)

Slice 1 — the ask's custom-answer field: Enter submits directly. A
single-line input with no newline to protect, and typing has already
selected the row — every Enter (shift or not) rides the same submit()
seam as the button, dictation finish-first included. No more the
Esc-then-Enter dance to file a custom answer.

Slice 2 — Enter opens the waiting check (owner, keyboard round
2026-10-06): while a question waits with the dock CLOSED (behind its
reveal invitation, or collapsed by scroll) Enter is never dead. Any
live dictation finishes FIRST — the flush lands in the reading-thinking
field, the live claim, per the nothing-gets-lost law — then the check
reveals/expands. Two seams: the reading-thinking field's own Enter
(plain or ⌘/Ctrl; Shift+Enter keeps the newline convention — the dump
convention survives for deliberate breaks, and Enter stays a newline
once the check is OPEN), and a document-level listener for plain-focus
Enter — gated to skip typing surfaces and focused buttons, which own
their own Enter.

1427 tests, tsc, lint, build green.
This commit is contained in:
amosblomqvist
2026-10-07 00:00:57 +03:00
parent 95ba9c8272
commit 9007e6eb7a
3 changed files with 71 additions and 1 deletions
+11
View File
@@ -667,6 +667,17 @@ function QuestionDockForm({
e.currentTarget.blur();
setKbdIdx(optionCount);
}
// Enter submits directly (owner, keyboard round 2026-10-06):
// the custom answer is a single-line input — no newline
// to protect, and typing has already selected the row, so
// the payload is ready. Every Enter (shift or not — nothing
// else could ever happen in a one-line field) rides the
// same submit seam as the button, dictation finish-first
// included.
if (e.key === "Enter") {
e.preventDefault();
submit();
}
}}
placeholder="Type your own answer…"
className="lh-input w-full min-w-0 flex-1 bg-transparent outline-none placeholder:text-muted-foreground"