Skip to content

fix(extensions/selection): hide native selection while editor is blurred#7907

Open
ozdemircibaris wants to merge 1 commit into
mainfrom
fix/selection-multiline-highlight
Open

fix(extensions/selection): hide native selection while editor is blurred#7907
ozdemircibaris wants to merge 1 commit into
mainfrom
fix/selection-multiline-highlight

Conversation

@ozdemircibaris
Copy link
Copy Markdown
Contributor

Changes Overview

The Selection extension now hides the native browser selection while the editor is blurred, so only its styled .selection decoration is shown; previously a multi-line selection left the native highlight bleeding to the full width of each wrapped line, beyond the selected text.

Implementation Approach

On editor creation the extension injects a small scoped stylesheet (via core's existing createStyleTag utility, honoring the editor's injectCSS/injectNonce options) that makes ::selection transparent on a blurred editor (.ProseMirror:not(.ProseMirror-focused)), mirroring core's existing ProseMirror-hideselection pattern.

Testing Done

Added packages/extensions/__tests__/selection.spec.ts asserting the stylesheet is injected (and skipped when injectCSS: false); lint, build, the extensions unit tests, and the existing Selection e2e on Chromium + Firefox all pass.

Verification Steps

Open the Selection demo, select text spanning multiple lines, then blur the editor (e.g. focus another element); the highlight should hug only the selected text instead of filling the empty space at the end of each wrapped line.

Additional Notes

The React/Vue demos were updated to multi-line content and a multi-line selection so the behavior is visible; the suppression applies to any blurred ProseMirror editor on the page, matching core's global ProseMirror-hideselection approach.

AI Usage

  • I have used AI tools (e.g., ChatGPT, Claude, Copilot) in creating this PR.
    • Used Claude Code to reproduce and verify the bug, implement the CSS-injection fix, add the unit test, and update the React/Vue demos.

Checklist

  • I have created a changeset for this PR if necessary.
  • My changes do not break the library.
  • I have added tests where applicable.
  • I have followed the project guidelines.
  • I have fixed any lint issues.

Related Issues

Closes #7006

@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented Jun 1, 2026

🦋 Changeset detected

Latest commit: 75e8404

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 73 packages
Name Type
@tiptap/extensions Patch
tiptap-demos Patch
@tiptap/extension-character-count Patch
@tiptap/extension-dropcursor Patch
@tiptap/extension-focus Patch
@tiptap/extension-gapcursor Patch
@tiptap/extension-history Patch
@tiptap/extension-placeholder Patch
@tiptap/core Patch
@tiptap/extension-audio Patch
@tiptap/extension-blockquote Patch
@tiptap/extension-bold Patch
@tiptap/extension-bubble-menu Patch
@tiptap/extension-bullet-list Patch
@tiptap/extension-code-block-lowlight Patch
@tiptap/extension-code-block Patch
@tiptap/extension-code Patch
@tiptap/extension-collaboration-caret Patch
@tiptap/extension-collaboration Patch
@tiptap/extension-color Patch
@tiptap/extension-details Patch
@tiptap/extension-document Patch
@tiptap/extension-drag-handle-react Patch
@tiptap/extension-drag-handle-vue-2 Patch
@tiptap/extension-drag-handle-vue-3 Patch
@tiptap/extension-drag-handle Patch
@tiptap/extension-emoji Patch
@tiptap/extension-file-handler Patch
@tiptap/extension-floating-menu Patch
@tiptap/extension-font-family Patch
@tiptap/extension-hard-break Patch
@tiptap/extension-heading Patch
@tiptap/extension-highlight Patch
@tiptap/extension-horizontal-rule Patch
@tiptap/extension-image Patch
@tiptap/extension-invisible-characters Patch
@tiptap/extension-italic Patch
@tiptap/extension-link Patch
@tiptap/extension-list Patch
@tiptap/extension-mathematics Patch
@tiptap/extension-mention Patch
@tiptap/extension-node-range Patch
@tiptap/extension-ordered-list Patch
@tiptap/extension-paragraph Patch
@tiptap/extension-strike Patch
@tiptap/extension-subscript Patch
@tiptap/extension-superscript Patch
@tiptap/extension-table-of-contents Patch
@tiptap/extension-table Patch
@tiptap/extension-text-align Patch
@tiptap/extension-text-style Patch
@tiptap/extension-text Patch
@tiptap/extension-twitch Patch
@tiptap/extension-typography Patch
@tiptap/extension-underline Patch
@tiptap/extension-unique-id Patch
@tiptap/extension-youtube Patch
@tiptap/html Patch
@tiptap/markdown Patch
@tiptap/pm Patch
@tiptap/react Patch
@tiptap/starter-kit Patch
@tiptap/static-renderer Patch
@tiptap/suggestion Patch
@tiptap/vue-2 Patch
@tiptap/vue-3 Patch
@tiptap/extension-list-item Patch
@tiptap/extension-list-keymap Patch
@tiptap/extension-table-cell Patch
@tiptap/extension-table-header Patch
@tiptap/extension-table-row Patch
@tiptap/extension-task-item Patch
@tiptap/extension-task-list Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@netlify
Copy link
Copy Markdown

netlify Bot commented Jun 1, 2026

Deploy Preview for tiptap-embed ready!

Name Link
🔨 Latest commit 75e8404
🔍 Latest deploy log https://app.netlify.com/projects/tiptap-embed/deploys/6a1da397b969800008d94274
😎 Deploy Preview https://deploy-preview-7907--tiptap-embed.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@ozdemircibaris ozdemircibaris self-assigned this Jun 1, 2026
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.

Selection extension shows incorrect highlight when selecting across multiple nodes

1 participant