You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Add official RubyText extension for HTML ruby text annotations with non-editable annotations and mark-based document storage. The click-to-edit annotation editor can be replaced with a custom element via the renderAnnotationEditor option.
@tiptap/core
Patch Changes
Fix a TypeScript build error in isAndroid() where comparing navigator.platform against the literal 'Android' with === could fail to compile under some lib.dom.d.ts typings ("types have no overlap"). Switched to the same .includes() pattern already used by isiOS(), which is not affected by this TypeScript narrowing issue. No runtime behavior change.
Fixed a bug where deleting an AllSelection (for example right after Ctrl/Cmd+A) left a lingering "phantom" selection highlight over the emptied document instead of a text cursor. deleteSelection now collapses the selection to a cursor.
Fix input rules crashing when the matched text spans an inline atom node like a mention.
Node view getPos() now returns undefined instead of throwing when the position cannot be resolved yet, for example when React 19 renders a node view component while the editor view is still updating.
Fixed onContentError throwing when calling editor.commands from inside the handler on initial load with invalid content. The editor now has a usable state (seeded from the stripped fallback document) before onContentError fires.
Fix editor.$pos() returning the wrong node inside container nodes, for example the list item instead of the list.
Add insertDefaultBlock to insert the default textblock allowed at a position. It accepts an optional position, attributes, content, and selection-update option.
Added a new @tiptap/extension-find-and-replace extension. It searches the document for a term, highlights all matches with decorations, and replaces the current or all matches. Supports case-sensitive, whole-word, and RE2-compatible regex search, plus commands to jump between results. Regex search avoids catastrophic backtracking but does not support lookarounds or backreferences.
@tiptap/pm
Patch Changes
Bump prosemirror-model to ^1.25.11, fixing pasting content copied from the editor inserting extra empty paragraphs (a regression introduced in prosemirror-view 1.42.0).
@tiptap/extension-hard-break
Patch Changes
Fixed a bug where inserted hard breaks would not scroll the view on insertion via commands.
@tiptap/extension-code-block
Patch Changes
Fixed a bug where pressing ArrowUp in a code block that is the first node in the document did nothing, leaving no way to insert content above it. A new default block is now inserted above the code block, mirroring the existing ArrowDown behavior. The behavior can be disabled via the new exitOnArrowUp option.
@tiptap/extension-table
Patch Changes
Fix inserting a table with an empty cell or header (e.g. via insertContent/insertContentAt) throwing RangeError: Invalid content for node tableCell/tableHeader: <>. Empty <td>/<th> elements are now backfilled with the cell's default block content, matching the behavior you already get from setContent.
Keep line breaks inside table cells when serializing to markdown. Hard breaks and paragraph breaks in a cell are now written as <br> instead of being collapsed into a space, so they survive a parse/serialize round trip.
@tiptap/markdown
Patch Changes
Fixed blank lines being dropped after block elements (headings, tables, etc.) when parsing markdown. Blank lines were being absorbed into the block token instead of being preserved, causing content to lose a blank line on each parse/serialize cycle.
@tiptap/react
Patch Changes
Fixed useEditorState not re-rendering components when editor.setEditable() changes the editor's editable state, since that call only emits an update event and never a transaction.
@tiptap/vue-3
Patch Changes
Fix <node-view-content as="tbody"> (and similar restricted-content elements) rendering with an extra wrapper <div> nested inside them, which broke tables in Vue node views. Note: keep <node-view-content> mounted (use v-show, not v-if) — conditionally remounting it can leave ProseMirror attached to the old element.
@tiptap/extension-image
Patch Changes
Fix resizable images not synchronizing rendered attributes after updates
@tiptap/static-renderer
Patch Changes
Fix Markdown table serialization for merged cells by preserving the correct column layout for rowspan and colspan.
@tiptap/extension-link
Minor Changes
Typing or pasting Markdown link syntax like [Tiptap](https://tiptap.dev) or [Tiptap](https://tiptap.dev "Rich text editor") can now automatically be converted into a link. The behavior is opt-in, enable it with the new markdownLinks option.
This discussion was created from the release v3.29.0.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
@tiptap/extension-ruby-text
Minor Changes
renderAnnotationEditoroption.@tiptap/core
Patch Changes
isAndroid()where comparingnavigator.platformagainst the literal'Android'with===could fail to compile under somelib.dom.d.tstypings ("types have no overlap"). Switched to the same.includes()pattern already used byisiOS(), which is not affected by this TypeScript narrowing issue. No runtime behavior change.AllSelection(for example right after Ctrl/Cmd+A) left a lingering "phantom" selection highlight over the emptied document instead of a text cursor.deleteSelectionnow collapses the selection to a cursor.getPos()now returnsundefinedinstead of throwing when the position cannot be resolved yet, for example when React 19 renders a node view component while the editor view is still updating.onContentErrorthrowing when callingeditor.commandsfrom inside the handler on initial load with invalid content. The editor now has a usable state (seeded from the stripped fallback document) beforeonContentErrorfires.editor.$pos()returning the wrong node inside container nodes, for example the list item instead of the list.insertDefaultBlockto insert the default textblock allowed at a position. It accepts an optional position, attributes, content, and selection-update option.@tiptap/extension-find-and-replace
Minor Changes
@tiptap/extension-find-and-replaceextension. It searches the document for a term, highlights all matches with decorations, and replaces the current or all matches. Supports case-sensitive, whole-word, and RE2-compatible regex search, plus commands to jump between results. Regex search avoids catastrophic backtracking but does not support lookarounds or backreferences.@tiptap/pm
Patch Changes
prosemirror-modelto^1.25.11, fixing pasting content copied from the editor inserting extra empty paragraphs (a regression introduced inprosemirror-view1.42.0).@tiptap/extension-hard-break
Patch Changes
@tiptap/extension-code-block
Patch Changes
ArrowUpin a code block that is the first node in the document did nothing, leaving no way to insert content above it. A new default block is now inserted above the code block, mirroring the existingArrowDownbehavior. The behavior can be disabled via the newexitOnArrowUpoption.@tiptap/extension-table
Patch Changes
insertContent/insertContentAt) throwingRangeError: Invalid content for node tableCell/tableHeader: <>. Empty<td>/<th>elements are now backfilled with the cell's default block content, matching the behavior you already get fromsetContent.<br>instead of being collapsed into a space, so they survive a parse/serialize round trip.@tiptap/markdown
Patch Changes
@tiptap/react
Patch Changes
useEditorStatenot re-rendering components wheneditor.setEditable()changes the editor's editable state, since that call only emits anupdateevent and never atransaction.@tiptap/vue-3
Patch Changes
<node-view-content as="tbody">(and similar restricted-content elements) rendering with an extra wrapper<div>nested inside them, which broke tables in Vue node views. Note: keep<node-view-content>mounted (usev-show, notv-if) — conditionally remounting it can leave ProseMirror attached to the old element.@tiptap/extension-image
Patch Changes
@tiptap/static-renderer
Patch Changes
@tiptap/extension-link
Minor Changes
[Tiptap](https://tiptap.dev)or[Tiptap](https://tiptap.dev "Rich text editor")can now automatically be converted into a link. The behavior is opt-in, enable it with the newmarkdownLinksoption.This discussion was created from the release v3.29.0.
All reactions