Преглед на файлове

fix(@vben/plugins): 修复 tiptap 重复注册扩展警告 (#7917)

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({...})
JyQAQ преди 4 седмици
родител
ревизия
b5f79db321
променени са 1 файла, в които са добавени 36 реда и са изтрити 39 реда
  1. 36 39
      packages/effects/plugins/src/tiptap/extensions.ts

+ 36 - 39
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';
-
-            input.addEventListener('change', () => {
-              const file = input.files?.[0];
-              if (!file) return;
-
-              const error = validateFile(file, imageUpload);
-              if (error) {
-                handleUploadError(new Error(error), imageUpload);
-                return;
-              }
+            ({ 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;
+
+                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'),
     }),