Releases: ueberdosis/tiptap
v3.5.2
v3.5.1
@tiptap/extension-floating-menu
Patch Changes
- Add
appendTosupport toFloatingMenuand pass it through in React/Vue 2/Vue 3 for bothBubbleMenuandFloatingMenuto allow fixing clipping/z-index issues.
@tiptap/react
Patch Changes
- Add
appendTosupport toFloatingMenuand pass it through in React/Vue 2/Vue 3 for bothBubbleMenuandFloatingMenuto allow fixing clipping/z-index issues.
@tiptap/vue-2
Patch Changes
- Add
appendTosupport toFloatingMenuand pass it through in React/Vue 2/Vue 3 for bothBubbleMenuandFloatingMenuto allow fixing clipping/z-index issues.
@tiptap/vue-3
Patch Changes
- Add
appendTosupport toFloatingMenuand pass it through in React/Vue 2/Vue 3 for bothBubbleMenuandFloatingMenuto allow fixing clipping/z-index issues.
v3.5.0
Releases
@tiptap/extension-bubble-menu@3.5.0
Minor Changes
- 8fa5955: Add
updateBubbleMenuPositioncommand to update position of bubble menu. This command lets developers programmatically update the position of the bubble menu in response to certain events (for example, when the bubble menu is resized).
@tiptap/extension-drag-handle@3.5.0
Minor Changes
- daa51c4: Add
getReferencedVirtualElementoption to the drag handle extension to customize the position of the drag handle.
Patch Changes
- 3eb5360: Fixed
findElementNextToCoordsreturning incorrect nodes when the position is at a node boundary. The function now correctly identifies leaf nodes (like images, horizontal rules) by checking$pos.nodeAfterbefore falling back to the parent node lookup.
@tiptap/vue-2@3.5.0
Patch Changes
- d56c9dd: Fix Vue2 menus visibility bug.
v3.4.6
Releases
@tiptap/core@3.4.6
Patch Changes
-
968016f: Added support for the
undoableoption in InputRules (matching ProseMirror’s implementation).- When
false, the change will not be tracked as undoable. - Default remains
truefor backward compatibility.
This brings Tiptap’s InputRules behavior in line with ProseMirror and gives developers finer control over undo functionality.
- When
v3.4.5
Releases
@tiptap/core@3.4.5
Patch Changes
- 0226d42: Fix an issue where injected CSS was not mounted correctly when the editor instance was mounted. The fix ensures CSS injected by the editor is attached to the document when the editor mounts, preventing missing styles in some mount/unmount scenarios.
- 37af83b: refactor: replace
map(...).flat()withflatMapfor simpler, more efficient array flattening - f598ac7: Fix bug in
insertContentAtcommand where extra content would get deleted when the selection was at the beginning of the document and a node was inserted
@tiptap/extension-code-block-lowlight@3.4.5
Patch Changes
- 13fb996: refactor: replace
map(...).flat()withflatMapfor simpler, more efficient array flattening
@tiptap/extension-emoji@3.4.5
Patch Changes
- 82121b8: refactor: replace
map(...).flat()withflatMapfor simpler, more efficient array flattening
@tiptap/extension-mention@3.4.5
Patch Changes
-
f472c5b: Use a named import for Suggestion from
@tiptap/suggestionto avoid bundler ESM/CJS interop
wrapping (__toESM) that caused Jest/CJS consumers to receive a module object instead of the
callable plugin factory.This is a non-breaking internal fix. It keeps runtime module shape stable for CommonJS (Jest)
and prevents the TypeError thrown when the extension attempted to call a non-function.
@tiptap/vue-3@3.4.5
Patch Changes
- bfcd958: refactor: replace
map(...).flat()withflatMapfor simpler, more efficient array flattening
v3.4.4
v3.4.3
Releases
@tiptap/core@3.4.3
Patch Changes
- 1ea8906: When the editor view is created, it now will also include
nodeViewsandmarkViewsproperties instead of setting them afterward. This avoids serialization of the editor state to HTML which will be replaced by node views anyway.
@tiptap/extension-bubble-menu@3.4.3
Patch Changes
-
915ed65: Add custom positioning support to the BubbleMenu.
This change adds an opt-in API that allows consumers to fully control how the BubbleMenu is positioned. Instead of relying solely on the internal placement logic, you can now provide a function (for example
getPosition) that receives the relevant context (editor instance and menu DOM element) and returns the desired coordinates or positioning style.
@tiptap/react@3.4.3
Patch Changes
-
915ed65: Add custom positioning support to the BubbleMenu.
This change adds an opt-in API that allows consumers to fully control how the BubbleMenu is positioned. Instead of relying solely on the internal placement logic, you can now provide a function (for example
getPosition) that receives the relevant context (editor instance and menu DOM element) and returns the desired coordinates or positioning style.
@tiptap/vue-2@3.4.3
Patch Changes
-
915ed65: Add custom positioning support to the BubbleMenu.
This change adds an opt-in API that allows consumers to fully control how the BubbleMenu is positioned. Instead of relying solely on the internal placement logic, you can now provide a function (for example
getPosition) that receives the relevant context (editor instance and menu DOM element) and returns the desired coordinates or positioning style.
@tiptap/vue-3@3.4.3
Patch Changes
-
915ed65: Add custom positioning support to the BubbleMenu.
This change adds an opt-in API that allows consumers to fully control how the BubbleMenu is positioned. Instead of relying solely on the internal placement logic, you can now provide a function (for example
getPosition) that receives the relevant context (editor instance and menu DOM element) and returns the desired coordinates or positioning style.
v3.4.2
Releases
@tiptap/extension-bubble-menu@3.4.2
Patch Changes
-
24445c4: Listen to a custom scroll target when positioning the BubbleMenu and
ensure the scroll listener is cleaned up on destroy.The BubbleMenu now accepts an optional
scrollTargetoption which will be
used instead ofwindowwhen listening for scroll events that affect the
menu positioning. The plugin also removes the scroll listener during
cleanup.No user-facing API changes other than the new optional
scrollTargetsetting.
v3.4.1
Releases
@tiptap/extension-text-style@3.4.1
Patch Changes
-
46fa8b8: Prefer the raw inline
styleattribute when parsingcolorand
background-colorso the original format (hex, rgba/hsla, etc.) is
preserved instead of falling back to the computedelement.style.*
value (which often resolves torgb(...)).This fixes mismatches where consumers (for example, demo toolbars and
color pickers) expected the original hex values when initializing the
editor from HTML.- The
colorandbackground-colorparsers now look for astyle
attribute first and extract the declared value. If no raw style is
present, they still fall back toelement.style.color/
element.style.backgroundColor.
MIGRATION NOTES
- This is a patch-level change. It corrects parsing behavior and is the
least-disruptive fix for the issue. - If your code relied on the parser returning computed
rgb(...)
strings, you may see different string values (for example#958DF1
instead ofrgb(149, 141, 241)) when HTML contained hex values. - If you need a stable, normalized format for comparisons, normalize the
attribute (for example with a color utility liketinycolor2) before
comparing or use the editor APIs in a way that doesn't depend on the
exact string representation. - @tiptap/core@3.4.1
- The
@tiptap/react@3.4.1
Patch Changes
- 4dd8d58: fix: @types/react version mismatch
@tiptap/suggestion@3.4.1
Patch Changes
-
59fb86f: Previously,
clientRectwas only obtained throughdecorationNode. IfdecorationNodecould not be obtained,clientRectwas set tonull, which caused the suggestion not to render in some IME scenarios (notably Chinese IME).This change adds a fallback method to compute
clientRectfrom the editor's cursor position whendecorationNodeis not available. It generates a DOMRect based on the cursor coordinates so the suggestion can render even when the decoration node is missing.
v3.4.0
Releases
@tiptap/core@3.4.0
Minor Changes
- ad51daa: Add
mountandunmountevents to theEditorinstance for tracking mounts and unmounts
Patch Changes
-
895c73f: Fix
can().toggleMark()returning incorrect result when cursor is inside nodes that disallow marksFixed an issue where
can().toggleMark('bold')incorrectly returnedtruewhen the cursor was positioned inside a code block (with no selection), even though marks are not allowed in code blocks. The method now correctly returnsfalsein this scenario by checking if the parent node allows the mark type when the selection is a cursor.
@tiptap/extension-dropcursor@3.4.0
Patch Changes
- ef909f1: Updated
DropcursorOptions.colortypes to use types defined inprosemirror-dropcursor
@tiptap/extension-code-block@3.4.0
Patch Changes
-
11c8085: Added indentation support for code blocks via
Tab. Is deactivated by default.New Extension Options:
enableTabIndentation: boolean- controls if tab completion should be enabledtabSize: number- controls how many spaces are inserted for a tab
@tiptap/extension-code-block-lowlight@3.4.0
Patch Changes
-
11c8085: Added indentation support for code blocks via
Tab. Is deactivated by default.New Extension Options:
enableTabIndentation: boolean- controls if tab completion should be enabledtabSize: number- controls how many spaces are inserted for a tab
@tiptap/extension-details@3.4.0
Patch Changes
- d3773c7: Fixed an issue where the input method editor (IME) failed to handle Chinese text correctly when entering the first word. Users can now input multiple words as expected.
@tiptap/extension-drag-handle-vue-2@3.4.0
Patch Changes
- 2cb08d3: Use factory function for object default value as required by vue 2.
- 2cb08d3: Fixed a bug that would cause Vue 2 to throw errors in console because Vue 2 expects factory functions for prop defaults
@tiptap/suggestion@3.4.0
Patch Changes
-
3733bb9: Allow consumers to handle the Escape key via
render().onKeyDownbefore the suggestion plugin auto-exits.Previously the suggestion plugin intercepted Escape internally and immediately called
onExit, preventingrender().onKeyDownfrom receiving the event and stopping propagation. Nowrender().onKeyDownis invoked first for Escape; if it returnstruethe plugin assumes the consumer handled the event (so they can callevent.preventDefault()/event.stopPropagation()and optionally callexitSuggestion(view)themselves). If it returnsfalse(or is absent), the plugin will continue to callonExitand close the suggestion as before.This change enables scenarios where the editor is inside a modal/drawer and the consumer needs to prevent the outer UI from reacting to Escape while still controlling the suggestion's lifecycle.
-
90cbed5: Remove the global document
mousedownhandler that closed suggestion popups when clicking outside.Previously the suggestion plugin listened for document
mousedownevents and closed suggestion UIs when the user clicked outside the editor or suggestion portal. That behavior has been removed to avoid framework-specific coupling (for example reliance on.react-renderer) and related compatibility issues.Now suggestions are closed via other signals:
- pressing Escape (unchanged)
- selection/cursor changes
- renderer.onExit (renderers can call this)
- programmatic calls to
exitSuggestion(view)