ueberdosis/tiptap

[Documentation]: Svelte installation guide not compatible with Svelte 5

Open

#6,025 opened on Jan 14, 2025

View on GitHub
 (7 comments) (6 reactions) (1 assignee)TypeScript (1,979 forks)batch import
area: docscomplexity: easygood first issueimpact: medium

Repository metrics

Stars
 (23,454 stars)
PR merge metrics
 (Avg merge 4d 13h) (46 merged PRs in 30d)

Description

What’s the URL to the page you’re sending feedback for?

https://tiptap.dev/docs/editor/getting-started/install/svelte

What part of the documentation needs improvement?

The Svelte guide for TipTap is made for components with Svelte 4 syntax, i.e. without runes. In runes mode, state needs to be defined using $state(), and using editor = editor no longer works to trigger an update, as can be seen here.

For Svelte 5, instead, the new createSubscriber() API should be used, which can be used to manually tell Svelte when to trigger an update (i.e. on transaction). The code to make the editor reactive can look something like this (repl):

export function makeReactive(editor: Editor): Editor {
    const subscribe = createSubscriber((update) => {
        editor.on("transaction", update)
        return () => editor.off("transaction", update)
    })
    return new Proxy(editor, {
        get(editor, property, receiver) {
            subscribe()
            return Reflect.get(editor, property, receiver)
        },
    })
}

Or, without a proxy, but then has to be accessed using editor.current instead, which is not ideal as the editor itself doesn't change:

export function makeReactive(editor: Editor): Editor {
    const subscribe = createSubscriber((update) => {
        editor.on("transaction", update)
        return () => editor.off("transaction", update)
    })
    return {
        get current() {
            subscribe()
            return editor
        }
    }
}

Contributor guide