Skip to content

fix: prevent inline suggestion from disappearing on heavy DOM sites#344

Merged
bartekplus merged 2 commits intomasterfrom
fix/inline-suggestion-disappearing-on-heavy-dom-sites
Mar 23, 2026
Merged

fix: prevent inline suggestion from disappearing on heavy DOM sites#344
bartekplus merged 2 commits intomasterfrom
fix/inline-suggestion-disappearing-on-heavy-dom-sites

Conversation

@bartekplus
Copy link
Copy Markdown
Owner

Summary

  • Fix inline suggestion ghost text disappearing on sites like Google Translate that perform heavy DOM rebuilds (500+ mutations per keystroke)
  • Three root causes identified and fixed: transient blur from textarea replacement, cross-entry ghost cleanup, and external DOM removal of ghost elements
  • Fix Tab key consuming keypress when no suggestions are visible

Test plan

  • Open https://translate.google.pl/ and type a partial word (e.g. "Wa") — inline suggestion should appear and stay visible
  • Press Tab — should accept the suggestion
  • Type a word, wait for inline to show, then click outside — inline should dismiss
  • Verify inline suggestions still work normally on regular sites (e.g. GitHub, Gmail)
  • When inline is dismissed (e.g. by Escape), Tab should pass through to the browser

🤖 Generated with Claude Code

bartekplus and others added 2 commits March 23, 2026 20:29
…DOM rebuilds

Sites like Google Translate replace textarea elements and rebuild large
portions of the DOM on every keystroke (500+ mutations). This caused the
inline ghost text to vanish through three independent mechanisms:

1. Transient blur: the old textarea fires blur when replaced, even though
   focus immediately moves to the new textarea. Fixed by deferring blur
   dismiss to a microtask and rechecking focus state.

2. Cross-entry cleanup: stale entry disposal called a global removeAll()
   that destroyed the active entry's ghost div. Fixed by scoping ghost
   elements with a per-entry data attribute and using clearForEntry().

3. External DOM removal: the DOM rebuild physically removed the ghost div
   from the document. Fixed by observing the ghost with a MutationObserver
   and auto-re-rendering when it's removed externally.

Also fixes Tab consuming the keypress after suggestions were dismissed
by requiring active suggestions before the request-and-auto-accept path.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- InlineSuggestionPresenter: test clearForEntry scoping, clearAll global
  behavior, and auto-re-render after external DOM removal
- InlineSuggestionView: test removeForEntry preserves other entries' ghosts
- SuggestionKeyboardHandler: test Tab passes through when suggestions
  are dismissed (empty suggestions array)
- Update existing tests for deferred blur dismiss (await microtask) and
  entry-scoped cleanup (removeForEntry instead of removeAll)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@bartekplus bartekplus merged commit 83cdc38 into master Mar 23, 2026
8 checks passed
@bartekplus bartekplus deleted the fix/inline-suggestion-disappearing-on-heavy-dom-sites branch March 23, 2026 19:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant