Conversation
…t rule When `$$$x$$$` was typed inside an otherwise empty paragraph, the input rule replaced only the textblock content, leaving an empty wrapper paragraph above the inserted block math node. Resolve the match position and, when the match spans the entire host textblock, expand the replacement to include the parent's open/close so the paragraph is consumed instead of split. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ReplaceWith The previous handler unconditionally replaced the entire host textblock when the match consumed it, which produced an invalid document in schemas where the parent requires a textblock as the first child (e.g. listItem with `content: 'paragraph block*'`). Use `canReplaceWith` on the grandparent to verify the replacement is schema-valid, falling back to the inner-range replacement otherwise. Adds a regression test for the listItem case. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…single replaceWith Replace the if/else around `tr.replaceWith` with a single call driven by a `replacementRange` ternary, and rename `grandparentAcceptsReplacement` to `canReplaceHostTextblock` with a short inline note describing what it checks. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…ns (#7797) * docs(drag-handle): improve JSDoc clarity for nested drag handle options * chore: add changeset * improve writing in jsdocs * improve writing in jsdocs * add new line to changeset file
…o prevent memory leak (#7795) * fix(core): release extension parent/child graph on Editor.destroy() to prevent memory leak (#7769) * fix(core): make Editor.destroy() idempotent with a destroyed flag * fix(core): avoid nulling ancestor.child in ExtensionManager.destroy() to prevent cross-editor side effects * fix(core): address PR review feedback — preserve extension.parent/child on shared instances, clear extensionStorage, fix walk-up loop * fix(core): walk full parent chain in ExtensionManager.destroy() and add multi-level test * docs(core): clarify ExtensionManager.destroy() JSDoc on what is mutated
* fix(markdown): handle empty initial markdown content
When initial content is an empty string with contentType 'markdown',
MarkdownManager.parse('') returns { type: 'doc', content: [] } which
violates the schema's block+ requirement.
Instead of overriding editor options with an invalid doc, leave the
content as-is so ProseMirror's DOMParser.fillBefore can insert the
required default paragraph.
Closes #7157
* chore: add changeset
* fix(markdown): enhance tests for empty markdown content and support bold formatting
…paragraph fix(extension-mathematics): consume host paragraph in block math input rule
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
See Commits and Changes for more details.
Created by
pull[bot] (v2.0.0-alpha.4)
Can you help keep this open source service alive? 💖 Please sponsor : )