From b5f79db3210c1c6f74cab0dac5147c18feba652d Mon Sep 17 00:00:00 2001 From: JyQAQ <45193678+jyqwq@users.noreply.github.com> Date: Sat, 16 May 2026 10:45:30 +0800 Subject: [PATCH] =?UTF-8?q?fix(@vben/plugins):=20=E4=BF=AE=E5=A4=8D=20tipt?= =?UTF-8?q?ap=20=E9=87=8D=E5=A4=8D=E6=B3=A8=E5=86=8C=E6=89=A9=E5=B1=95?= =?UTF-8?q?=E8=AD=A6=E5=91=8A=20(#7917)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit StarterKit v3.22.0 已默认包含 Document、Link、Underline 扩展, 与单独导入产生重复注册,导致控制台警告: [tiptap warn]: Duplicate extension names found: ['link', 'doc', 'underline'] - 移除 Document 单独导入和使用,StarterKit 已内置 - 移除 Underline 单独导入和使用,StarterKit 已内置 - StarterKit 配置中添加 link: false,禁用内置 Link, 保留自定义配置的 Link.configure({...}) --- .../effects/plugins/src/tiptap/extensions.ts | 71 +++++++++---------- 1 file changed, 34 insertions(+), 37 deletions(-) diff --git a/packages/effects/plugins/src/tiptap/extensions.ts b/packages/effects/plugins/src/tiptap/extensions.ts index ceea4c804..52067ceed 100644 --- a/packages/effects/plugins/src/tiptap/extensions.ts +++ b/packages/effects/plugins/src/tiptap/extensions.ts @@ -9,14 +9,12 @@ import { $t } from '@vben/locales'; import { alert } from '@vben-core/popup-ui'; -import Document from '@tiptap/extension-document'; import Highlight from '@tiptap/extension-highlight'; import Image from '@tiptap/extension-image'; import Link from '@tiptap/extension-link'; import Placeholder from '@tiptap/extension-placeholder'; import TextAlign from '@tiptap/extension-text-align'; import { Color, TextStyle } from '@tiptap/extension-text-style'; -import Underline from '@tiptap/extension-underline'; import { Plugin, PluginKey } from '@tiptap/pm/state'; import StarterKit from '@tiptap/starter-kit'; @@ -274,30 +272,30 @@ function createCustomImage( ...this.parent?.(), uploadImage: () => - ({ editor: cmdEditor }: { editor: CoreEditor }) => { - const input = document.createElement('input'); - input.type = 'file'; - input.accept = imageUpload.accept ?? DEFAULT_ACCEPT; - input.style.display = 'none'; + ({ editor: cmdEditor }: { editor: CoreEditor }) => { + const input = document.createElement('input'); + input.type = 'file'; + input.accept = imageUpload.accept ?? DEFAULT_ACCEPT; + input.style.display = 'none'; - input.addEventListener('change', () => { - const file = input.files?.[0]; - if (!file) return; + input.addEventListener('change', () => { + const file = input.files?.[0]; + if (!file) return; - const error = validateFile(file, imageUpload); - if (error) { - handleUploadError(new Error(error), imageUpload); - return; - } + const error = validateFile(file, imageUpload); + if (error) { + handleUploadError(new Error(error), imageUpload); + return; + } - createUploadProcess(cmdEditor, file, imageUpload, blobUrlTracker); - input.remove(); - }); + createUploadProcess(cmdEditor, file, imageUpload, blobUrlTracker); + input.remove(); + }); - document.body.append(input); - input.click(); - return true; - }, + document.body.append(input); + input.click(); + return true; + }, }; }, @@ -405,13 +403,12 @@ export function createDefaultTiptapExtensions( options: VbenTiptapExtensionOptions = {}, ): Extensions { return [ - Document, StarterKit.configure({ heading: { levels: [1, 2, 3, 4], }, + link: false, }), - Underline, TextAlign.configure({ types: ['heading', 'paragraph'], }), @@ -431,20 +428,20 @@ export function createDefaultTiptapExtensions( }), options.imageUpload ? createCustomImage( - options.imageUpload, - options._blobUrlTracker, - ).configure({ - allowBase64: true, - HTMLAttributes: { - class: 'vben-tiptap__image', - }, - }) + options.imageUpload, + options._blobUrlTracker, + ).configure({ + allowBase64: true, + HTMLAttributes: { + class: 'vben-tiptap__image', + }, + }) : Image.configure({ - allowBase64: true, - HTMLAttributes: { - class: 'vben-tiptap__image', - }, - }), + allowBase64: true, + HTMLAttributes: { + class: 'vben-tiptap__image', + }, + }), Placeholder.configure({ placeholder: options.placeholder ?? $t('ui.tiptap.placeholder'), }),