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:
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user