Skip to content

Releases: ueberdosis/tiptap

v3.5.2

24 Sep 20:13
97a00f8

Choose a tag to compare

Releases

v3.5.2

@tiptap/react

Patch Changes

  • Tiptap will now correctly insert a React MarkViews' content into the correct element within MarkViewContent component

v3.5.1

23 Sep 20:59
5eac770

Choose a tag to compare

@tiptap/extension-floating-menu

Patch Changes

  • Add appendTo support to FloatingMenu and pass it through in React/Vue 2/Vue 3 for both BubbleMenu and FloatingMenu to allow fixing clipping/z-index issues.

@tiptap/react

Patch Changes

  • Add appendTo support to FloatingMenu and pass it through in React/Vue 2/Vue 3 for both BubbleMenu and FloatingMenu to allow fixing clipping/z-index issues.

@tiptap/vue-2

Patch Changes

  • Add appendTo support to FloatingMenu and pass it through in React/Vue 2/Vue 3 for both BubbleMenu and FloatingMenu to allow fixing clipping/z-index issues.

@tiptap/vue-3

Patch Changes

  • Add appendTo support to FloatingMenu and pass it through in React/Vue 2/Vue 3 for both BubbleMenu and FloatingMenu to allow fixing clipping/z-index issues.

v3.5.0

23 Sep 06:49
2b82cb1

Choose a tag to compare

Releases

@tiptap/extension-bubble-menu@3.5.0

Minor Changes

  • 8fa5955: Add updateBubbleMenuPosition command 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 getReferencedVirtualElement option to the drag handle extension to customize the position of the drag handle.

Patch Changes

  • 3eb5360: Fixed findElementNextToCoords returning incorrect nodes when the position is at a node boundary. The function now correctly identifies leaf nodes (like images, horizontal rules) by checking $pos.nodeAfter before falling back to the parent node lookup.

@tiptap/vue-2@3.5.0

Patch Changes

  • d56c9dd: Fix Vue2 menus visibility bug.

v3.4.6

22 Sep 19:20
4c52c72

Choose a tag to compare

Releases

@tiptap/core@3.4.6

Patch Changes

  • 968016f: Added support for the undoable option in InputRules (matching ProseMirror’s implementation).

    • When false, the change will not be tracked as undoable.
    • Default remains true for backward compatibility.

    This brings Tiptap’s InputRules behavior in line with ProseMirror and gives developers finer control over undo functionality.

v3.4.5

22 Sep 11:03
fd61b0c

Choose a tag to compare

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() with flatMap for simpler, more efficient array flattening
  • f598ac7: Fix bug in insertContentAt command 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() with flatMap for simpler, more efficient array flattening

@tiptap/extension-emoji@3.4.5

Patch Changes

  • 82121b8: refactor: replace map(...).flat() with flatMap for simpler, more efficient array flattening

@tiptap/extension-mention@3.4.5

Patch Changes

  • f472c5b: Use a named import for Suggestion from @tiptap/suggestion to 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() with flatMap for simpler, more efficient array flattening

v3.4.4

18 Sep 14:28
dcbfb62

Choose a tag to compare

Releases

@tiptap/core@3.4.4

Patch Changes

  • 00cf1d7: Fix bug in insertContentAt command where extra content would get deleted when the selection was at the beginning of the document and a node was inserted

v3.4.3

15 Sep 08:02
acb0170

Choose a tag to compare

Releases

@tiptap/core@3.4.3

Patch Changes

  • 1ea8906: When the editor view is created, it now will also include nodeViews and markViews properties 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

09 Sep 10:43
ac8f6f2

Choose a tag to compare

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 scrollTarget option which will be
    used instead of window when 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 scrollTarget setting.

v3.4.1

04 Sep 12:38
a51159f

Choose a tag to compare

Releases

@tiptap/extension-text-style@3.4.1

Patch Changes

  • 46fa8b8: Prefer the raw inline style attribute when parsing color and
    background-color so the original format (hex, rgba/hsla, etc.) is
    preserved instead of falling back to the computed element.style.*
    value (which often resolves to rgb(...)).

    This fixes mismatches where consumers (for example, demo toolbars and
    color pickers) expected the original hex values when initializing the
    editor from HTML.

    • The color and background-color parsers now look for a style
      attribute first and extract the declared value. If no raw style is
      present, they still fall back to element.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 of rgb(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 like tinycolor2) before
      comparing or use the editor APIs in a way that doesn't depend on the
      exact string representation.
    • @tiptap/core@3.4.1

@tiptap/react@3.4.1

Patch Changes

  • 4dd8d58: fix: @types/react version mismatch

@tiptap/suggestion@3.4.1

Patch Changes

  • 59fb86f: Previously, clientRect was only obtained through decorationNode. If decorationNode could not be obtained, clientRect was set to null, which caused the suggestion not to render in some IME scenarios (notably Chinese IME).

    This change adds a fallback method to compute clientRect from the editor's cursor position when decorationNode is 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

04 Sep 00:34
fff4619

Choose a tag to compare

Releases

@tiptap/core@3.4.0

Minor Changes

  • ad51daa: Add mount and unmount events to the Editor instance for tracking mounts and unmounts

Patch Changes

  • 895c73f: Fix can().toggleMark() returning incorrect result when cursor is inside nodes that disallow marks

    Fixed an issue where can().toggleMark('bold') incorrectly returned true when the cursor was positioned inside a code block (with no selection), even though marks are not allowed in code blocks. The method now correctly returns false in 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.color types to use types defined in prosemirror-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 enabled
    • tabSize: 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 enabled
    • tabSize: 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().onKeyDown before the suggestion plugin auto-exits.

    Previously the suggestion plugin intercepted Escape internally and immediately called onExit, preventing render().onKeyDown from receiving the event and stopping propagation. Now render().onKeyDown is invoked first for Escape; if it returns true the plugin assumes the consumer handled the event (so they can call event.preventDefault() / event.stopPropagation() and optionally call exitSuggestion(view) themselves). If it returns false (or is absent), the plugin will continue to call onExit and 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 mousedown handler that closed suggestion popups when clicking outside.

    Previously the suggestion plugin listened for document mousedown events 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)