Commit dbce0f6
committed
fix(editor): prevent scroll-to-top when clicking toolbar buttons (SD-1780)
Toolbar buttons had tabindex="0" but no mousedown prevention, so
clicking them caused the browser to transfer focus away from the
hidden ProseMirror editor. The subsequent refocus triggered
ProseMirror's selectionToDOM, and the browser asynchronously scrolled
to make the DOM selection visible inside the hidden editor at
position:fixed top:0. This only manifested when the window was the
scroll container (not a div with overflow:auto).
Two fixes applied:
1. Toolbar mousedown preventDefault for non-input elements. This is
the standard pattern used by ProseMirror's example editor, Tiptap,
and most WYSIWYG editors. It keeps the PM editor focused throughout
toolbar interactions.
2. requestAnimationFrame safety net in wrapHiddenEditorFocus. After
the synchronous scroll restoration, a RAF callback catches any
async browser scroll caused by layout reflow post-focus.1 parent e925ef9 commit dbce0f6
3 files changed
Lines changed: 48 additions & 1 deletion
File tree
- packages/super-editor/src
- components/toolbar
- core/presentation-editor
- tests
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
78 | 78 | | |
79 | 79 | | |
80 | 80 | | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
81 | 96 | | |
82 | 97 | | |
83 | 98 | | |
84 | | - | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
85 | 107 | | |
86 | 108 | | |
87 | 109 | | |
| |||
Lines changed: 9 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
743 | 743 | | |
744 | 744 | | |
745 | 745 | | |
| 746 | + | |
| 747 | + | |
| 748 | + | |
| 749 | + | |
| 750 | + | |
| 751 | + | |
| 752 | + | |
| 753 | + | |
| 754 | + | |
746 | 755 | | |
747 | 756 | | |
748 | 757 | | |
| |||
Lines changed: 16 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
355 | 355 | | |
356 | 356 | | |
357 | 357 | | |
| 358 | + | |
| 359 | + | |
| 360 | + | |
| 361 | + | |
| 362 | + | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
| 372 | + | |
| 373 | + | |
358 | 374 | | |
359 | 375 | | |
360 | 376 | | |
| |||
0 commit comments