v3.22.3
- ac994c5: Fixed
insertContentAtcorrupting the document when inserting inline content with marks at the start of a paragraph. Thefrom - 1position adjustment now only applies to block-level content.
- ac994c5: Add an option to control whether node ranges extend when a selection only touches a node boundary.
- ac994c5: Remove unnecessary
xmlns="http://www.w3.org/1999/xhtml"attribute fromgenerateHTMLoutput by usinginnerHTMLinstead ofXMLSerializerfor HTML serialization.
- ac994c5: Fix drag selections so crossing a node boundary does not incorrectly include the next node.
- Updated dependencies [ac994c5]
- @tiptap/core@3.22.3
- @tiptap/extension-dropcursor@3.22.3
- @tiptap/extension-gapcursor@3.22.3
- @tiptap/extension-list-item@3.22.3
- @tiptap/extension-list-keymap@3.22.3
- @tiptap/extension-blockquote@3.22.3
- @tiptap/extension-bold@3.22.3
- @tiptap/extension-bullet-list@3.22.3
- @tiptap/extension-code@3.22.3
- @tiptap/extension-code-block@3.22.3
- @tiptap/extension-document@3.22.3
- @tiptap/extension-hard-break@3.22.3
- @tiptap/extension-heading@3.22.3
- @tiptap/extension-horizontal-rule@3.22.3
- @tiptap/extension-italic@3.22.3
- @tiptap/extension-link@3.22.3
- @tiptap/extension-list@3.22.3
- @tiptap/extension-ordered-list@3.22.3
- @tiptap/extension-paragraph@3.22.3
- @tiptap/extension-strike@3.22.3
- @tiptap/extension-text@3.22.3
- @tiptap/extension-underline@3.22.3
- @tiptap/extensions@3.22.3
- @tiptap/pm@3.22.3
v3.22.2
- Fix incorrect selection placement when pasting at the end of a marked text node, ensuring inclusive marks are respected
- Fixes list toggling when the entire document is selected
- Add new transaction meta handlers to programmatically show & hide the floating & bubble menus via
transaction.setMeta('menuKey', 'show')andtransaction.setMeta('menuKey', 'hide')
- Add new transaction meta handlers to programmatically show & hide the floating & bubble menus via
transaction.setMeta('menuKey', 'show')andtransaction.setMeta('menuKey', 'hide')
- Added RTL smart quote support
- Fixed an error where
flushSync()would run in<EditorContent />lifecycle
- Fixed an issue causing drag handle visibility not to update dynamically in Vue 3 components.
- Updated dependencies
- @tiptap/core@3.22.2
- @tiptap/extension-dropcursor@3.22.2
- @tiptap/extension-gapcursor@3.22.2
- @tiptap/extension-list-item@3.22.2
- @tiptap/extension-list-keymap@3.22.2
- @tiptap/extension-blockquote@3.22.2
- @tiptap/extension-bold@3.22.2
- @tiptap/extension-bullet-list@3.22.2
- @tiptap/extension-code@3.22.2
- @tiptap/extension-code-block@3.22.2
- @tiptap/extension-document@3.22.2
- @tiptap/extension-hard-break@3.22.2
- @tiptap/extension-heading@3.22.2
- @tiptap/extension-horizontal-rule@3.22.2
- @tiptap/extension-italic@3.22.2
- @tiptap/extension-link@3.22.2
- @tiptap/extension-list@3.22.2
- @tiptap/extension-ordered-list@3.22.2
- @tiptap/extension-paragraph@3.22.2
- @tiptap/extension-strike@3.22.2
- @tiptap/extension-text@3.22.2
- @tiptap/extension-underline@3.22.2
- @tiptap/extensions@3.22.2
- @tiptap/pm@3.22.2
v3.22.1
- Fixed drag handle ghost image for RTL and mixed-direction content: the ghost wrapper now uses the dragged block’s computed
direction(viadomAtPos), and the drag image hotspot uses the cursor position relative to the ghostwrapperso the preview aligns with the pointer in both LTR and RTL.
- Fix NodeView not re-rendering when a node's position changes without content or decoration changes (e.g. when a sibling node is moved within the same parent)
- Don't stop dragover/dragenter events in NodeViews, to prevent spurious drag-copy cursors
- Fix NodeView not re-rendering when a node's position changes without content or decoration changes (e.g. when a sibling node is moved within the same parent)
- Prevent React node views from crashing during deferred selection updates when ProseMirror has already detached the node view position lookup.
- Fix NodeView not re-rendering when a node's position changes without content or decoration changes (e.g. when a sibling node is moved within the same parent)
- Fix NodeView not re-rendering when a node's position changes without content or decoration changes (e.g. when a sibling node is moved within the same parent)
v3.22.0
-
Use a named import for Suggestion from
@tiptap/suggestionto avoid bundler ESM/CJS interop wrapping (__toESM) that caused CJS consumers to receive a module object instead of the callable plugin factory.This is a non-breaking internal fix identical to the one applied to
@tiptap/extension-mentionin #6994.
- Moved content validation from Yjs
beforeTransaction(whose return value was ignored) to ProseMirrorfilterTransaction, so invalid collaborative changes are now properly blocked.
- Prevent hidden bubble menus from reappearing during scroll and resize updates. Bubble menu positioning now only runs for menus that are already shown, so default text-selection menus stay hidden until they should actually open.
- Fix HTML character escaping in markdown roundtrip. HTML entities (
<,>,&,") are now decoded to literal characters when parsing markdown into the editor.<,>, and&are re-encoded when serializing back to markdown, while"is preserved as a literal character since double quotes are ordinary in markdown. Code detection for skipping encoding now uses thecode: trueextension spec instead of hardcoded type names. Literal characters inside code blocks and inline code are always preserved. - Fix ResizableNodeView ignoring node's inline setting by using
inline-flexfor inline nodes andflexfor block nodes - extendMarkRange defaults to using the attributes of the first mark of the given type, instead of
attributes = {}. In particular,extendMarkRange('link')no longer extends to adjacent links with different hrefs; restore the previous behavior withextendMarkRange('link', {}). - Fix getMarkRange attributes default to consider the first mark of the given type
- Guard mark delete event handling when
unsetMarkremoves a mark from inline content that starts at position0, preventing aRangeErrorduring the before-node lookup.
- Fix HTML character escaping in markdown roundtrip. HTML entities (
<,>,&,") are now decoded to literal characters when parsing markdown into the editor.<,>, and&are re-encoded when serializing back to markdown, while"is preserved as a literal character since double quotes are ordinary in markdown. Code detection for skipping encoding now uses thecode: trueextension spec instead of hardcoded type names. Literal characters inside code blocks and inline code are always preserved.
- Prevent inline math input rule from capturing previous character. Changed input rule to utilize negative lookbehind to prevent matching previous character. Ensures the range's
fromposition is correctly at the start of the double$signs.
- Suggestions dismissed via Escape no longer reappear when the user keeps typing in the same word — they only come back after inserting whitespace, a newline, or moving the cursor to a different trigger.
- Fix a rerender loop in the Details node view when the toggle button updates its DOM attributes through
renderToggleButton.
- Updated happy-dom to 20.8.9
- Added Markdown table alignment support. The
TableCellandTableHeadernodes now have analignattribute (left,center,right) that is parsed from Markdown column alignment markers (:---,---:,:---:) and serialized back when rendering to Markdown. Alignment is also parsed from and rendered to HTML viastyle="text-align: ...".
v3.21.0
- Add a
renderToggleButtonoption to customize the details toggle button, including its accessible label.
- Fix custom markdown tokenizer helper lexing to use Marked's active lexer so ordered list parsing no longer breaks inline tokenization in following paragraphs.
- Updated
findElementNextToCoordsto fall back toview.posAtCoordswhenelementsFromPointreturns no matching block, resolving the position to the top-level block node.
- Update emoji dataset to include latest Unicode emojis.
v3.20.3
- Forward BubbleMenu and FloatingMenu HTML props to the actual menu element so attributes like
className,style,data-*, and event handlers bind to the positioned menu container. - Generate a stable per-instance menu plugin key automatically when
pluginKeyis omitted, so multiple BubbleMenu or FloatingMenu components can be mounted without colliding.
- Forward BubbleMenu and FloatingMenu HTML props to the actual menu element so attributes like
className,style,data-*, and event handlers bind to the positioned menu container. - Generate a stable per-instance menu plugin key automatically when
pluginKeyis omitted, so multiple BubbleMenu or FloatingMenu components can be mounted without colliding.
- Fixed
isNodeEmpty()so multi-line text with non-whitespace content is no longer treated as empty whenignoreWhitespaceis enabled. - Fixed overlapping bold and italic markdown serialization and round-tripping.
- Fixed a bug where empty paragraphs accumulated in the document on every page reload when using the UniqueID extension with the Collaboration extension and an externally created Yjs provider.
- Export missing
getEmbedUrlFromYoutubeUrlandisValidYoutubeUrlembed URL utility functions
- Generate a stable per-instance menu plugin key automatically when
pluginKeyis omitted, so multiple BubbleMenu or FloatingMenu components can be mounted without colliding.
- Skip placeholder decorations on non-textblock nodes when
includeChildrenis enabled to prevent duplicate placeholders on wrapper nodes like lists.
- Fixed overlapping bold and italic markdown serialization and round-tripping.
- Fixed overlapping bold and italic markdown serialization and round-tripping.
- Fixed overlapping bold and italic markdown serialization and round-tripping.
v3.20.2
- Improved markdown empty-paragraph roundtripping across top-level and nested block content. Empty paragraphs now serialize with natural blank-line spacing for the first paragraph in a run and
markers for subsequent empty paragraphs at the same level, while parsing preserves those empty paragraphs when converting markdown back to JSON.
- Improved markdown empty-paragraph roundtripping across top-level and nested block content. Empty paragraphs now serialize with natural blank-line spacing for the first paragraph in a run and
markers for subsequent empty paragraphs at the same level, while parsing preserves those empty paragraphs when converting markdown back to JSON.
- Improved markdown empty-paragraph roundtripping across top-level and nested block content. Empty paragraphs now serialize with natural blank-line spacing for the first paragraph in a run and
markers for subsequent empty paragraphs at the same level, while parsing preserves those empty paragraphs when converting markdown back to JSON.
- Improved markdown empty-paragraph roundtripping across top-level and nested block content. Empty paragraphs now serialize with natural blank-line spacing for the first paragraph in a run and
markers for subsequent empty paragraphs at the same level, while parsing preserves those empty paragraphs when converting markdown back to JSON.
- Improved markdown empty-paragraph roundtripping across top-level and nested block content. Empty paragraphs now serialize with natural blank-line spacing for the first paragraph in a run and
markers for subsequent empty paragraphs at the same level, while parsing preserves those empty paragraphs when converting markdown back to JSON.
v3.20.1
- Fix tilde-fenced code blocks (
~~~) being silently dropped when parsing markdown
- Fix Drag event listener is removed when a plugin is registered after the DragHandle plugin.
- Add support for
types: 'all'inUniqueIDto target every node type exceptdocandtext.
- Fix inline
styleparsing inmergeAttributesfor values containing:or;(e.g.url(https://...)orurl(data:...;charset=...,)) and skip incomplete declarations