Spelling popover: right-click corrections + robust word resolution
Resolve the misspelled word from the click/right-click position and the checker rather than from the .petal-misspelling DOM span: clicking a word moves the caret into it, which fires the decoration rebuild that deliberately un-underlines the caret word, so the span is already gone by the time the handler runs. Factored into openMisspellAt(pos), which only opens when the checker actually flags the word, and is gated to clicks inside .petal-prose so a click on a floating card doesn't resolve a word hidden behind it. Right-click now offers spelling corrections first on a misspelled word (the familiar "did you mean" gesture), falling back to word lookup otherwise. AskPetal: focus the input with preventScroll so opening the card doesn't jump the document to the top. Claude-Session: https://claude.ai/code/session_016Yr6jELuRc7hyzYLccQKZd
This commit is contained in:
@@ -34,9 +34,12 @@ export function AskPetal({ suggestionId, explanation }: Props) {
|
||||
if (el) el.scrollTop = el.scrollHeight
|
||||
}, [messages])
|
||||
|
||||
// Focus the input when the panel opens.
|
||||
// Focus the input when the panel opens. preventScroll: the card is already on
|
||||
// screen as an absolutely-positioned overlay, and a default focus() would make
|
||||
// the browser scroll its ancestor to "reveal" the input — jumping the document
|
||||
// to the top.
|
||||
useEffect(() => {
|
||||
inputRef.current?.focus()
|
||||
inputRef.current?.focus({ preventScroll: true })
|
||||
}, [])
|
||||
|
||||
// Fetch the Chinese translation of the explanation to seed the first bubble.
|
||||
@@ -95,7 +98,7 @@ export function AskPetal({ suggestionId, explanation }: Props) {
|
||||
console.error('Ask Petal chat failed:', err)
|
||||
} finally {
|
||||
setStreaming(false)
|
||||
inputRef.current?.focus()
|
||||
inputRef.current?.focus({ preventScroll: true })
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user