Skip to content

Comments

fix(deps): update tiptap to v3 (main) (major)#7437

Merged
github-actions[bot] merged 9 commits intomainfrom
renovate/main-major-tiptap
Nov 12, 2025
Merged

fix(deps): update tiptap to v3 (main) (major)#7437
github-actions[bot] merged 9 commits intomainfrom
renovate/main-major-tiptap

Conversation

@renovate
Copy link
Contributor

@renovate renovate bot commented Jul 13, 2025

This PR contains the following updates:

Package Change Age Confidence
@tiptap/core (source) ^2.27.1 -> ^3.10.5 age confidence
@tiptap/extension-blockquote (source) ^2.27.1 -> ^3.10.5 age confidence
@tiptap/extension-bold (source) ^2.27.1 -> ^3.10.5 age confidence
@tiptap/extension-bullet-list (source) ^2.27.1 -> ^3.10.5 age confidence
@tiptap/extension-character-count (source) ^2.27.1 -> ^3.10.5 age confidence
@tiptap/extension-code (source) ^2.27.1 -> ^3.10.5 age confidence
@tiptap/extension-code-block (source) ^2.27.1 -> ^3.10.5 age confidence
@tiptap/extension-code-block-lowlight (source) ^2.27.1 -> ^3.10.5 age confidence
@tiptap/extension-collaboration (source) ^2.27.1 -> ^3.10.5 age confidence
@tiptap/extension-document (source) ^2.27.1 -> ^3.10.5 age confidence
@tiptap/extension-drag-handle (source) ^2.27.1 -> ^3.10.5 age confidence
@tiptap/extension-drag-handle-vue-2 (source) ^2.27.1 -> ^3.10.5 age confidence
@tiptap/extension-dropcursor (source) ^2.27.1 -> ^3.10.5 age confidence
@tiptap/extension-gapcursor (source) ^2.27.1 -> ^3.10.5 age confidence
@tiptap/extension-hard-break (source) ^2.27.1 -> ^3.10.5 age confidence
@tiptap/extension-heading (source) ^2.27.1 -> ^3.10.5 age confidence
@tiptap/extension-history (source) ^2.27.1 -> ^3.10.5 age confidence
@tiptap/extension-horizontal-rule (source) ^2.27.1 -> ^3.10.5 age confidence
@tiptap/extension-image (source) ^2.27.1 -> ^3.10.5 age confidence
@tiptap/extension-italic (source) ^2.27.1 -> ^3.10.5 age confidence
@tiptap/extension-link (source) ^2.27.1 -> ^3.10.5 age confidence
@tiptap/extension-list-item (source) ^2.27.1 -> ^3.10.5 age confidence
@tiptap/extension-mention (source) ^2.27.1 -> ^3.10.5 age confidence
@tiptap/extension-ordered-list (source) ^2.27.1 -> ^3.10.5 age confidence
@tiptap/extension-paragraph (source) ^2.27.1 -> ^3.10.5 age confidence
@tiptap/extension-placeholder (source) ^2.27.1 -> ^3.10.5 age confidence
@tiptap/extension-strike (source) ^2.27.1 -> ^3.10.5 age confidence
@tiptap/extension-table (source) ^2.27.1 -> ^3.10.5 age confidence
@tiptap/extension-table-cell (source) ^2.27.1 -> ^3.10.5 age confidence
@tiptap/extension-table-header (source) ^2.27.1 -> ^3.10.5 age confidence
@tiptap/extension-table-row (source) ^2.27.1 -> ^3.10.5 age confidence
@tiptap/extension-task-item (source) ^2.27.1 -> ^3.10.5 age confidence
@tiptap/extension-task-list (source) ^2.27.1 -> ^3.10.5 age confidence
@tiptap/extension-text (source) ^2.27.1 -> ^3.10.5 age confidence
@tiptap/extension-typography (source) ^2.27.1 -> ^3.10.5 age confidence
@tiptap/extension-underline (source) ^2.27.1 -> ^3.10.5 age confidence
@tiptap/pm (source) ^2.27.1 -> ^3.10.5 age confidence
@tiptap/suggestion (source) ^2.27.1 -> ^3.10.5 age confidence
@tiptap/vue-2 (source) ^2.27.1 -> ^3.10.5 age confidence

Release Notes

ueberdosis/tiptap (@​tiptap/core)

v3.10.5

Compare Source

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.

v3.10.4

Compare Source

Patch Changes
  • 64561c4: Fix autofocus behavior to prevent unwanted scrolling when disabled

v3.10.3

Compare Source

Patch Changes

v3.10.2

Compare Source

Patch Changes

v3.10.1

Compare Source

Patch Changes

v3.10.0

Compare Source

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

v3.9.1

Compare Source

Patch Changes

v3.9.0

Compare Source

Patch Changes

v3.8.0

Compare Source

Releases
v3.8.0
@​tiptap/extension-unique-id@​3.8.0
Minor Changes
  • 23e516e: Add updateDocument option to disable document updates caused by the Unique ID extension.
@​tiptap/react@​3.8.0
Patch Changes
  • f3770af: Prevent Bubble Menu plugin from re-loading every time the BubbleMenu component re-renders. Reverts a regression introduced in v3.6.3, in PR #​7028.

v3.7.2

Compare Source

Releases
v3.7.2
@​tiptap/html
Patch Changes

v3.7.1

Compare Source

Releases
v3.7.1
@​tiptap/markdown
Patch Changes
  • Editors will not throw an error anymore when content is an empty string and contentType is markdown
  • Remove invalid server configuration from package.json

v3.7.0

Compare Source

Releases

v3.7.0

@​tiptap/core
Minor Changes
  • 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.
  • 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
  • The extension manager now provides a new property baseExtensions that contains an unflattened array of extensions
@​tiptap/markdown
Minor Changes
  • 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.

@​tiptap/extension-link
Patch Changes
  • Paste Handlers and onPaste plugin now respect shouldAutoLink/validate options
@​tiptap/extensions
Patch Changes
  • Make the TrailingNode extension's node option optional and derive the
    default node type from the editor schema when available.

    Previously the extension used a hard-coded 'paragraph' default and the
    node option was required in the TypeScript definitions. This change:

    • makes node optional in the options type,
    • prefers the editor schema's top node default type when resolving the
      trailing node, and
    • falls back to the configured option or 'paragraph' as a last resort.

    This fixes cases where projects use a different top-level default node and
    prevents the extension from inserting an incorrect trailing node type.

v3.6.7

Compare Source

Patch Changes

v3.6.6

Compare Source

Patch Changes

v3.6.5

Compare Source

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.

v3.6.4

Compare Source

Patch Changes

v3.6.3

Compare Source

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.

v3.6.2

Compare Source

Patch Changes

v3.6.1

Compare Source

Patch Changes

v3.6.0

Compare Source

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

v3.5.3

Compare Source

Patch Changes

v3.5.2

Compare Source

Patch Changes

v3.5.1

Compare Source

Patch Changes

v3.5.0

Compare Source

Patch Changes

v3.4.6

Compare Source

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

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

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

v3.4.5

Compare Source

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

v3.4.4

Compare Source

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

v3.4.3

Compare Source

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.

v3.4.2

Compare Source

Patch Changes

v3.4.1

Compare Source

Patch Changes

v3.4.0

Compare Source

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.

v3.3.1

Compare Source

Patch Changes

v3.3.0

Compare Source

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.

v3.2.2

Compare Source

Patch Changes

v3.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.

v3.2.0

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

v3.1.0

Compare Source

Patch Changes

v3.0.9

Compare Source

Patch Changes

v3.0.8

Compare Source

Patch Changes

v3.0.7

Compare Source

Patch Changes

v3.0.6

Compare Source

Patch Changes

v3.0.5

Compare Source

Patch Changes

v3.0.4

Compare Source

Patch Changes

v3.0.3

Compare Source

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

v3.0.2

Compare Source

Patch Changes

v3.0.1

Compare Source

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,
          }
        }
      },
    })

v3.0.0

Compare Source

Patch Changes
ueberdosis/tiptap (@​tiptap/extension-blockquote)

v3.10.5

Compare Source

Patch Changes

v3.10.4

Compare Source

Patch Changes
  • 5d17140: Fixed nested blockquote markdown serialization to properly handle multi-level nesting
  • Updated dependencies [64561c4]

v3.10.3

Compare Source

Patch Changes

v3.10.2

Compare Source

Patch Changes

v3.10.1

Compare Source

Patch Changes

v3.10.0

Compare Source

Patch Changes

v3.9.1

Compare Source

Patch Changes

v3.9.0

Compare Source

Patch Changes
  • Updated dependencies [bbb8e16]
    • [@​tiptap/core](https

Configuration

📅 Schedule: Branch creation - "every weekend" in timezone Europe/Berlin, Automerge - At any time (no schedule defined).

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about these updates again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate renovate bot requested a review from max-nextcloud as a code owner July 13, 2025 04:32
@renovate renovate bot added the dependencies Pull requests that update a dependency file label Jul 13, 2025
@renovate renovate bot requested a review from mejo- as a code owner July 13, 2025 04:32
@renovate

This comment was marked as outdated.

@renovate renovate bot added the dependencies Pull requests that update a dependency file label Jul 13, 2025
@github-actions github-actions bot enabled auto-merge July 13, 2025 04:32
@renovate renovate bot force-pushed the renovate/main-major-tiptap branch from 7679afc to 9595fb6 Compare July 15, 2025 10:36
@renovate renovate bot force-pushed the renovate/main-major-tiptap branch from 9595fb6 to d8585cc Compare July 15, 2025 11:50
@renovate renovate bot force-pushed the renovate/main-major-tiptap branch from d8585cc to dc2babf Compare July 15, 2025 19:26
@renovate renovate bot force-pushed the renovate/main-major-tiptap branch from dc2babf to aa56981 Compare July 15, 2025 21:56
@renovate renovate bot force-pushed the renovate/main-major-tiptap branch from aa56981 to 91a5778 Compare July 16, 2025 16:09
@renovate renovate bot force-pushed the renovate/main-major-tiptap branch from 91a5778 to 1247e88 Compare August 1, 2025 11:04
@renovate renovate bot force-pushed the renovate/main-major-tiptap branch from 1247e88 to 0751826 Compare August 1, 2025 17:44
@renovate renovate bot force-pushed the renovate/main-major-tiptap branch from 0751826 to a7dd18e Compare August 3, 2025 12:22
@renovate renovate bot force-pushed the renovate/main-major-tiptap branch 2 times, most recently from ca885fe to 529104f Compare August 10, 2025 16:21
@renovate renovate bot force-pushed the renovate/main-major-tiptap branch 2 times, most recently from 95f10cc to 136d900 Compare August 14, 2025 11:00
@renovate renovate bot force-pushed the renovate/main-major-tiptap branch from 136d900 to 3a90739 Compare August 19, 2025 10:55
@mejo- mejo- force-pushed the renovate/main-major-tiptap branch from 2f686c6 to d88a9ab Compare November 11, 2025 11:13
@mejo- mejo- force-pushed the renovate/main-major-tiptap branch from d88a9ab to e0f1220 Compare November 11, 2025 11:17
@mejo- mejo- force-pushed the renovate/main-major-tiptap branch from e0f1220 to b9c3329 Compare November 11, 2025 12:52
@mejo- mejo- force-pushed the renovate/main-major-tiptap branch from b9c3329 to 45a813d Compare November 11, 2025 13:40
@mejo- mejo- force-pushed the renovate/main-major-tiptap branch from 45a813d to cd66f32 Compare November 11, 2025 14:30
renovate bot and others added 4 commits November 12, 2025 14:59
The extension got renamed upstream.

Signed-off-by: Jonas <jonas@freesources.org>
The default changed in Tiptap v3 from false to true.

Signed-off-by: Jonas <jonas@freesources.org>
Use user from awareness localState instead of `this.options.user` as
`this.options` is a getter these days and doesn't get updated after the
initialization.

Signed-off-by: Jonas <jonas@freesources.org>
@mejo- mejo- force-pushed the renovate/main-major-tiptap branch from 447a35a to a548a88 Compare November 12, 2025 13:59
@codecov
Copy link

codecov bot commented Nov 12, 2025

Codecov Report

❌ Patch coverage is 20.00000% with 8 lines in your changes missing coverage. Please review.
✅ Project coverage is 45.93%. Comparing base (cff0bfb) to head (eda03bf).
⚠️ Report is 19 commits behind head on main.

Files with missing lines Patch % Lines
src/extensions/CollaborationCaret.ts 11.11% 7 Missing and 1 partial ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main    #7437      +/-   ##
==========================================
- Coverage   45.96%   45.93%   -0.03%     
==========================================
  Files         141      141              
  Lines        3964     3964              
  Branches      747      747              
==========================================
- Hits         1822     1821       -1     
- Misses       1838     1840       +2     
+ Partials      304      303       -1     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@mejo- mejo- disabled auto-merge November 12, 2025 14:11
Otherwise prosemirror throws with "Only non-generatable nodes (codeBlock)
in a required position [...] (in content expression 'block')"

Signed-off-by: Jonas <jonas@freesources.org>
Signed-off-by: Jonas <jonas@freesources.org>
We provide a default for the property already, so no need to mark it as
required.

Throws "RangeError: No value supplied for attribute bullet" otherwise.

Signed-off-by: Jonas <jonas@freesources.org>
Some upstream change resulted in tables with thead and tbody tags
being split into two tables with Tiptap v3.

Adds additional tests to make sure parsing different HTML structures we
always end with the first row being the header row and subsequent ones
being body rows, even if thead/tbody and th/td tags are missing or mixed
up.

Signed-off-by: Jonas <jonas@freesources.org>
@mejo- mejo- force-pushed the renovate/main-major-tiptap branch from a548a88 to eda03bf Compare November 12, 2025 14:34
@mejo- mejo- self-assigned this Nov 12, 2025
@github-actions github-actions bot enabled auto-merge November 12, 2025 14:41
@github-actions github-actions bot merged commit 9202684 into main Nov 12, 2025
74 of 79 checks passed
@github-actions github-actions bot deleted the renovate/main-major-tiptap branch November 12, 2025 15:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant