@tiptap/core Changelog

Changelog for @tiptap/core

3.22.3

Patch Changes

  • cb28e7b: Fixed insertContentAt corrupting the document when inserting inline content with marks at the start of a paragraph. The from - 1 position adjustment now only applies to block-level content.
    • @tiptap/pm@3.22.3

3.22.2

Patch Changes

  • f1d504c: Fix incorrect selection placement when pasting at the end of a marked text node, ensuring inclusive marks are respected
  • 404c683: Fixes list toggling when the entire document is selected
    • @tiptap/pm@3.22.2

3.22.1

Patch Changes

  • ee03ac0: 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)
  • b88f9ed: Don't stop dragover/dragenter events in NodeViews, to prevent spurious drag-copy cursors
    • @tiptap/pm@3.22.1

3.22.0

Patch Changes

  • 912a49b: Fix HTML character escaping in markdown roundtrip. HTML entities (&lt;, &gt;, &amp;, &quot;) 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 the code: true extension spec instead of hardcoded type names. Literal characters inside code blocks and inline code are always preserved.
  • 7d4fb9a: Fix ResizableNodeView ignoring node's inline setting by using inline-flex for inline nodes and flex for block nodes
  • 0c1c112: 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 with extendMarkRange('link', {}).
  • 0c1c112: Fix getMarkRange attributes default to consider the first mark of the given type
  • f99bdc2: Guard mark delete event handling when unsetMark removes a mark from inline content that starts at position 0, preventing a RangeError during the before-node lookup.
    • @tiptap/pm@3.22.0

3.21.0

Patch Changes

  • @tiptap/pm@3.21.0

3.20.6

Patch Changes

  • @tiptap/pm@3.20.6

3.20.5

Patch Changes

  • @tiptap/pm@3.20.5

3.20.4

Patch Changes

  • 0bcf3c2: Fixed Tiptap not publishing with build dist artifacts
    • @tiptap/pm@3.20.4

3.20.3

Patch Changes

  • c94fac4: Fixed isNodeEmpty() so multi-line text with non-whitespace content is no longer treated as empty when ignoreWhitespace is enabled.
  • 6b9ea92: Fixed overlapping bold and italic markdown serialization and round-tripping.
    • @tiptap/pm@3.20.3

3.20.2

Patch Changes

  • 269823d: 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 &nbsp; markers for subsequent empty paragraphs at the same level, while parsing preserves those empty paragraphs when converting markdown back to JSON.
    • @tiptap/pm@3.20.2

3.20.1

Patch Changes

  • 25f57e4: Fix inline style parsing in mergeAttributes for values containing : or ; (e.g. url(https://...) or url(data:...;charset=...,)) and skip incomplete declarations
    • @tiptap/pm@3.20.1

3.20.0

Minor Changes

  • 57624a1: Add transformPastedHTML extension API that allows extensions to transform pasted HTML content before it's parsed into the editor, enabling cleanup of styles, removal of dangerous content, and modification of pasted HTML through a chainable transform system.

Patch Changes

  • 4b731e2: Fix checking if mark is active and toggling off marks when part of the selection does not allow the mark (e.g. a code block)
  • 98546ac: Global attributes now support shorthand string values for types: use '*' to apply to all nodes and marks, 'nodes' for all nodes (excluding text), or 'marks' for all marks.
  • 76ce47d: Fixed a typo in the documentation of editor.view
    • @tiptap/pm@3.20.0

3.19.0

Patch Changes

  • @tiptap/pm@3.19.0

3.18.0

Patch Changes

  • @tiptap/pm@3.18.0

3.17.1

Patch Changes

  • aa9709e: Fixed $nodes() method to correctly return inline nodes (like text, mention, etc.) by fixing the children getter in NodePos class
  • b46e66a: Fixed ResizableNodeView contentDOM getter to return null instead of undefined for proper TypeScript compatibility
    • @tiptap/pm@3.17.1

3.17.0

Patch Changes

  • eecf1c9: Added isFirefox utility to core
    • @tiptap/pm@3.17.0

3.16.0

Patch Changes

  • @tiptap/pm@3.16.0

3.15.3

Patch Changes

  • 8f86f06: Fix Safari scrolling to top when using editor.chain().focus() commands
    • @tiptap/pm@3.15.3

3.15.2

Patch Changes

  • @tiptap/pm@3.15.2

3.15.1

Patch Changes

  • @tiptap/pm@3.15.1

3.15.0

Minor Changes

  • ac8361c: Add a new dispatchTransaction hook to extensions, allowing developers to intercept, modify, or block transactions before they are applied to the editor state.

Patch Changes

  • @tiptap/pm@3.15.0

3.14.0

Patch Changes

  • @tiptap/pm@3.14.0

3.13.0

Minor Changes

  • e3b4f68: 1. Added an optional createCustomHandle callback to ResizableNodeView, allowing developers to fully customize resize handles. When provided, it replaces the default handle creation and bypasses the built-in positionHandle logic, giving complete control over markup, styling, and positioning while preserving backward compatibility. 2. Removed predefined inline styles from the wrapper element to better support dynamic alignment. This eliminates the need for !important overrides in user styles. 3. Added an editor update event listener to dynamically attach or remove resize handles based on the editor’s editable state. The implementation tracks the previous editable state to avoid unnecessary re-renders.

Patch Changes

  • 526365a: Add 'mentionSuggestionChar' to allowedAttributes for Markdown serialization in multi-mention setups. The attribute is only serialized when it differs from the default '@' character, keeping markdown output clean for single-mention users.
    • @tiptap/pm@3.13.0

3.12.1

Patch Changes

  • @tiptap/pm@3.12.1

3.12.0

Minor Changes

  • f232c5a: Implement position mapping using the MappablePosition class. This enables position mapping in collaborative editing scenarios.

    • Introduce MappablePosition class in core with position, fromJSON, and toJSON methods
    • Add editor.utils property with getUpdatedPosition(position, transaction) and createMappablePosition() methods
    • Create CollaborationMappablePosition subclass that extends MappablePosition with Y.js relative position support

Patch Changes

  • @tiptap/pm@3.12.0

3.11.1

Patch Changes

  • d0c4264: Improve TypeScript generics for Node.extend

    The Node.extend method's TypeScript signature was updated so that ExtendedConfig can extend NodeConfig and MarkConfig, improving type inference when extending Node and Mark classes with additional config properties.

    This is a type-only change — there are no runtime behavior changes.

    • @tiptap/pm@3.11.1

3.11.0

Minor Changes

  • 541c93c: Add native text direction support for RTL and bidirectional content. The editor now includes a textDirection option that can be set to 'ltr', 'rtl', or 'auto' to control the direction of all content globally. Additionally, new setTextDirection and unsetTextDirection commands allow for granular control of text direction on specific nodes. This enables proper rendering of right-to-left languages like Arabic and Hebrew, as well as bidirectional text mixing multiple languages.

Patch Changes

  • @tiptap/pm@3.11.0

3.10.8

Patch Changes

  • 8375241: Fixed a bug that caused extra characters to be inserted after a parsed, nestable content block by accounting for leading newlines
  • b7ead7c: Add documentation comments to Tiptap JSON types
  • 95d3e80: allow undefined as a value for the default attribute key
  • fd479bd: Fix updateAttributes and resetAttributes commands to return accurate results when used with .can(). Previously, these commands would always return true even when they couldn't perform the operation. Now they correctly return false when no matching nodes or marks are found in the selection.
    • @tiptap/pm@3.10.8

3.10.7

Patch Changes

  • @tiptap/pm@3.10.7

3.10.6

Patch Changes

  • @tiptap/pm@3.10.6

3.10.5

Patch Changes

  • 92fae18: Fixed ProseMirror schema generation to properly respect isRequired attribute configuration. Previously, attributes marked with isRequired: true were incorrectly treated as optional because a default property was always included in the schema specification. ProseMirror determines attribute requirements by the absence of the default property, so now the default is only included when the attribute is not required and a default value is explicitly defined.
    • @tiptap/pm@3.10.5

3.10.4

Patch Changes

  • 64561c4: Fix autofocus behavior to prevent unwanted scrolling when disabled
    • @tiptap/pm@3.10.4

3.10.3

Patch Changes

  • @tiptap/pm@3.10.3

3.10.2

Patch Changes

  • @tiptap/pm@3.10.2

3.10.1

Patch Changes

  • 3564e7c: Use correct ResizableNodeView class name
    • @tiptap/pm@3.10.1

3.10.0

Minor Changes

  • 4aa9f57: Add a new ResizableNodeview NodeView to core that wraps elements (images, videos, iframes) with configurable resize handles. It provides live onResize/onCommit callbacks, min/max constraints, aspect-ratio support, and styling hooks (class names + data attributes) to improve UX when resizing media inside the editor.

  • 4aa9f57: the addNodeView function can now return null to dynamically disable rendering of a node view

    While this should not directly cause any issues, it's noteworthy as it still could affect some behavior in some edge cases.

Patch Changes

  • @tiptap/pm@3.10.0

3.9.1

Patch Changes

  • @tiptap/pm@3.9.1

3.9.0

Patch Changes

  • bbb8e16: Only remove injected CSS on unmount if no other editors are in the document (fixes #6836)
    • @tiptap/pm@3.9.0

3.8.0

Patch Changes

  • @tiptap/pm@3.8.0

3.7.2

Patch Changes

  • @tiptap/pm@3.7.2

3.7.1

Patch Changes

  • @tiptap/pm@3.7.1

3.7.0

Minor Changes

  • 35645d9: All commands and their corresponding TypeScript types are now exported from @tiptap/core so they can be imported and referenced directly by consumers. This makes it easier to build typed helpers, extensions, and tests that depend on the command signatures.

    Why:

    • Previously some command option types were only available as internal types or scattered across files, which made it awkward for downstream users to import and reuse them.
    import { commands } from '@tiptap/core'

    Notes:

    • This is a non-breaking, additive change. It improves ergonomics for TypeScript consumers.
    • If you rely on previously private/internal types, prefer the exported types from @tiptap/core going forward.
  • 35645d9: Add comprehensive bidirectional markdown support to Tiptap through a new @tiptap/markdown package and Markdown utilities in @tiptap/core.

    New Package: @tiptap/markdown - A new official extension that provides full Markdown parsing and serialization capabilities using MarkedJS as the underlying Markdown parser.

    Core Features:

    Extension API

    • Markdown Extension: Main extension that adds Markdown support to your editor
    • MarkdownManager: Core engine for parsing and serializing Markdown
      • Parse Markdown strings to Tiptap JSON: editor.markdown.parse(markdown)
      • Serialize Tiptap JSON to Markdown: editor.markdown.serialize(json)
      • Access to underlying marked.js instance: editor.markdown.instance

    Editor Methods

    • editor.getMarkdown(): Serialize current editor content to Markdown string
    • editor.markdown: Access to MarkdownManager instance for advanced operations

    Editor Options:

    • contentType: Control the type of content that is inserted into the editor. Can be json, html or markdown - defaults to json and will automatically detect invalid content types (like JSON when it is actually Markdown).
      new Editor({
        content: '# Hello World',
        contentType: 'markdown',
      })

    Command Options: All content commands now support an contentType option:

    • setContent(markdown, { contentType: 'markdown' }): Replace editor content with markdown
    • insertContent(markdown, { contentType: 'markdown' }): Insert markdown at cursor position
    • insertContentAt(position, markdown, { contentType: 'markdown' }): Insert Markdown at specific position

    For more, check the documentation.

Patch Changes

  • 35645d9: The extension manager now provides a new property baseExtensions that contains an unflattened array of extensions
    • @tiptap/pm@3.7.0

3.6.7

Patch Changes

  • @tiptap/pm@3.6.7

3.6.6

Patch Changes

  • @tiptap/pm@3.6.6

3.6.5

Patch Changes

  • 1e4caea: Editors can now emit transaction and update events before being mounted. This means smoother state handling and instant feedback from editors, even when they're not in the DOM.
    • @tiptap/pm@3.6.5

3.6.4

Patch Changes

  • @tiptap/pm@3.6.4

3.6.3

Patch Changes

  • 67f7b4a: Refined the JSONContent.attrs definition to exactly mirror the structure returned by editor.getJSON(). This ensures strict type safety and consistency between the editor output and the expected type, eliminating errors caused by mismatched attribute signatures.
    • @tiptap/pm@3.6.3

3.6.2

Patch Changes

  • @tiptap/pm@3.6.2

3.6.1

Patch Changes

  • @tiptap/pm@3.6.1

3.6.0

Patch Changes

  • c0190bd: Improve typing and docs for EditorOptions.element to reflect all supported mounting modes and align behavior across adapters.

    • element now accepts:
      • Element: the editor is appended inside the given element.
      • { mount: HTMLElement }: the editor is mounted directly to mount (no extra wrapper).
      • (editorEl: HTMLElement) => void: a function that receives the editor element so you can place it anywhere in the DOM.
      • null: no automatic mounting.
    • @tiptap/pm@3.6.0

3.5.3

Patch Changes

  • @tiptap/pm@3.5.3

3.5.2

Patch Changes

  • @tiptap/pm@3.5.2

3.5.1

Patch Changes

  • @tiptap/pm@3.5.1

3.5.0

Patch Changes

  • @tiptap/pm@3.5.0

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.

    • @tiptap/pm@3.4.6

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/pm@3.4.5

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
    • @tiptap/pm@3.4.4

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/pm@3.4.3

3.4.2

Patch Changes

  • @tiptap/pm@3.4.2

3.4.1

Patch Changes

  • @tiptap/pm@3.4.1

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/pm@3.4.0

3.3.1

Patch Changes

  • @tiptap/pm@3.3.1

3.3.0

Minor Changes

  • 5423726: Make input rules and paste rules respect extension priority by registering them per-extension instead of aggregating them into a single global plugin.

    Why

    Previously all addInputRules() and addPasteRules() were gathered into one global plugin which ran before the other plugins. That caused conflicts where some extensions (for example mention/suggestion with #) could not preempt the built-in heading input rule.

    What changed

    • Input and paste rules are now created and registered at the position of the owning extension. This makes their execution order follow the extension sorting/priority mechanism.
    • Behavior is more predictable: extensions with higher priority can now take precedence over lower priority extensions' input/paste rules.

    Migration & compatibility

    • This is a behavioral change. If you relied on the old global ordering (input rules always running before other plugins), you may observe different outcomes. In most cases this is desirable and fixes conflicts (like the # mention vs. heading shortcut), but be aware of the change.
    • If you need to force the previous behavior for a specific rule, you can:
      • Register the rule as a ProseMirror plugin via addProseMirrorPlugins() on the extension and place it where you want it to run.
      • Adjust the extension priority value so the extension sits earlier or later in the ordering.

    If you have any questions or see regressions after upgrading, please open an issue with a small repro and we'll help triage.

Patch Changes

  • 5423726: Fix paste rule handling for node views and defensively guard empty ranges.

    This patch ensures paste rules can correctly inspect node content when node-specific size metadata (nodeSize) is present, falling back to node.content.size when needed. It also skips empty or invalid node ranges before calling textBetween, preventing runtime errors originating from internal Fragment/Node traversals (for example: "Cannot read properties of undefined (reading 'nodeSize')").

    The change is a defensive bugfix; it does not change public APIs.

    • @tiptap/pm@3.3.0

3.2.2

Patch Changes

  • @tiptap/pm@3.2.2

3.2.1

Patch Changes

  • 6a2873f: Ensure drag previews for node views work correctly in Safari by attaching an offscreen clone of the node to the DOM while calling setDragImage, and by preserving the original element's pixel width/height so the preview matches the original. This prevents Safari from immediately cancelling the drag when a detached element is used as the drag image.
    • @tiptap/pm@3.2.1

3.2.0

Minor Changes

  • 5056e3e: Fix Editor.unmount() failing in test environments due to missing DOM remove() method

Patch Changes

  • @tiptap/pm@3.2.0

3.1.0

Patch Changes

  • @tiptap/pm@3.1.0

3.0.9

Patch Changes

  • @tiptap/pm@3.0.9

3.0.8

Patch Changes

  • @tiptap/pm@3.0.8

3.0.7

Patch Changes

  • @tiptap/pm@3.0.7

3.0.6

Patch Changes

  • 2e71d05: Fix: Fix broken types for function chaining when calling extend
    • @tiptap/pm@3.0.6

3.0.5

Patch Changes

  • @tiptap/pm@3.0.5

3.0.4

Patch Changes

  • 7ed03fa: Fix: Add correct overload for extension extend types"
    • @tiptap/pm@3.0.4

3.0.3

Patch Changes

  • 75cabde: Fix: Avoid the JSX Runtime to globally overwrite React's Element types when /** @jsxImportSource @tiptap/core */ is not used
    • @tiptap/pm@3.0.3

3.0.2

Patch Changes

  • @tiptap/pm@3.0.2

3.0.1

Major Changes

  • a92f4a6: We are now building packages with tsup which does not support UMD builds, please repackage if you require UMD builds

  • 5e957e5: This resolves in issue with SSR where the isDestroyed property could not be read while in SSR

  • 37913d5: getPos in NodeViewRendererProps type now includes undefined as possible return value

    Before

    const pos = nodeViewProps.getPos() // Type was () => number

    After

    const pos = nodeViewProps.getPos() // Type is () => number | undefined
    
    if (pos !== undefined) {
      // Safe to use pos here
    }
  • 32958d6: Node, Mark and Extension config options now are strongly typed and do not allow arbitrary keys on the options object.

    To add keys, like when using extendNodeSchema or extendMarkSchema, you can do this:

    declare module '@tiptap/core' {
      interface NodeConfig {
        /**
         * This key will be added to all NodeConfig objects in your project
         */
        newKey?: string
      }
      interface MarkConfig {
        /**
         * This key will be added to all MarkConfig objects in your project
         */
        newKey?: string
      }
      interface ExtensionConfig {
        /**
         * This key will be added to all ExtensionConfig objects in your project
         */
        newKey?: string
      }
    }
  • 12bb31a: insertContent and insertContentAt commands should not split text nodes like paragraphs into multiple nodes when the inserted content is at the beginning of the text to avoid empty nodes being created

  • 062afaf: clearContent command defaults to emitting updates now

  • 062afaf: Change signature of setContent command to (content, options) and default to emitting updates

  • 32958d6: editor.storage is now strongly typed Storage instances, using a similar pattern as commands, where you can define the type of the storage value using namespaces like:

    declare module '@tiptap/core' {
      interface Storage {
        extensionName: StorageValue
      }
    }
  • 32958d6: editor.storage is instantiated per editor rather than per extension.

    Previously, the storage value was a singleton per extension instance, this caused strange bugs when using multiple editor instances on a single page.

    Now, storage instances are per editor instance, so changing the value on one editor.storage instance will not affect another editor's value.

Minor Changes

  • 8de8e13: The editor instance now supports an unmount method which allows for mounting and unmounting the editor to the DOM. This encourages re-use of editor instances by preserving all the same options between instances. This is different from the destroy method, which will unmount, emit the destroy event, and remove all event listeners.

  • d0fda30: Add config option to emit content error when content check is disabled

  • 0e3207f: Add support for markviews, which allow you to render custom views for marks within the editor. This is useful for rendering custom UI for marks, like a color picker for a text color mark or a link editor for a link mark.

    Here is a plain JS markview example:

    Mark.create({
      // Other options...
      addMarkView() {
        return ({ mark, HTMLAttributes }) => {
          const dom = document.createElement('b')
          const contentDOM = document.createElement('span')
    
          dom.appendChild(contentDOM)
    
          return {
            dom,
            contentDOM,
          }
        }
      },
    })

    React binding

    To use a React component for a markview, you can use the @tiptap/react package:

    import { Mark } from '@tiptap/core'
    import { ReactMarkViewRenderer } from '@tiptap/react'
    
    import Component from './Component.jsx'
    
    export default Mark.create({
      name: 'reactComponent',
    
      parseHTML() {
        return [
          {
            tag: 'react-component',
          },
        ]
      },
    
      renderHTML({ HTMLAttributes }) {
        return ['react-component', HTMLAttributes]
      },
    
      addMarkView() {
        return ReactMarkViewRenderer(Component)
      },
    })

    And here is an example of a React component:

    import { MarkViewContent, MarkViewRendererProps } from '@tiptap/react'
    import React from 'react'
    
    // eslint-disable-next-line @typescript-eslint/no-unused-vars
    export default (props: MarkViewRendererProps) => {
      const [count, setCount] = React.useState(0)
    
      return (
        <span className="content" data-test-id="mark-view">
          <MarkViewContent />
          <label contentEditable={false}>
            React component:
            <button
              onClick={() => {
                setCount(count + 1)
              }}
            >
              This button has been clicked {count} times.
            </button>
          </label>
        </span>
      )
    }

    Vue 3 binding

    To use a Vue 3 component for a markview, you can use the @tiptap/vue-3 package:

    import { Mark } from '@tiptap/core'
    import { VueMarkViewRenderer } from '@tiptap/vue-3'
    
    import Component from './Component.vue'
    
    export default Mark.create({
      name: 'vueComponent',
    
      parseHTML() {
        return [
          {
            tag: 'vue-component',
          },
        ]
      },
    
      renderHTML({ HTMLAttributes }) {
        return ['vue-component', HTMLAttributes]
      },
    
      addMarkView() {
        return VueMarkViewRenderer(Component)
      },
    })

    And here is an example of a Vue 3 component:

    <template>
      <span className="content" data-test-id="mark-view">
        <mark-view-content />
        <label contenteditable="false"
          >Vue Component::
          <button @click="increase" class="primary">This button has been clicked {{ count }} times.</button>
        </label>
      </span>
    </template>
    
    <script>
    import { MarkViewContent, markViewProps } from '@tiptap/vue-3'
    export default {
      components: {
        MarkViewContent,
      },
      data() {
        return {
          count: 0,
        }
      },
      props: markViewProps,
      methods: {
        increase() {
          this.count += 1
        },
      },
    }
    </script>
  • 28c5418: Adds a new delete event which can detect content which has been deleted by the editor as a core extension

  • 412e1bd: Remove enableDevTools option

  • ff8eed6: Support validate option in node and mark attribute definitions.

  • 704f462: This introduces a new behavior for the editor, the ability to be safely run on the server-side (without rendering).

    prosemirror-view encapsulates all view (& DOM) related code, and cannot safely be SSR'd, but, the majority of the editor instance itself is in plain JS that does not require DOM APIs (unless your content is specified in HTML).

    But, we have so many convenient methods available for manipulating content. So, it is a shame that they could not be used on the server side too. With this change, the editor can be rendered on the server-side and will use a stub for select prosemirror-view methods. If accessing unsupported methods or values on the editor.view, you will encounter runtime errors, so it is important for you to test to see if the methods you call actually work.

    This is a step towards being able to server-side render content, but, it is not completely supported yet. This does not mean that you can render an editor instance on the server and expect it to just output any HTML.

    Usage

    If you pass element: null to your editor options:

    • the editor.view will not be initialized
    • the editor will not emit it's 'create' event
    • the focus will not be initialized to it's first position

    You can however, later use the new mount function on the instance, which will mount the editor view to a DOM element. This obviously will not be allowed on the server which has no document object.

    Therefore, this will work on the server:

    import { Editor } from '@tiptap/core'
    import StarterKit from '@tiptap/starter-kit'
    
    const editor = new Editor({
      element: null,
      content: { type: 'doc', content: [{ type: 'paragraph', content: [{ type: 'text', text: 'Hello, World!' }] }] },
      extensions: [StarterKit],
    })
    
    editor
      .chain()
      .selectAll()
      .setContent({ type: 'doc', content: [{ type: 'paragraph', content: [{ type: 'text', text: 'XYZ' }] }] })
      .run()
    
    console.log(editor.state.doc.toJSON())
    // { type: 'doc', content: [ { type: 'paragraph', content: [ { type: 'text', text: 'XYZ' } ] } ] }

    Any of these things will not work on the server, and result in a runtime error:

    import { Editor } from '@tiptap/core'
    import StarterKit from '@tiptap/starter-kit'
    
    const editor = new Editor({
      // document will not be defined in a server environment
      element: document.createElement('div'),
      content: { type: 'doc', content: [{ type: 'paragraph', content: [{ type: 'text', text: 'Hello, World!' }] }] },
      extensions: [StarterKit],
    })
    
    editor
      .chain()
      // focus is a command which depends on the editor-view, so it will not work in a server environment
      .focus()
      .run()
    
    console.log(editor.getHTML())
    // getHTML relies on the editor-view, so it will not work in a server environment
  • ac897e7: Added the option to create extensions with a callback function instead of a flat configuration object

  • 32958d6: Extensions, Nodes and Marks no longer respect the deprecated defaultOptions config value

Patch Changes

  • 1b4c82b: We are now using pnpm package aliases for versions to enable better version pinning for the monorepository
  • 20f68f6: Remove editor.getCharacterCount() which was already deprecated and incorrectly implemented
  • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory
  • 9f207a6: Fixes a bug where you could not unregister multiple plugins.
  • 95b8c71: Add validation for target position within document range when trying to access children of a NodePos instance
  • 8c69002: Synced beta with stable features
  • 664834f: Clone dragged node before dragging to get correct drag preview image
  • 087d114: Added new canInsertNode utility that checks if a node can be inserted into a specific position
  • fc17b21: Fix RangeException in cut command when targetPos is zero
  • e20006b: Fix: Prevent content deletion from non-editable Tiptap source editors during drag and drop.
  • 5ba480b: Added updateAttributes to MarkView and its renderers to allow updating MarkView attributes
  • d6c7558: For performance, if a transaction results in the exact same editor state (either filtered out or failed to apply), then do not attempt to re-apply the same editor state and do not emit any events associated to the transaction.
  • 9ceeab4: Fixed a bug where jsx-runtime cjs files would break Jest runners because of ESM syntax
  • bf835b0: Fixed an issue where images placed into an empty paragraph right after an existing image would replace the existing image instead
  • 4e2f6d8: migration from prosemirror-dev-tools to prosemirror-dev-toolkit
  • Updated dependencies [1b4c82b]
  • Updated dependencies [1e91f9b]
  • Updated dependencies [a92f4a6]
  • Updated dependencies [89bd9c7]
  • Updated dependencies [8c69002]
  • Updated dependencies [62b0877]
    • @tiptap/pm@3.0.1

3.0.0-beta.30

Patch Changes

  • @tiptap/pm@3.0.0-beta.30

3.0.0-beta.29

Patch Changes

  • @tiptap/pm@3.0.0-beta.29

3.0.0-beta.28

Patch Changes

  • @tiptap/pm@3.0.0-beta.28

3.0.0-beta.27

Minor Changes

  • 412e1bd: Remove enableDevTools option

Patch Changes

  • @tiptap/pm@3.0.0-beta.27

3.0.0-beta.26

Patch Changes

  • 5ba480b: Added updateAttributes to MarkView and its renderers to allow updating MarkView attributes
    • @tiptap/pm@3.0.0-beta.26

3.0.0-beta.25

Patch Changes

  • 4e2f6d8: migration from prosemirror-dev-tools to prosemirror-dev-toolkit
    • @tiptap/pm@3.0.0-beta.25

3.0.0-beta.24

Patch Changes

  • @tiptap/pm@3.0.0-beta.24

3.0.0-beta.23

Patch Changes

  • @tiptap/pm@3.0.0-beta.23

3.0.0-beta.22

Patch Changes

  • @tiptap/pm@3.0.0-beta.22

3.0.0-beta.21

Minor Changes

  • 813674c: Added lazy-loaded ProseMirror Devtools integration which can be enabled via the new editor option enableDevTools: true

Patch Changes

  • fc17b21: Fix RangeException in cut command when targetPos is zero
    • @tiptap/pm@3.0.0-beta.21

3.0.0-beta.20

Patch Changes

  • @tiptap/pm@3.0.0-beta.20

3.0.0-beta.19

Patch Changes

  • 9ceeab4: Fixed a bug where jsx-runtime cjs files would break Jest runners because of ESM syntax
    • @tiptap/pm@3.0.0-beta.19

3.0.0-beta.18

Patch Changes

  • @tiptap/pm@3.0.0-beta.18

3.0.0-beta.17

Patch Changes

  • e20006b: Fix: Prevent content deletion from non-editable Tiptap source editors during drag and drop.
    • @tiptap/pm@3.0.0-beta.17

3.0.0-beta.16

Minor Changes

  • ac897e7: Added the option to create extensions with a callback function instead of a flat configuration object

Patch Changes

  • bf835b0: Fixed an issue where images placed into an empty paragraph right after an existing image would replace the existing image instead
    • @tiptap/pm@3.0.0-beta.16

3.0.0-beta.15

Patch Changes

  • 087d114: Added new canInsertNode utility that checks if a node can be inserted into a specific position
    • @tiptap/pm@3.0.0-beta.15

3.0.0-beta.14

Patch Changes

  • 95b8c71: Add validation for target position within document range when trying to access children of a NodePos instance
    • @tiptap/pm@3.0.0-beta.14

3.0.0-beta.13

Patch Changes

  • @tiptap/pm@3.0.0-beta.13

3.0.0-beta.12

Patch Changes

  • @tiptap/pm@3.0.0-beta.12

3.0.0-beta.11

Patch Changes

  • @tiptap/pm@3.0.0-beta.11

3.0.0-beta.10

Patch Changes

  • @tiptap/pm@3.0.0-beta.10

3.0.0-beta.9

Patch Changes

  • @tiptap/pm@3.0.0-beta.9

3.0.0-beta.8

Patch Changes

  • @tiptap/pm@3.0.0-beta.8

3.0.0-beta.7

Minor Changes

  • d0fda30: Add config option to emit content error when content check is disabled

Patch Changes

  • @tiptap/pm@3.0.0-beta.7

3.0.0-beta.6

Patch Changes

  • @tiptap/pm@3.0.0-beta.6

3.0.0-beta.5

Patch Changes

  • 8c69002: Synced beta with stable features
  • Updated dependencies [8c69002]
  • Updated dependencies [62b0877]
    • @tiptap/pm@3.0.0-beta.5

3.0.0-beta.4

Major Changes

  • 5e957e5: This resolves in issue with SSR where the isDestroyed property could not be read while in SSR

Patch Changes

  • 9f207a6: Fixes a bug where you could not unregister multiple plugins.
    • @tiptap/pm@3.0.0-beta.4

3.0.0-beta.3

Patch Changes

  • 1b4c82b: We are now using pnpm package aliases for versions to enable better version pinning for the monorepository
  • Updated dependencies [1b4c82b]
    • @tiptap/pm@3.0.0-beta.3

3.0.0-beta.2

3.0.0-beta.1

Patch Changes

  • 664834f: Clone dragged node before dragging to get correct drag preview image

3.0.0-beta.0

3.0.0-next.8

3.0.0-next.7

Minor Changes

  • 8de8e13: The editor instance now supports an unmount method which allows for mounting and unmounting the editor to the DOM. This encourages re-use of editor instances by preserving all the same options between instances. This is different from the destroy method, which will unmount, emit the destroy event, and remove all event listeners.

Patch Changes

  • 89bd9c7: Enforce type imports so that the bundler ignores TypeScript type imports when generating the index.js file of the dist directory

3.0.0-next.6

Major Changes

  • a92f4a6: We are now building packages with tsup which does not support UMD builds, please repackage if you require UMD builds

  • 37913d5: getPos in NodeViewRendererProps type now includes undefined as possible return value

    Before

    const pos = nodeViewProps.getPos() // Type was () => number

    After

    const pos = nodeViewProps.getPos() // Type is () => number | undefined
    
    if (pos !== undefined) {
      // Safe to use pos here
    }
  • 32958d6: Node, Mark and Extension config options now are strongly typed and do not allow arbitrary keys on the options object.

    To add keys, like when using extendNodeSchema or extendMarkSchema, you can do this:

    declare module '@tiptap/core' {
      interface NodeConfig {
        /**
         * This key will be added to all NodeConfig objects in your project
         */
        newKey?: string
      }
      interface MarkConfig {
        /**
         * This key will be added to all MarkConfig objects in your project
         */
        newKey?: string
      }
      interface ExtensionConfig {
        /**
         * This key will be added to all ExtensionConfig objects in your project
         */
        newKey?: string
      }
    }
  • 12bb31a: insertContent and insertContentAt commands should not split text nodes like paragraphs into multiple nodes when the inserted content is at the beginning of the text to avoid empty nodes being created

  • 062afaf: clearContent command defaults to emitting updates now

  • 062afaf: Change signature of setContent command to (content, options) and default to emitting updates

  • 32958d6: editor.storage is now strongly typed Storage instances, using a similar pattern as commands, where you can define the type of the storage value using namespaces like:

    declare module '@tiptap/core' {
      interface Storage {
        extensionName: StorageValue
      }
    }
  • 32958d6: editor.storage is instantiated per editor rather than per extension.

    Previously, the storage value was a singleton per extension instance, this caused strange bugs when using multiple editor instances on a single page.

    Now, storage instances are per editor instance, so changing the value on one editor.storage instance will not affect another editor's value.

Minor Changes

  • 0e3207f: Add support for markviews, which allow you to render custom views for marks within the editor. This is useful for rendering custom UI for marks, like a color picker for a text color mark or a link editor for a link mark.

    Here is a plain JS markview example:

    Mark.create({
      // Other options...
      addMarkView() {
        return ({ mark, HTMLAttributes }) => {
          const dom = document.createElement('b')
          const contentDOM = document.createElement('span')
    
          dom.appendChild(contentDOM)
    
          return {
            dom,
            contentDOM,
          }
        }
      },
    })

    React binding

    To use a React component for a markview, you can use the @tiptap/react package:

    import { Mark } from '@tiptap/core'
    import { ReactMarkViewRenderer } from '@tiptap/react'
    
    import Component from './Component.jsx'
    
    export default Mark.create({
      name: 'reactComponent',
    
      parseHTML() {
        return [
          {
            tag: 'react-component',
          },
        ]
      },
    
      renderHTML({ HTMLAttributes }) {
        return ['react-component', HTMLAttributes]
      },
    
      addMarkView() {
        return ReactMarkViewRenderer(Component)
      },
    })

    And here is an example of a React component:

    import { MarkViewContent, MarkViewRendererProps } from '@tiptap/react'
    import React from 'react'
    
    // eslint-disable-next-line @typescript-eslint/no-unused-vars
    export default (props: MarkViewRendererProps) => {
      const [count, setCount] = React.useState(0)
    
      return (
        <span className="content" data-test-id="mark-view">
          <MarkViewContent />
          <label contentEditable={false}>
            React component:
            <button
              onClick={() => {
                setCount(count + 1)
              }}
            >
              This button has been clicked {count} times.
            </button>
          </label>
        </span>
      )
    }

    Vue 3 binding

    To use a Vue 3 component for a markview, you can use the @tiptap/vue-3 package:

    import { Mark } from '@tiptap/core'
    import { VueMarkViewRenderer } from '@tiptap/vue-3'
    
    import Component from './Component.vue'
    
    export default Mark.create({
      name: 'vueComponent',
    
      parseHTML() {
        return [
          {
            tag: 'vue-component',
          },
        ]
      },
    
      renderHTML({ HTMLAttributes }) {
        return ['vue-component', HTMLAttributes]
      },
    
      addMarkView() {
        return VueMarkViewRenderer(Component)
      },
    })

    And here is an example of a Vue 3 component:

    <template>
      <span className="content" data-test-id="mark-view">
        <mark-view-content />
        <label contenteditable="false"
          >Vue Component::
          <button @click="increase" class="primary">This button has been clicked {{ count }} times.</button>
        </label>
      </span>
    </template>
    
    <script>
    import { MarkViewContent, markViewProps } from '@tiptap/vue-3'
    export default {
      components: {
        MarkViewContent,
      },
      data() {
        return {
          count: 0,
        }
      },
      props: markViewProps,
      methods: {
        increase() {
          this.count += 1
        },
      },
    }
    </script>
  • 28c5418: Adds a new delete event which can detect content which has been deleted by the editor as a core extension

  • ff8eed6: Support validate option in node and mark attribute definitions.

  • 704f462: This introduces a new behavior for the editor, the ability to be safely run on the server-side (without rendering).

    prosemirror-view encapsulates all view (& DOM) related code, and cannot safely be SSR'd, but, the majority of the editor instance itself is in plain JS that does not require DOM APIs (unless your content is specified in HTML).

    But, we have so many convenient methods available for manipulating content. So, it is a shame that they could not be used on the server side too. With this change, the editor can be rendered on the server-side and will use a stub for select prosemirror-view methods. If accessing unsupported methods or values on the editor.view, you will encounter runtime errors, so it is important for you to test to see if the methods you call actually work.

    This is a step towards being able to server-side render content, but, it is not completely supported yet. This does not mean that you can render an editor instance on the server and expect it to just output any HTML.

    Usage

    If you pass element: null to your editor options:

    • the editor.view will not be initialized
    • the editor will not emit it's 'create' event
    • the focus will not be initialized to it's first position

    You can however, later use the new mount function on the instance, which will mount the editor view to a DOM element. This obviously will not be allowed on the server which has no document object.

    Therefore, this will work on the server:

    import { Editor } from '@tiptap/core'
    import StarterKit from '@tiptap/starter-kit'
    
    const editor = new Editor({
      element: null,
      content: { type: 'doc', content: [{ type: 'paragraph', content: [{ type: 'text', text: 'Hello, World!' }] }] },
      extensions: [StarterKit],
    })
    
    editor
      .chain()
      .selectAll()
      .setContent({ type: 'doc', content: [{ type: 'paragraph', content: [{ type: 'text', text: 'XYZ' }] }] })
      .run()
    
    console.log(editor.state.doc.toJSON())
    // { type: 'doc', content: [ { type: 'paragraph', content: [ { type: 'text', text: 'XYZ' } ] } ] }

    Any of these things will not work on the server, and result in a runtime error:

    import { Editor } from '@tiptap/core'
    import StarterKit from '@tiptap/starter-kit'
    
    const editor = new Editor({
      // document will not be defined in a server environment
      element: document.createElement('div'),
      content: { type: 'doc', content: [{ type: 'paragraph', content: [{ type: 'text', text: 'Hello, World!' }] }] },
      extensions: [StarterKit],
    })
    
    editor
      .chain()
      // focus is a command which depends on the editor-view, so it will not work in a server environment
      .focus()
      .run()
    
    console.log(editor.getHTML())
    // getHTML relies on the editor-view, so it will not work in a server environment
  • 32958d6: Extensions, Nodes and Marks no longer respect the deprecated defaultOptions config value

Patch Changes

  • 20f68f6: Remove editor.getCharacterCount() which was already deprecated and incorrectly implemented
  • d6c7558: For performance, if a transaction results in the exact same editor state (either filtered out or failed to apply), then do not attempt to re-apply the same editor state and do not emit any events associated to the transaction.

3.0.0-next.5

Major Changes

  • 32958d6: Node, Mark and Extension config options now are strongly typed and do not allow arbitrary keys on the options object.

    To add keys, like when using extendNodeSchema or extendMarkSchema, you can do this:

    declare module '@tiptap/core' {
      interface NodeConfig {
        /**
         * This key will be added to all NodeConfig objects in your project
         */
        newKey?: string
      }
      interface MarkConfig {
        /**
         * This key will be added to all MarkConfig objects in your project
         */
        newKey?: string
      }
      interface ExtensionConfig {
        /**
         * This key will be added to all ExtensionConfig objects in your project
         */
        newKey?: string
      }
    }
  • 062afaf: clearContent command defaults to emitting updates now

  • 062afaf: Change signature of setContent command to (content, options) and default to emitting updates

  • 32958d6: editor.storage is now strongly typed Storage instances, using a similar pattern as commands, where you can define the type of the storage value using namespaces like:

    declare module '@tiptap/core' {
      interface Storage {
        extensionName: StorageValue
      }
    }
  • 32958d6: editor.storage is instantiated per editor rather than per extension.

    Previously, the storage value was a singleton per extension instance, this caused strange bugs when using multiple editor instances on a single page.

    Now, storage instances are per editor instance, so changing the value on one editor.storage instance will not affect another editor's value.

Minor Changes

  • 0e3207f: Add support for markviews, which allow you to render custom views for marks within the editor. This is useful for rendering custom UI for marks, like a color picker for a text color mark or a link editor for a link mark.

    Here is a plain JS markview example:

    Mark.create({
      // Other options...
      addMarkView() {
        return ({ mark, HTMLAttributes }) => {
          const dom = document.createElement('b')
          const contentDOM = document.createElement('span')
    
          dom.appendChild(contentDOM)
    
          return {
            dom,
            contentDOM,
          }
        }
      },
    })

    React binding

    To use a React component for a markview, you can use the @tiptap/react package:

    import { Mark } from '@tiptap/core'
    import { ReactMarkViewRenderer } from '@tiptap/react'
    
    import Component from './Component.jsx'
    
    export default Mark.create({
      name: 'reactComponent',
    
      parseHTML() {
        return [
          {
            tag: 'react-component',
          },
        ]
      },
    
      renderHTML({ HTMLAttributes }) {
        return ['react-component', HTMLAttributes]
      },
    
      addMarkView() {
        return ReactMarkViewRenderer(Component)
      },
    })

    And here is an example of a React component:

    import { MarkViewContent, MarkViewRendererProps } from '@tiptap/react'
    import React from 'react'
    
    // eslint-disable-next-line @typescript-eslint/no-unused-vars
    export default (props: MarkViewRendererProps) => {
      const [count, setCount] = React.useState(0)
    
      return (
        <span className="content" data-test-id="mark-view">
          <MarkViewContent />
          <label contentEditable={false}>
            React component:
            <button
              onClick={() => {
                setCount(count + 1)
              }}
            >
              This button has been clicked {count} times.
            </button>
          </label>
        </span>
      )
    }

    Vue 3 binding

    To use a Vue 3 component for a markview, you can use the @tiptap/vue-3 package:

    import { Mark } from '@tiptap/core'
    import { VueMarkViewRenderer } from '@tiptap/vue-3'
    
    import Component from './Component.vue'
    
    export default Mark.create({
      name: 'vueComponent',
    
      parseHTML() {
        return [
          {
            tag: 'vue-component',
          },
        ]
      },
    
      renderHTML({ HTMLAttributes }) {
        return ['vue-component', HTMLAttributes]
      },
    
      addMarkView() {
        return VueMarkViewRenderer(Component)
      },
    })

    And here is an example of a Vue 3 component:

    <template>
      <span className="content" data-test-id="mark-view">
        <mark-view-content />
        <label contenteditable="false"
          >Vue Component::
          <button @click="increase" class="primary">This button has been clicked {{ count }} times.</button>
        </label>
      </span>
    </template>
    
    <script>
    import { MarkViewContent, markViewProps } from '@tiptap/vue-3'
    export default {
      components: {
        MarkViewContent,
      },
      data() {
        return {
          count: 0,
        }
      },
      props: markViewProps,
      methods: {
        increase() {
          this.count += 1
        },
      },
    }
    </script>
  • 28c5418: Adds a new delete event which can detect content which has been deleted by the editor as a core extension

  • 704f462: This introduces a new behavior for the editor, the ability to be safely run on the server-side (without rendering).

    prosemirror-view encapsulates all view (& DOM) related code, and cannot safely be SSR'd, but, the majority of the editor instance itself is in plain JS that does not require DOM APIs (unless your content is specified in HTML).

    But, we have so many convenient methods available for manipulating content. So, it is a shame that they could not be used on the server side too. With this change, the editor can be rendered on the server-side and will use a stub for select prosemirror-view methods. If accessing unsupported methods or values on the editor.view, you will encounter runtime errors, so it is important for you to test to see if the methods you call actually work.

    This is a step towards being able to server-side render content, but, it is not completely supported yet. This does not mean that you can render an editor instance on the server and expect it to just output any HTML.

    Usage

    If you pass element: null to your editor options:

    • the editor.view will not be initialized
    • the editor will not emit it's 'create' event
    • the focus will not be initialized to it's first position

    You can however, later use the new mount function on the instance, which will mount the editor view to a DOM element. This obviously will not be allowed on the server which has no document object.

    Therefore, this will work on the server:

    import { Editor } from '@tiptap/core'
    import StarterKit from '@tiptap/starter-kit'
    
    const editor = new Editor({
      element: null,
      content: { type: 'doc', content: [{ type: 'paragraph', content: [{ type: 'text', text: 'Hello, World!' }] }] },
      extensions: [StarterKit],
    })
    
    editor
      .chain()
      .selectAll()
      .setContent({ type: 'doc', content: [{ type: 'paragraph', content: [{ type: 'text', text: 'XYZ' }] }] })
      .run()
    
    console.log(editor.state.doc.toJSON())
    // { type: 'doc', content: [ { type: 'paragraph', content: [ { type: 'text', text: 'XYZ' } ] } ] }

    Any of these things will not work on the server, and result in a runtime error:

    import { Editor } from '@tiptap/core'
    import StarterKit from '@tiptap/starter-kit'
    
    const editor = new Editor({
      // document will not be defined in a server environment
      element: document.createElement('div'),
      content: { type: 'doc', content: [{ type: 'paragraph', content: [{ type: 'text', text: 'Hello, World!' }] }] },
      extensions: [StarterKit],
    })
    
    editor
      .chain()
      // focus is a command which depends on the editor-view, so it will not work in a server environment
      .focus()
      .run()
    
    console.log(editor.getHTML())
    // getHTML relies on the editor-view, so it will not work in a server environment
  • 32958d6: Extensions, Nodes and Marks no longer respect the deprecated defaultOptions config value

3.0.0-next.4

3.0.0-next.3

3.0.0-next.2

Major Changes

  • 37913d5: Fix getPos type in NodeViewRendererProps to potentially be undefined

    Breaking change: Types may flag uses of getPos where an undefined possibility isn't handled. Why this change was made: To ensure the type reflects the real functionality of this function. How to update: Ensure that the return value of getPos exists before making use of the value.

  • 12bb31a: insertContent and insertContentAt commands should not split text nodes like paragraphs into multiple nodes when the inserted content is at the beginning of the text to avoid empty nodes being created

Patch Changes

  • 283e606: Fixed an issue on Android where the focus command would cause the keyboard to flash
  • ca6269e: Added support for drag-and-drop between multiple editors
  • e0dfecc: Updates the typings to be inline with Prosemirror-view #5867
  • 722ec00: Use an AllSelection for the selectAll command #5516
  • b7ef150: Fixed an issue with nodeviews preventing any drag events in child nodes of the nodeview wrapper element

3.0.0-next.1

Major Changes

  • a92f4a6: We are now building packages with tsup which does not support UMD builds, please repackage if you require UMD builds

Patch Changes

  • da76972: Resolve several selection related bug #2690 #5208
  • Updated dependencies [a92f4a6]
    • @tiptap/pm@3.0.0-next.1

3.0.0-next.0

Patch Changes

  • 0ec0af6: fix(core): findDuplicates - use Array.from when converting Set
    • @tiptap/pm@3.0.0-next.0

2.12.0

2.11.9

2.11.8

Patch Changes

  • 8147cc7: Fixes a bug where you could not unregister multiple plugins.

2.11.7

Patch Changes

  • e23882d: Clone dragged node before dragging to get correct drag preview image

2.11.6

Patch Changes

  • 826cfe7: Export focusEvents plugin key

2.11.5

2.11.4

2.11.3

Patch Changes

  • a44a7c3: fix(core): do not reset marks, or nodes when using IME on mobile devices
  • fa63c47: Focus synchronously only if on iOS or Android #4448

2.11.2

Patch Changes

  • 2abd4df: Re-release

2.11.1

2.11.0

Minor Changes

  • ff8eed6: Support validate options in node and mark attribute definitions.

Patch Changes

  • 20f68f6: Remove editor.getCharacterCount() which was already deprecated and incorrectly implemented
  • d6c7558: If a transaction results in the exact same editor state (either filtered out or failed to apply) then do not attempt to re-apply the same editor state and do not emit any events associated to the transaction

2.5.8

Patch Changes

  • a08bf85: This fixes a bug with inputrules not being able to resolve positions properly
    • @tiptap/pm@2.5.8

2.5.7

Patch Changes

  • b012471: This addresses an issue with isNodeEmpty function where it was also comparing node attributes and finding mismatches on actually empty nodes. This helps placeholders find empty content correctly
  • cc3497e: Fixes a bug where if enableContentCheck was true, inserting content as JSON nodes would fail. This was because the node that was being created technically had a different schema than the content being inserted, so it would fail to generate the correct content value
    • @tiptap/pm@2.5.7

2.5.6

Patch Changes

  • 618bca9: Adjust the splitBlock command to return false when it was unsuccessful.
  • 35682d1: This fixes a bug with the placeholder extension where a heading level other than the default was not considered empty, when comparing node contents, we need to consider that the node attributes are carried over for a fair comparison of content instead of attribute values
  • 2104f0f: Add a check beforecreateNodeViews so that view.setProps is not called when the view has already been destroyed
  • Updated dependencies [b5c1b32]
    • @tiptap/pm@2.5.6

2.5.5

Patch Changes

  • 4cca382: Make sure that atoms are used in-full without cutting the content. Node size for atoms is 1 which causes text to be cut unexpectedly.
  • 3b67e8a: This changes the typing to not declare types on all HTMLElements, just a local one with the editor instance attached
    • @tiptap/pm@2.5.5

2.5.4

Patch Changes

  • dd7f9ac: There was an issue with the cjs bundling of packages and default exports, now we resolve default exports in legacy compatible way
  • Updated dependencies [dd7f9ac]
    • @tiptap/pm@2.5.4

2.5.3

Patch Changes

  • @tiptap/pm@2.5.3

2.5.2

Patch Changes

  • 07f4c03: There was a bug where doing a .configure on an extension, node or mark would overwrite the extensions options instead of being merged with the default options.
    • @tiptap/pm@2.5.2

2.5.1

Patch Changes

  • @tiptap/pm@2.5.1

2.5.0

Patch Changes

  • fb45149: Made some minor changes to how packages are built
  • fb45149: When parseOptions.whitespace === 'full' or parseOptions.whitespace === true setting content will no longer strip whitespaces on setContent
  • fb45149: Faster performance for checking if a node is empty and if something is a fragment
  • fb45149: Vue 3 bubble menus are properly synchronized with state transitions with the new beforeTransaction hook which is fired before the transaction is applied to the view
    • @tiptap/pm@2.5.0

2.5.0-pre.16

Patch Changes

  • @tiptap/pm@2.5.0-pre.16

2.5.0-pre.15

Patch Changes

  • @tiptap/pm@2.5.0-pre.15

2.5.0-pre.14

Patch Changes

  • @tiptap/pm@2.5.0-pre.14

2.5.0-pre.13

Patch Changes

  • 74a37ff: CI build testing
    • @tiptap/pm@2.5.0-pre.13

2.5.0-pre.12

Patch Changes

  • 74a37ff: CI build testing
    • @tiptap/pm@2.5.0-pre.12

2.5.0-pre.11

Patch Changes

  • 74a37ff: CI build testing
    • @tiptap/pm@2.5.0-pre.11

2.5.0-pre.10

Patch Changes

  • 74a37ff: CI build testing
    • @tiptap/pm@2.5.0-pre.10

2.5.0-pre.9

Patch Changes

  • 14a00f4: Made some minor changes to how packages are built
    • @tiptap/pm@2.5.0-pre.9

2.5.0-pre.8

Patch Changes

  • 509676e: Vue 3 bubble menus are properly synchronized with state transitions with the new beforeTransaction hook which is fired before the transaction is applied to the view
    • @tiptap/pm@2.5.0-pre.8

2.5.0-pre.7

Patch Changes

  • @tiptap/pm@2.5.0-pre.7

All notable changes to this project will be documented in this file. See Conventional Commits for commit guidelines.

2.4.0 (2024-05-14)

Bug Fixes

  • core: configure should use the parent of the current instance, to avoid duplication (#5147) (4db463c)

Features

2.3.2 (2024-05-08)

Bug Fixes

2.3.1 (2024-04-30)

Note: Version bump only for package @tiptap/core

2.3.0 (2024-04-09)

Bug Fixes

Features

  • core: apply input and paste rules when using insertContent methods (#5046) (96b6abc)

2.2.6 (2024-04-06)

Bug Fixes

  • unexpected renderText() for contentful nodes (#3410) (d6c71a8)

2.2.5 (2024-04-05)

Note: Version bump only for package @tiptap/core

2.2.4 (2024-02-23)

Bug Fixes

  • typecheck drag and clipboard events for testing environments (bbee9a3)

2.2.3 (2024-02-15)

Note: Version bump only for package @tiptap/core

2.2.2 (2024-02-07)

Note: Version bump only for package @tiptap/core

2.2.1 (2024-01-31)

Note: Version bump only for package @tiptap/core

2.2.0 (2024-01-29)

Bug Fixes

2.2.0-rc.8 (2024-01-08)

Bug Fixes

  • core: fix options now being empty (fc67cb1)

2.2.0-rc.7 (2023-11-27)

Bug Fixes

  • core: set defaultOptions to undefined by default (448b433)

2.2.0-rc.6 (2023-11-23)

2.2.0-rc.4 (2023-10-10)

2.2.0-rc.3 (2023-08-18)

2.2.0-rc.1 (2023-08-18)

2.2.0-rc.0 (2023-08-18)

2.1.16 (2024-01-10)

Bug Fixes

  • core: fix new lines being added via elementFromString (#4767) (2235908)

2.1.15 (2024-01-08)

Bug Fixes

  • core: fix insertContentAt keeping new lines in html content (#4465) (135a12f)

2.1.14 (2024-01-08)

Note: Version bump only for package @tiptap/core

2.1.13 (2023-11-30)

Note: Version bump only for package @tiptap/core

2.1.12 (2023-10-11)

Note: Version bump only for package @tiptap/core

2.1.11 (2023-09-20)

Reverts

2.1.10 (2023-09-15)

Note: Version bump only for package @tiptap/core

2.1.9 (2023-09-14)

Note: Version bump only for package @tiptap/core

2.1.8 (2023-09-04)

Note: Version bump only for package @tiptap/core

2.1.7 (2023-09-04)

Note: Version bump only for package @tiptap/core

2.1.6 (2023-08-18)

Bug Fixes

  • core: fix broken export (4227f32)

2.1.5 (2023-08-18)

Note: Version bump only for package @tiptap/core

2.1.4 (2023-08-18)

Bug Fixes

2.1.3 (2023-08-18)

Note: Version bump only for package @tiptap/core

2.1.2 (2023-08-17)

Bug Fixes

  • core: fix error when merging class attributes (#4340) (a251946)

2.1.1 (2023-08-16)

Note: Version bump only for package @tiptap/core

2.1.0 (2023-08-16)

Note: Version bump only for package @tiptap/core

2.1.0-rc.14 (2023-08-11)

Note: Version bump only for package @tiptap/core

2.1.0-rc.13 (2023-08-11)

2.1.0-rc.12 (2023-07-14)

2.1.0-rc.11 (2023-07-07)

Bug Fixes

  • core: fix cut and insertContentAt functions (#4187) (6b65af8)

2.1.0-rc.10 (2023-07-07)

2.1.0-rc.9 (2023-06-15)

2.1.0-rc.8 (2023-05-25)

2.1.0-rc.5 (2023-05-25)

Features

2.1.0-rc.4 (2023-04-27)

2.1.0-rc.3 (2023-04-26)

Bug Fixes

  • core: remove configure from extend functionality (4af54da)

2.1.0-rc.2 (2023-04-26)

2.1.0-rc.1 (2023-04-12)

2.1.0-rc.0 (2023-04-05)

Bug Fixes

  • clear nodes when cursor at start of empty isolating parent (#3943) (7278ee2)
  • lists: improve list behaviour (684e48a)
  • Update peerDependencies to fix lerna version tasks (#3914) (0c1bba3)

2.1.0-rc.12 (2023-07-14)

Note: Version bump only for package @tiptap/core

2.1.0-rc.11 (2023-07-07)

Bug Fixes

  • core: fix cut and insertContentAt functions (#4187) (6b65af8)

2.1.0-rc.10 (2023-07-07)

Note: Version bump only for package @tiptap/core

2.1.0-rc.9 (2023-06-15)

Bug Fixes

  • lists: improve list behaviour (684e48a)

2.1.0-rc.8 (2023-05-25)

Note: Version bump only for package @tiptap/core

2.1.0-rc.7 (2023-05-25)

Note: Version bump only for package @tiptap/core

2.1.0-rc.6 (2023-05-25)

Note: Version bump only for package @tiptap/core

2.1.0-rc.5 (2023-05-25)

Features

2.1.0-rc.4 (2023-04-27)

Note: Version bump only for package @tiptap/core

2.1.0-rc.3 (2023-04-26)

Bug Fixes

  • core: remove configure from extend functionality (4af54da)

2.1.0-rc.2 (2023-04-26)

2.1.0-rc.1 (2023-04-12)

2.1.0-rc.0 (2023-04-05)

Bug Fixes

  • clear nodes when cursor at start of empty isolating parent (#3943) (7278ee2)
  • Update peerDependencies to fix lerna version tasks (#3914) (0c1bba3)

2.1.0-rc.0 (2023-04-05)

Bug Fixes

  • clear nodes when cursor at start of empty isolating parent (#3943) (7278ee2)

2.0.3 (2023-04-13)

Note: Version bump only for package @tiptap/core

2.0.2 (2023-04-03)

Note: Version bump only for package @tiptap/core

2.0.1 (2023-03-30)

Bug Fixes

  • Update peerDependencies to fix lerna version tasks (#3914) (0534f76)

2.0.0-beta.220 (2023-02-28)

Bug Fixes

  • core: fix destroyed view causing errors on dispatchTransaction (#3799) (3c07ca0)

2.0.0-beta.219 (2023-02-27)

Bug Fixes

Features

2.0.0-beta.218 (2023-02-18)

Bug Fixes

2.0.0-beta.217 (2023-02-09)

Note: Version bump only for package @tiptap/core

2.0.0-beta.216 (2023-02-08)

Note: Version bump only for package @tiptap/core

2.0.0-beta.215 (2023-02-08)

Bug Fixes

  • fix builds including prosemirror (a380ec4)

2.0.0-beta.214 (2023-02-08)

Note: Version bump only for package @tiptap/core

2.0.0-beta.213 (2023-02-07)

Note: Version bump only for package @tiptap/core

2.0.0-beta.212 (2023-02-03)

Bug Fixes

  • core: fix broken types in definition file (f659037)

2.0.0-beta.211 (2023-02-02)

Note: Version bump only for package @tiptap/core

2.0.0-beta.210 (2023-02-02)

Features

  • pm: new prosemirror package for dependency resolving (f387ad3)

2.0.0-beta.209 (2022-12-16)

Note: Version bump only for package @tiptap/core

2.0.0-beta.208 (2022-12-16)

Note: Version bump only for package @tiptap/core

2.0.0-beta.207 (2022-12-08)

Note: Version bump only for package @tiptap/core

2.0.0-beta.206 (2022-12-08)

Note: Version bump only for package @tiptap/core

2.0.0-beta.205 (2022-12-05)

Bug Fixes

  • core: implement deleteCurrentNode command & fix node joining on Delete key (#3192) (ef8a1a2)

Features

  • commands: add joinUp and joinDown command (#3455) (343ce75)

2.0.0-beta.204 (2022-11-25)

Bug Fixes

  • core: rename esm modules to esm.js (c1a0c3a)

2.0.0-beta.203 (2022-11-24)

Note: Version bump only for package @tiptap/core

2.0.0-beta.202 (2022-11-04)

Note: Version bump only for package @tiptap/core

2.0.0-beta.201 (2022-11-04)

Reverts

  • Revert "Fixed dragged text not being deleted after drop on another editor (#3279)" (403b99c), closes #3279

2.0.0-beta.200 (2022-11-04)

Note: Version bump only for package @tiptap/core

2.0.0-beta.199 (2022-09-30)

Note: Version bump only for package @tiptap/core

2.0.0-beta.198 (2022-09-29)

Bug Fixes

  • core: InputRules does not work for ranges containing multiple text nodes (#3205) (2f9ba32), closes #3071

2.0.0-beta.197 (2022-09-26)

Bug Fixes

  • core: Can() does not work for setting marks (#3223) (17a41da)

2.0.0-beta.196 (2022-09-20)

Note: Version bump only for package @tiptap/core

2.0.0-beta.195 (2022-09-14)

Note: Version bump only for package @tiptap/core

2.0.0-beta.194 (2022-09-11)

Note: Version bump only for package @tiptap/core

2.0.0-beta.193 (2022-09-10)

Bug Fixes

  • add attributes to pre tag instead of code tag by default, fix #2440 (85fcc29)
  • add correct type for parseOptions (592892e)
  • add correct windows and px keymap (75e5601)
  • add CreateNodeFromContentOptions to insertContent (#1678) (aabdfd6)
  • add exports to package.json (1277fa4)
  • add marks to JSONContent type (f829b45)
  • add missing ProseMirror styles (12602e7)
  • add scrollIntoView for insertContent (e7fe724)
  • add support for CellSelection in isActive helper, fix #1947 (b42e442)
  • add support for multiple ranges in clipboardTextSerializer, fix #1982 (98a1cb3)
  • add support for priority and nested extension for getSchema (129ad83)
  • add topNode to getDebugJSON (f65e1b3)
  • add way to cancel inputrules and pasterules (#2368) (669efd0)
  • allow input rules after hard break, fix #2302 (ded6f96)
  • allow to re-apply current mark for input rules and paste rules, fix #2003 (3958bf1)
  • better merge mark attributes for existing marks, fix #1039 (cfd29fa)
  • call selectAll on 'cmd+a', set a TextSelection instead of AllSelection, fix #1908 (bad16d9)
  • check for atom nodes in ignoreMutation handler, fix #1448 (2deb07f)
  • check for excluded marks in isMarkActive, fix #1388 (3c4cc96)
  • check for invalid content in insertContentAt command (e09fd93)
  • check for NodeSelection within posToDOMRect (a4ec4ff)
  • check for storedMarks in getMarkAttributes, fix #2039 (22c82ba)
  • core: :bug: fix inputrule not recognizing text content of non-text leaf nodes (64b23e1)
  • core: createCan command props shouldn't try dispatch (#3025) (#3026) (40f4ea3)
  • core: dont use selection for setContent replacement (#2934) (134a4bd)
  • core: fix focus command passing through editor state instead of existing transaction (5b0b7d9)
  • core: Increment i in defaultBlockAt (655957d)
  • core: insert PasteRule Node at matched position (#2942) (#2943) (bda6e8d)
  • core: isNodeSelection, isTextSelection not always false (#3089) (574cd69), closes #2979
  • core: make setEditable trigger all 'update' listeners (#3140) (4851fc5)
  • core: make setEditable trigger onUpdate function (#2935) (de1253a)
  • core: only respect text of node before current position (#2937) (#2941) (e280a02)
  • core: setNodeSelection should not clamp pos by Selection.atStart/atEnd (#3091) (313b8b8), closes #3090
  • do not apply paste rules for ProseMirror HTML (9d281e9)
  • do not check for node selection within posToDOMRect (c0e68d5)
  • don't override behaviour of Home / End in pc keymap (d270419)
  • don't remove the tiptap styles on destroy, fix #2120, fix #2143 (a0a88ac)
  • don’t add tabindex when readonly, fix #2458 (01411f8)
  • don’t check for active node in wrapIn command, fix #1059 (170ec4b)
  • don’t merge classes (dba0c1a)
  • fix a bug in detecting a current list in toggleList command (a35b253)
  • fix a bug in markPasteRule (c2ccf68)
  • fix a bug that messed up pasted link attributes, fix #1284 (7da647d)
  • fix a bug when configurating the same extension multiple times (655c564)
  • fix a bug when detecting changes within node views (708ac94)
  • fix a bug when dragging node views (4e6d43b)
  • fix a bug when insert newline at node start, fix #1411 (b97bebe)
  • fix a bug when parsing attributes if no parseHTML method is provided, fix #2058 (5da313a)
  • fix a bug where paste rules doesn’t worked at the start of the document, see #1225 (ff67ee1)
  • fix adding mark only with insertContent(), fix #264 (0a63123)
  • fix End key handler, fix #2446 (b584920)
  • fix error when calculating contentMatch within clearNodes command, fix #1361 (3709668)
  • fix export for getAttributes (5b8808a)
  • fix extension name for clipboardTextSerializer (15f90ec)
  • fix extension option merging (aa002a0)
  • fix focus on iOS, fix #1806 (3a06938)
  • fix fragile schema validity test in splitBlock (e52f41a)
  • fix isEditable check on initialization (f6f8cf9)
  • fix mappes positions for paste rules, fix #2002 (770c4e1)
  • fix merging options on configure for multiple extension instances (d037c56)
  • fix missing extensions when using addExtension, fix #1309 (28737b1)
  • fix onBeforeCreate event handler, fix #1236 (0b67f18)
  • fix order of executed plugins, fix #1547 (f8efdf7)
  • fix RangeError bug when selecting all text, fix #2490 (70422dd)
  • fix removing the caret on blur in some situations when using safari, fix #2405 (9d31712)
  • fix some react focus issues (#1724), fix #1716, fix #1608, fix #1520 (956566e)
  • fix storage context when using configure (ef254ce)
  • fix type error for commands (26785db)
  • fix type for emitUpdate, fix #276 (4137e00)
  • fix type for insertContent command (4295c6b)
  • fix updating editorProps via setOptions (#1540), fix #1518 (e6f67ca)
  • fixed type for Content (39147f5)
  • getHTMLFromFragment now expects a fragment instead of node (2c9cf03)
  • handle backspace also on shift (32ae386)
  • ignore editable in dispatchTransaction, fix #1239 (b3fb022)
  • Ignore iOS mutations when unfocused (#2170) (10fea3b)
  • improve setNode behavior for list items, fix #2261 (f2ced69)
  • improve active mark detection for inline nodes, fix #1893 (6437790)
  • Improve backspace handling (#2284), fix #2281 (8ed485b)
  • Improve behavior when using insertContent (#2147) (8fc915c)
  • improve calculation for min/max positions in selections, fix #1588 (9425e72)
  • improve default gapcursor position when surrounded by margins (cd14731)
  • improve default styling for .ProseMirror-separator (0e94afe)
  • improve drag position for node views (5e5b8db)
  • improve drag position for node views even more (d2c5b71)
  • improve JSONContent type to allow pure JSON content (ce7f52a)
  • improve performance for isActive method, see #1930 (fcca1e6)
  • improve types for generateHTML (502b5b1)
  • initialize autofocus selection in createView (#2212) (de39853)
  • insertContent keeps marks when using plain text, fix #2406 (d242706)
  • lint error (e17c414)
  • Mark @tiptap/react and @tiptap/core as side effect free (#2361) (e609b2d)
  • nodeInputRule() support for group match (#1574) (8ee0d67)
  • preserve whitespace when using insertContent command (8f10181)
  • prevent a bug for node views when pressing enter on iOS, fix #1214 (234d238)
  • prevent bug when editor is destroyed very fast (939fc3d)
  • prevent dispatch empty fragment when parsing content with insertContent (2a4e02a)
  • prevent error in toggleList command, fix #2279 (66eb2f2)
  • prevent RangeError for posToDOMRect, fix #2112 (010418d)
  • prevent removing inline nodes when using insertContentAt, fix #2156 (53ffce5)
  • properly calculate setDragImage position (7401d45)
  • remove custom coordsAtPos method, fix #583 (485fb8c)
  • remove debug log (beb96c5)
  • remove defaultOptions fallback, fix #2219 (20b6d79)
  • remove editable check in updateAttributes, fix #1415 (fbc8fff)
  • remove editor from addExtensions context (cbc0dd8)
  • remove empty attributes in getDebugJSON (940fd69)
  • remove empty mark attributes from getDebugJSON (07cabe6)
  • revert adding exports (bc320d0)
  • revert adding type: module (f8d6475)
  • revert async focus, fix #1658 (c9869c8)
  • revert changes to selectAll command, fix #2491 (bdab760)
  • run pasterules for pasted content, fix #2408 (bc03c0d)
  • Separate drags from drops in stopEvent (#2070) (bebaa40)
  • set correct priority when extending extensions, fix #1288 (b4e2b6f)
  • set correct type for emitUpdate (9a40c17)
  • set max textselection correctly, fix #2401 (4be16fc)
  • support all characters for suggestion char, fix #2385 (42d3ee8)
  • update getJSON return type to JSONContent (#2153) (6583ede)

Features

  • #1898 Made the EventEmitter generic to improve the types of the tiptap events (#1959) (54e85fd)
  • add 'all' option to focus command, fix #2181 (3c571c9)
  • add updateSelection option to insertContentAt command (9f2c368)
  • add addExtensions option (26e672e)
  • add coordsAtPos and posToClientRect helper methods (8dab614)
  • add defaultBlockAt helper (403c147)
  • add deleteNode command (73f1c50)
  • add deleteNode method to node views (fcee5f8)
  • add editor prop to KeyboardShortcutCommand (e0c2460)
  • add editor.getAttributes, deprecate editor.getNodeAttributes and editor.getMarkAttributes (072905c)
  • add enableCoreExtensions flag (#1923) (4178281)
  • add extendEmptyMarkRange option to mark commands (#1859) (14e458e)
  • Add extension storage (#2069) (7ffabf2)
  • add findChildrenInRange helper (463661c)
  • add forEach command (783ce4e)
  • add getText() and generateText() methods (fix #1428) (#1875) (fe6a3e7)
  • add ignoreMutation option to NodeViewRenderer, fix #1538 (651e691)
  • add insertContent() command, deprecate insertText(), insertHTML() and insertNode() (b8d9b7d)
  • add name to extension context (12f60ab)
  • add parentConfig to extension context for more extendable extensions, fix #259 (5e1ec5d)
  • add priority option to extensions (bb1ae65)
  • add resetAttributes() command, deprecate resetNodeAttributes() (3334d93)
  • add scrollIntoView option to focus command, fix #2172 (e0f6490)
  • add selectTextblockStart and selectTextblockEnd commands (0aa39f9)
  • add setMeta command (36dad2b)
  • add setNodeSelection and setTextSelection commands (811bf69)
  • add some improvements to CharacterCount extension (#2256), fix #1049, fix #1550, fix #1839, fix #2245 (5daa870)
  • Add support for autolink (#2226) (3d68981)
  • add support for checking for attributes in extendMarkRange (ff7dd9b)
  • add Tracker class (a757716)
  • add transaction to all events if possible, see #1461 (7f6ed0b)
  • add updateAttributes() command, deprecate updateNodeAttributes(), fix #254 (aac32b4)
  • Allow a rule to be skipped from the getAttributes callback in markPasteRule (#1625) (9ffd58c)
  • Allow array of extensions for enableInputRules and enablePasteRules options (#2119) (3158c37)
  • allow number for setTextSelection and insertContentAt (2f7a6ad)
  • Allow to use commands within InputRule and PasteRule (#2035) (4303637)
  • allow wildcards when checking attributes in isActive, fix #1752 (64409ca)
  • core: add nodePasteRule to core (15123ee)
  • export isList, fix #1326 (2bd17c7)
  • export mark helpers (313ab0e)
  • expose node helpers to core (6048f9b)
  • Integrate input rules and paste rules into the core (#1997) (723b955)
  • join lists on toggleList (#2260), fix #1329 (126ad72)
  • parseHTML for attributes should return the value instead of an object now, fix #1863 (8a3b47a)
  • remove deprecated commands insertHTML, insertNode and insertText (86d570f)
  • remove resize event handler (9f64015)

Reverts

2.0.0-beta.183 (2022-09-03)

Bug Fixes

  • core: createCan command props shouldn't try dispatch (#3025) (#3026) (40f4ea3)
  • core: isNodeSelection, isTextSelection not always false (#3089) (574cd69), closes #2979
  • core: make setEditable trigger all 'update' listeners (#3140) (4851fc5)
  • core: make setEditable trigger onUpdate function (#2935) (de1253a)
  • core: setNodeSelection should not clamp pos by Selection.atStart/atEnd (#3091) (313b8b8), closes #3090

2.0.0-beta.182 (2022-07-06)

Bug Fixes

  • core: dont use selection for setContent replacement (#2934) (134a4bd)
  • core: only respect text of node before current position (#2937) (#2941) (e280a02)

2.0.0-beta.181 (2022-06-27)

Bug Fixes

  • core: fix focus command passing through editor state instead of existing transaction (5b0b7d9)

Features

  • core: add nodePasteRule to core (15123ee)

2.0.0-beta.180 (2022-06-20)

Note: Version bump only for package @tiptap/core

2.0.0-beta.179 (2022-06-17)

Reverts

2.0.0-beta.177 (2022-06-17)

Reverts

2.0.0-beta.176 (2022-05-18)

Bug Fixes

  • lint error (e17c414)
  • properly calculate setDragImage position (7401d45)

2.0.0-beta.175 (2022-04-27)

Bug Fixes

  • don't override behaviour of Home / End in pc keymap (d270419)

2.0.0-beta.174 (2022-02-07)

Bug Fixes

2.0.0-beta.173 (2022-02-07)

Bug Fixes

  • fix RangeError bug when selecting all text, fix #2490 (70422dd)

2.0.0-beta.172 (2022-02-03)

Bug Fixes

2.0.0-beta.171 (2022-01-28)

Note: Version bump only for package @tiptap/core

2.0.0-beta.170 (2022-01-27)

Bug Fixes

2.0.0-beta.169 (2022-01-27)

Bug Fixes

2.0.0-beta.168 (2022-01-26)

Bug Fixes

  • add attributes to pre tag instead of code tag by default, fix #2440 (85fcc29)

2.0.0-beta.167 (2022-01-25)

Bug Fixes

  • add correct windows and px keymap (75e5601)

Features

  • add selectTextblockStart and selectTextblockEnd commands (0aa39f9)

2.0.0-beta.166 (2022-01-20)

Bug Fixes

  • insertContent keeps marks when using plain text, fix #2406 (d242706)

2.0.0-beta.165 (2022-01-20)

Bug Fixes

  • fix removing the caret on blur in some situations when using safari, fix #2405 (9d31712)

2.0.0-beta.164 (2022-01-20)

Bug Fixes

2.0.0-beta.163 (2022-01-13)

Bug Fixes

  • support all characters for suggestion char, fix #2385 (42d3ee8)

2.0.0-beta.162 (2022-01-11)

Bug Fixes

  • Mark @tiptap/react and @tiptap/core as side effect free (#2361) (e609b2d)

2.0.0-beta.161 (2022-01-10)

Bug Fixes

  • add way to cancel inputrules and pasterules (#2368) (669efd0)

2.0.0-beta.160 (2022-01-04)

Note: Version bump only for package @tiptap/core

2.0.0-beta.159 (2021-12-22)

Bug Fixes

2.0.0-beta.158 (2021-12-17)

Bug Fixes

  • remove empty mark attributes from getDebugJSON (07cabe6)

2.0.0-beta.157 (2021-12-16)

Bug Fixes

2.0.0-beta.156 (2021-12-15)

Bug Fixes

2.0.0-beta.155 (2021-12-15)

Note: Version bump only for package @tiptap/core

2.0.0-beta.154 (2021-12-14)

Note: Version bump only for package @tiptap/core

2.0.0-beta.153 (2021-12-13)

Bug Fixes

  • check for invalid content in insertContentAt command (e09fd93)
  • don’t check for active node in wrapIn command, fix #1059 (170ec4b)
  • improve setNode behavior for list items, fix #2261 (f2ced69)

2.0.0-beta.152 (2021-12-10)

Features

2.0.0-beta.151 (2021-12-08)

Features

2.0.0-beta.150 (2021-12-06)

Note: Version bump only for package @tiptap/core

2.0.0-beta.149 (2021-12-05)

Bug Fixes

  • add support for multiple ranges in clipboardTextSerializer, fix #1982 (98a1cb3)

2.0.0-beta.148 (2021-12-03)

Bug Fixes

  • initialize autofocus selection in createView (#2212) (de39853)

2.0.0-beta.147 (2021-12-03)

Features

2.0.0-beta.146 (2021-12-02)

Note: Version bump only for package @tiptap/core

2.0.0-beta.145 (2021-12-02)

Bug Fixes

2.0.0-beta.144 (2021-12-02)

Note: Version bump only for package @tiptap/core

2.0.0-beta.143 (2021-11-25)

Features

  • add scrollIntoView option to focus command, fix #2172 (e0f6490)

2.0.0-beta.142 (2021-11-23)

Features

  • add defaultBlockAt helper (403c147)

2.0.0-beta.141 (2021-11-22)

Bug Fixes

  • improve default gapcursor position when surrounded by margins (cd14731)

Features

2.0.0-beta.140 (2021-11-18)

Bug Fixes

Features

  • Allow array of extensions for enableInputRules and enablePasteRules options (#2119) (3158c37)

2.0.0-beta.139 (2021-11-17)

Note: Version bump only for package @tiptap/core

2.0.0-beta.138 (2021-11-10)

Bug Fixes

  • prevent removing inline nodes when using insertContentAt, fix #2156 (53ffce5)
  • update getJSON return type to JSONContent (#2153) (6583ede)

2.0.0-beta.137 (2021-11-09)

Bug Fixes

2.0.0-beta.136 (2021-11-09)

Note: Version bump only for package @tiptap/core

2.0.0-beta.135 (2021-11-09)

Note: Version bump only for package @tiptap/core

2.0.0-beta.134 (2021-11-09)

Note: Version bump only for package @tiptap/core

2.0.0-beta.133 (2021-11-08)

Bug Fixes

  • fix a bug when parsing attributes if no parseHTML method is provided, fix #2058 (5da313a)
  • Improve behavior when using insertContent (#2147) (8fc915c)

2.0.0-beta.132 (2021-11-08)

Note: Version bump only for package @tiptap/core

2.0.0-beta.131 (2021-11-05)

Bug Fixes

  • improve JSONContent type to allow pure JSON content (ce7f52a)

2.0.0-beta.130 (2021-10-31)

Bug Fixes

2.0.0-beta.129 (2021-10-26)

Note: Version bump only for package @tiptap/core

2.0.0-beta.128 (2021-10-25)

Bug Fixes

  • fix storage context when using configure (ef254ce)

2.0.0-beta.127 (2021-10-22)

Bug Fixes

  • improve default styling for .ProseMirror-separator (0e94afe)
  • Separate drags from drops in stopEvent (#2070) (bebaa40)

2.0.0-beta.126 (2021-10-22)

Bug Fixes

  • fix a bug where paste rules doesn’t worked at the start of the document, see #1225 (ff67ee1)

Features

2.0.0-beta.125 (2021-10-14)

Bug Fixes

  • check for storedMarks in getMarkAttributes, fix #2039 (22c82ba)

2.0.0-beta.124 (2021-10-14)

Bug Fixes

  • fix type for insertContent command (4295c6b)

2.0.0-beta.123 (2021-10-14)

Features

  • add updateSelection option to insertContentAt command (9f2c368)
  • Allow to use commands within InputRule and PasteRule (#2035) (4303637)

2.0.0-beta.122 (2021-10-10)

Bug Fixes

  • allow to re-apply current mark for input rules and paste rules, fix #2003 (3958bf1)

2.0.0-beta.121 (2021-10-10)

Bug Fixes

  • do not apply paste rules for ProseMirror HTML (9d281e9)

2.0.0-beta.120 (2021-10-08)

Bug Fixes

2.0.0-beta.119 (2021-10-08)

Features

  • Integrate input rules and paste rules into the core (#1997) (723b955)

2.0.0-beta.118 (2021-10-03)

Bug Fixes

2.0.0-beta.117 (2021-10-02)

Note: Version bump only for package @tiptap/core

2.0.0-beta.116 (2021-09-30)

Features

  • #1898 Made the EventEmitter generic to improve the types of the tiptap events (#1959) (54e85fd)

2.0.0-beta.115 (2021-09-29)

Note: Version bump only for package @tiptap/core

2.0.0-beta.114 (2021-09-28)

Bug Fixes

  • getHTMLFromFragment now expects a fragment instead of node (2c9cf03)

2.0.0-beta.113 (2021-09-27)

Bug Fixes

  • add support for CellSelection in isActive helper, fix #1947 (b42e442)
  • handle backspace also on shift (32ae386)

2.0.0-beta.112 (2021-09-23)

Note: Version bump only for package @tiptap/core

2.0.0-beta.111 (2021-09-22)

Bug Fixes

  • improve performance for isActive method, see #1930 (fcca1e6)
  • nodeInputRule() support for group match (#1574) (8ee0d67)

2.0.0-beta.110 (2021-09-21)

Bug Fixes

  • call selectAll on 'cmd+a', set a TextSelection instead of AllSelection, fix #1908 (bad16d9)

2.0.0-beta.109 (2021-09-21)

Features

2.0.0-beta.108 (2021-09-20)

Note: Version bump only for package @tiptap/core

2.0.0-beta.107 (2021-09-18)

Bug Fixes

  • fix extension name for clipboardTextSerializer (15f90ec)

2.0.0-beta.106 (2021-09-15)

Bug Fixes

  • improve active mark detection for inline nodes, fix #1893 (6437790)

2.0.0-beta.105 (2021-09-09)

Features

2.0.0-beta.104 (2021-09-08)

Features

  • add extendEmptyMarkRange option to mark commands (#1859) (14e458e)
  • parseHTML for attributes should return the value instead of an object now, fix #1863 (8a3b47a)

2.0.0-beta.103 (2021-09-06)

Note: Version bump only for package @tiptap/core

2.0.0-beta.102 (2021-08-26)

Bug Fixes

2.0.0-beta.101 (2021-08-24)

Bug Fixes

  • add topNode to getDebugJSON (f65e1b3)

2.0.0-beta.100 (2021-08-20)

Bug Fixes

  • add missing ProseMirror styles (12602e7)

Features

  • allow wildcards when checking attributes in isActive, fix #1752 (64409ca)

2.0.0-beta.99 (2021-08-13)

Note: Version bump only for package @tiptap/core

2.0.0-beta.98 (2021-08-13)

Note: Version bump only for package @tiptap/core

2.0.0-beta.97 (2021-08-13)

Features

  • add transaction to all events if possible, see #1461 (7f6ed0b)

2.0.0-beta.96 (2021-08-12)

Bug Fixes

2.0.0-beta.95 (2021-08-11)

Bug Fixes

  • improve calculation for min/max positions in selections, fix #1588 (9425e72)

2.0.0-beta.94 (2021-08-09)

Bug Fixes

  • add CreateNodeFromContentOptions to insertContent (#1678) (aabdfd6)
  • fix isEditable check on initialization (f6f8cf9)
  • fix updating editorProps via setOptions (#1540), fix #1518 (e6f67ca)

2.0.0-beta.93 (2021-07-30)

Bug Fixes

2.0.0-beta.92 (2021-07-28)

Note: Version bump only for package @tiptap/core

2.0.0-beta.91 (2021-07-28)

Bug Fixes

  • fix a bug in markPasteRule (c2ccf68)

2.0.0-beta.90 (2021-07-28)

Features

2.0.0-beta.89 (2021-07-27)

Features

  • add ignoreMutation option to NodeViewRenderer, fix #1538 (651e691)

2.0.0-beta.88 (2021-07-26)

Features

  • Allow a rule to be skipped from the getAttributes callback in markPasteRule (#1625) (9ffd58c)

2.0.0-beta.87 (2021-07-26)

Note: Version bump only for package @tiptap/core

2.0.0-beta.86 (2021-07-09)

Note: Version bump only for package @tiptap/core

2.0.0-beta.85 (2021-06-23)

Note: Version bump only for package @tiptap/core

2.0.0-beta.84 (2021-06-17)

Bug Fixes

  • improve types for generateHTML (502b5b1)

2.0.0-beta.83 (2021-06-15)

Note: Version bump only for package @tiptap/core

2.0.0-beta.82 (2021-06-14)

Bug Fixes

  • check for atom nodes in ignoreMutation handler, fix #1448 (2deb07f)
  • remove editable check in updateAttributes, fix #1415 (fbc8fff)

2.0.0-beta.81 (2021-06-07)

Bug Fixes

  • fix a bug when insert newline at node start, fix #1411 (b97bebe)

Features

2.0.0-beta.80 (2021-06-03)

Bug Fixes

  • fix merging options on configure for multiple extension instances (d037c56)

2.0.0-beta.79 (2021-06-02)

Note: Version bump only for package @tiptap/core

2.0.0-beta.77 (2021-06-02)

Features

2.0.0-beta.76 (2021-06-01)

Bug Fixes

2.0.0-beta.75 (2021-06-01)

Bug Fixes

  • prevent dispatch empty fragment when parsing content with insertContent (2a4e02a)

2.0.0-beta.74 (2021-05-31)

Note: Version bump only for package @tiptap/core

2.0.0-beta.73 (2021-05-29)

Bug Fixes

  • check for excluded marks in isMarkActive, fix #1388 (3c4cc96)

2.0.0-beta.72 (2021-05-28)

Bug Fixes

  • fix error when calculating contentMatch within clearNodes command, fix #1361 (3709668)

2.0.0-beta.71 (2021-05-28)

Bug Fixes

  • fix fragile schema validity test in splitBlock (e52f41a)

2.0.0-beta.70 (2021-05-28)

Bug Fixes

  • prevent bug when editor is destroyed very fast (939fc3d)

2.0.0-beta.69 (2021-05-27)

Note: Version bump only for package @tiptap/core

2.0.0-beta.68 (2021-05-24)

Bug Fixes

  • do not check for node selection within posToDOMRect (c0e68d5)

2.0.0-beta.67 (2021-05-24)

Bug Fixes

  • check for NodeSelection within posToDOMRect (a4ec4ff)
  • remove empty attributes in getDebugJSON (940fd69)

2.0.0-beta.66 (2021-05-19)

Bug Fixes

  • preserve whitespace when using insertContent command (8f10181)

2.0.0-beta.65 (2021-05-18)

Features

  • allow number for setTextSelection and insertContentAt (2f7a6ad)

2.0.0-beta.64 (2021-05-18)

Bug Fixes

  • add marks to JSONContent type (f829b45)

Features

  • add deleteNode method to node views (fcee5f8)

2.0.0-beta.63 (2021-05-18)

Note: Version bump only for package @tiptap/core

2.0.0-beta.62 (2021-05-17)

Note: Version bump only for package @tiptap/core

2.0.0-beta.61 (2021-05-17)

Bug Fixes

  • fix export for getAttributes (5b8808a)

Features

  • add findChildrenInRange helper (463661c)
  • add support for checking for attributes in extendMarkRange (ff7dd9b)
  • export isList, fix #1326 (2bd17c7)

2.0.0-beta.60 (2021-05-13)

Bug Fixes

  • fix missing extensions when using addExtension, fix #1309 (28737b1)

2.0.0-beta.59 (2021-05-13)

Note: Version bump only for package @tiptap/core

2.0.0-beta.57 (2021-05-13)

Bug Fixes

  • core: Increment i in defaultBlockAt (655957d)

2.0.0-beta.57 (2021-05-13)

Bug Fixes

  • core: Increment i in defaultBlockAt (655957d)

2.0.0-beta.56 (2021-05-13)

Bug Fixes

  • fix a bug in detecting a current list in toggleList command (a35b253)

2.0.0-beta.55 (2021-05-11)

Bug Fixes

  • fix a bug when configurating the same extension multiple times (655c564)

Features

2.0.0-beta.54 (2021-05-09)

Bug Fixes

  • set correct priority when extending extensions, fix #1288 (b4e2b6f)

2.0.0-beta.53 (2021-05-07)

Features

  • add editor.getAttributes, deprecate editor.getNodeAttributes and editor.getMarkAttributes (072905c)

2.0.0-beta.52 (2021-05-07)

Features

  • expose node helpers to core (6048f9b)

2.0.0-beta.51 (2021-05-07)

Bug Fixes

  • add support for priority and nested extension for getSchema (129ad83)
  • remove editor from addExtensions context (cbc0dd8)

2.0.0-beta.50 (2021-05-07)

Note: Version bump only for package @tiptap/core

2.0.0-beta.49 (2021-05-07)

Bug Fixes

  • fix a bug that messed up pasted link attributes, fix #1284 (7da647d)
  • revert adding exports (bc320d0)

2.0.0-beta.48 (2021-05-06)

Bug Fixes

  • revert adding type: module (f8d6475)

2.0.0-beta.47 (2021-05-06)

Bug Fixes

  • add exports to package.json (1277fa4)

2.0.0-beta.46 (2021-05-06)

Features

  • add addExtensions option (26e672e)

2.0.0-beta.45 (2021-05-06)

Note: Version bump only for package @tiptap/core

2.0.0-beta.44 (2021-05-05)

Features

  • remove deprecated commands insertHTML, insertNode and insertText (86d570f)

2.0.0-beta.43 (2021-05-05)

Note: Version bump only for package @tiptap/core

2.0.0-beta.42 (2021-05-04)

Bug Fixes

  • ignore editable in dispatchTransaction, fix #1239 (b3fb022)

2.0.0-beta.41 (2021-04-27)

Bug Fixes

2.0.0-beta.40 (2021-04-27)

Bug Fixes

  • prevent a bug for node views when pressing enter on iOS, fix #1214 (234d238)

Features

  • add setNodeSelection and setTextSelection commands (811bf69)

2.0.0-beta.39 (2021-04-27)

Bug Fixes

  • add correct type for parseOptions (592892e)
  • fix type error for commands (26785db)
  • set correct type for emitUpdate (9a40c17)

2.0.0-beta.38 (2021-04-23)

Note: Version bump only for package @tiptap/core

2.0.0-beta.37 (2021-04-23)

Bug Fixes

  • better merge mark attributes for existing marks, fix #1039 (cfd29fa)

2.0.0-beta.36 (2021-04-22)

Note: Version bump only for package @tiptap/core

2.0.0-beta.35 (2021-04-21)

Features

  • add editor prop to KeyboardShortcutCommand (e0c2460)
  • add name to extension context (12f60ab)

2.0.0-beta.34 (2021-04-20)

Bug Fixes

  • fix a bug when dragging node views (4e6d43b)

2.0.0-beta.33 (2021-04-20)

Bug Fixes

  • fix extension option merging (aa002a0)

2.0.0-beta.32 (2021-04-16)

Features

  • add coordsAtPos and posToClientRect helper methods (8dab614)
  • remove resize event handler (9f64015)

2.0.0-beta.31 (2021-04-15)

Bug Fixes

2.0.0-beta.30 (2021-04-15)

Note: Version bump only for package @tiptap/core

2.0.0-beta.29 (2021-04-12)

Bug Fixes

  • fix adding mark only with insertContent(), fix #264 (0a63123)

2.0.0-beta.28 (2021-04-12)

Features

  • add parentConfig to extension context for more extendable extensions, fix #259 (5e1ec5d)

2.0.0-beta.27 (2021-04-09)

Bug Fixes

  • add scrollIntoView for insertContent (e7fe724)

2.0.0-beta.26 (2021-04-09)

Bug Fixes

  • fix a bug when detecting changes within node views (708ac94)

2.0.0-beta.25 (2021-04-09)

Bug Fixes

2.0.0-beta.24 (2021-04-08)

Bug Fixes

  • improve drag position for node views even more (d2c5b71)

2.0.0-beta.23 (2021-04-08)

Bug Fixes

  • improve drag position for node views (5e5b8db)

2.0.0-beta.22 (2021-04-08)

Note: Version bump only for package @tiptap/core

2.0.0-beta.21 (2021-04-08)

Note: Version bump only for package @tiptap/core

2.0.0-beta.20 (2021-04-07)

Features

  • add resetAttributes() command, deprecate resetNodeAttributes() (3334d93)

2.0.0-beta.19 (2021-04-07)

Features

  • add updateAttributes() command, deprecate updateNodeAttributes(), fix #254 (aac32b4)

2.0.0-beta.18 (2021-04-07)

Features

  • add priority option to extensions (bb1ae65)

2.0.0-beta.17 (2021-04-07)

Bug Fixes

2.0.0-beta.16 (2021-04-07)

Features

  • add insertContent() command, deprecate insertText(), insertHTML() and insertNode() (b8d9b7d)

2.0.0-beta.15 (2021-04-06)

Note: Version bump only for package @tiptap/core

2.0.0-beta.14 (2021-04-04)

Note: Version bump only for package @tiptap/core

2.0.0-beta.13 (2021-04-02)

Note: Version bump only for package @tiptap/core

2.0.0-beta.12 (2021-04-01)

Note: Version bump only for package @tiptap/core

2.0.0-beta.11 (2021-04-01)

Note: Version bump only for package @tiptap/core

2.0.0-beta.10 (2021-03-31)

Note: Version bump only for package @tiptap/core

2.0.0-beta.9 (2021-03-28)

Note: Version bump only for package @tiptap/core

2.0.0-beta.8 (2021-03-28)

Note: Version bump only for package @tiptap/core

2.0.0-beta.7 (2021-03-28)

Note: Version bump only for package @tiptap/core

2.0.0-beta.6 (2021-03-24)

Note: Version bump only for package @tiptap/core

2.0.0-beta.5 (2021-03-18)

Note: Version bump only for package @tiptap/core

2.0.0-beta.4 (2021-03-18)

Note: Version bump only for package @tiptap/core

2.0.0-beta.3 (2021-03-16)

Note: Version bump only for package @tiptap/core

2.0.0-beta.2 (2021-03-09)

Note: Version bump only for package @tiptap/core

2.0.0-beta.1 (2021-03-05)

Note: Version bump only for package @tiptap/core

2.0.0-alpha.22 (2021-02-28)

Note: Version bump only for package @tiptap/core

2.0.0-alpha.21 (2021-02-26)

Note: Version bump only for package @tiptap/core

2.0.0-alpha.20 (2021-02-26)

Note: Version bump only for package @tiptap/core

2.0.0-alpha.19 (2021-02-18)

Note: Version bump only for package @tiptap/core

2.0.0-alpha.18 (2021-02-16)

Note: Version bump only for package @tiptap/core

2.0.0-alpha.17 (2021-02-16)

Note: Version bump only for package @tiptap/core

2.0.0-alpha.16 (2021-02-07)

Note: Version bump only for package @tiptap/core

2.0.0-alpha.15 (2021-02-05)

Note: Version bump only for package @tiptap/core

2.0.0-alpha.14 (2021-01-29)

Note: Version bump only for package @tiptap/core

2.0.0-alpha.13 (2021-01-29)

Note: Version bump only for package @tiptap/core

2.0.0-alpha.12 (2021-01-28)

Note: Version bump only for package @tiptap/core

2.0.0-alpha.11 (2021-01-28)

Bug Fixes

2.0.0-alpha.10 (2021-01-06)

Note: Version bump only for package @tiptap/core

2.0.0-alpha.9 (2020-12-18)

Note: Version bump only for package @tiptap/core

2.0.0-alpha.8 (2020-12-18)

Note: Version bump only for package @tiptap/core

2.0.0-alpha.7 (2020-12-02)

Note: Version bump only for package @tiptap/core

2.0.0-alpha.6 (2020-11-19)

Note: Version bump only for package @tiptap/core

2.0.0-alpha.5 (2020-11-18)

Note: Version bump only for package @tiptap/core

2.0.0-alpha.4 (2020-11-16)

Note: Version bump only for package @tiptap/core

2.0.0-alpha.3 (2020-11-16)

Reverts

  • Revert "use global namespace" (0c9ce26)

2.0.0-alpha.2 (2020-11-16)

Note: Version bump only for package @tiptap/core

2.0.0-alpha.1 (2020-11-16)

Note: Version bump only for package @tiptap/core