🔗

Tiptapのリンク末尾で通常のテキスト入力をする

に公開

備忘録的な記事です。
Tiptapのリンクは末尾で何かを入力すると、リンクのテキストとして認識されてしまいます。
SlackやNotionみたいに、通常の文章を書く方法を考えます。

解決策

inclusiveをfalseにしましょう

Link.extend({
    inclusive: false
})

https://github.com/ueberdosis/tiptap/issues/3293#issuecomment-1668741998

https://tiptap.dev/docs/editor/core-concepts/schema#inclusive

補足

inclusiveをfalseにすると、カーソルが末尾にある時にマークが付与されません。
Linkはマークなので、falseにすると期待する動作になります。

ちなみにこのinclusiveはProseMirrorの機能っぽいです。

https://prosemirror.net/docs/ref/#model.MarkSpec.inclusive

exitableとの違い

似たものにexitableありますが、こっちは末尾で右矢印を押すと空白を追加して脱出することができます。CodeLinkで使われていました。

https://tiptap.dev/docs/editor/core-concepts/schema#exitable

これはTiptapの機能で、コアロジックは以下にありました。(キーバインドの箇所は別)

https://github.com/ueberdosis/tiptap/blob/75258f34c18dec0584133d451e2e65870ce5d81f/packages/core/src/Mark.ts#L642-L668

exitableなマークが付与されたノードの末尾であれば、storedMarkから削除して空白を挿入するものです。

Discussion