kc-plate-editor 0.5.8 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/README.md +104 -2
  3. package/dist/__tests__/setup.d.ts +0 -0
  4. package/dist/components/editor/hooks/index.d.ts +7 -0
  5. package/dist/components/editor/hooks/use-editor-methods.d.ts +89 -0
  6. package/dist/components/editor/plate-editor.d.ts +61 -0
  7. package/dist/components/editor/plugins/ai-kit.d.ts +2 -1
  8. package/dist/components/editor/plugins/block-menu-kit.d.ts +1 -0
  9. package/dist/components/editor/plugins/block-placeholder-kit.d.ts +2 -28
  10. package/dist/components/editor/plugins/block-selection-kit.d.ts +1 -0
  11. package/dist/components/editor/plugins/configurable-toolbar-kit.d.ts +9 -1
  12. package/dist/components/editor/plugins/copilot-kit.d.ts +42 -2
  13. package/dist/components/editor/plugins/exit-break-kit.d.ts +1 -4
  14. package/dist/components/editor/plugins/index.d.ts +780 -3
  15. package/dist/components/editor/plugins/markdown-kit.d.ts +2 -1
  16. package/dist/components/editor/standalone-toolbar.d.ts +2 -1
  17. package/dist/components/editor/toolbars/configurable-toolbar.d.ts +14 -0
  18. package/dist/components/editor/use-chat.d.ts +28 -3
  19. package/dist/constants-BZUktlXJ.mjs +88145 -0
  20. package/dist/constants-C8COKbfL.js +421 -0
  21. package/dist/dash.all.min-CLf9Tq2p.js +21 -0
  22. package/dist/{dash.all.min-mZ3IpU_5.mjs → dash.all.min-Dd-cNvIa.mjs} +2570 -2578
  23. package/dist/{hls-C54ON8N6.js → hls-DATeA-wd.js} +7 -7
  24. package/dist/{hls-Cn4MnxsU.mjs → hls-ULgjsUNO.mjs} +62 -39
  25. package/dist/hooks/use-auto-save.cjs +1 -0
  26. package/dist/hooks/use-auto-save.mjs +6 -0
  27. package/dist/{index-BEIMyJvn.js → index-Crtsai5y.js} +24 -30
  28. package/dist/{index-CQ9MhVRi.mjs → index-DcH3VKSV.mjs} +310 -320
  29. package/dist/index.cjs +242 -1
  30. package/dist/index.d.ts +15 -4
  31. package/dist/index.mjs +73260 -156
  32. package/dist/kc-plate-editor.css +1 -0
  33. package/dist/lib/config-provider.d.ts +31 -5
  34. package/dist/lib/content-converter.cjs +94 -0
  35. package/dist/lib/content-converter.mjs +318 -0
  36. package/dist/lib/error-handler.d.ts +33 -1
  37. package/dist/lib/export.cjs +24 -0
  38. package/dist/lib/export.d.ts +82 -8
  39. package/dist/lib/export.mjs +211 -0
  40. package/dist/lib/find-replace.d.ts +4 -2
  41. package/dist/lib/http.d.ts +1 -2
  42. package/dist/lib/i18n-provider.d.ts +97 -1
  43. package/dist/lib/outline.d.ts +3 -1
  44. package/dist/lib/text-utils.d.ts +8 -3
  45. package/dist/lib/validation.cjs +1 -0
  46. package/dist/lib/validation.d.ts +353 -0
  47. package/dist/lib/validation.mjs +168 -0
  48. package/dist/lib/word-count.d.ts +3 -1
  49. package/dist/{react-hxgauqI7.js → react-BOcqT_IV.js} +1 -11
  50. package/dist/{react-B6p7WDog.mjs → react-BSxhFpg-.mjs} +4 -18
  51. package/dist/react-BlYQJziA.js +19 -0
  52. package/dist/{react-Bv-bWJKt.mjs → react-BwGCG-3k.mjs} +1 -16
  53. package/dist/{react-D2Xlskb3.mjs → react-CAoB4_rN.mjs} +0 -11
  54. package/dist/{react-DE-5wXKn.mjs → react-ChNsSZgo.mjs} +0 -11
  55. package/dist/{react-C-QUBeUY.js → react-CjjH3E--.js} +1 -11
  56. package/dist/{react-0OewwyjJ.mjs → react-CmVlqW81.mjs} +26 -53
  57. package/dist/{react-C-6r15yv.js → react-D1sjVsT8.js} +2 -12
  58. package/dist/{react-1jldl5V6.js → react-D3go4_xL.js} +1 -11
  59. package/dist/{react-CZcIaMtb.mjs → react-DKitjUuh.mjs} +1 -12
  60. package/dist/react-DW-hw6eG.js +22 -0
  61. package/dist/{react-CYElXqmt.mjs → react-FmUcOk8I.mjs} +1 -12
  62. package/dist/{react-BhxJwm-d.js → react-kNyoDbFg.js} +1 -11
  63. package/dist/{react-CbduCSo9.mjs → react-qOZvq8C4.mjs} +0 -11
  64. package/dist/{react-4oo9GGvM.js → react-va4R5nBG.js} +1 -11
  65. package/dist/stores/editor-store.cjs +1 -0
  66. package/dist/stores/editor-store.d.ts +186 -2
  67. package/dist/stores/editor-store.mjs +205 -0
  68. package/dist/types/plate-editor.d.ts +108 -0
  69. package/dist/types/plugin-types.d.ts +5 -4
  70. package/dist/use-auto-save-BUHfF3j0.js +2 -0
  71. package/dist/use-auto-save-SkPlyyk4.mjs +178 -0
  72. package/package.json +66 -53
  73. package/dist/dash.all.min-VODXcrvW.js +0 -21
  74. package/dist/html2canvas-pro.esm-B7aTk6co.js +0 -9
  75. package/dist/html2canvas-pro.esm-CQOXKWpT.mjs +0 -5468
  76. package/dist/index-BqY0DoAk.js +0 -51
  77. package/dist/index-CniX23FX.mjs +0 -11186
  78. package/dist/index-DbSGAc09.mjs +0 -219951
  79. package/dist/index-ZtTcrgdr.js +0 -1574
  80. package/dist/react-BB71DO7H.js +0 -32
  81. package/dist/react-DGu3YNSU.js +0 -37
  82. package/dist/server.browser-BzSRCBp5.js +0 -213
  83. package/dist/server.browser-DNro-WMz.mjs +0 -21761
  84. package/dist/style.css +0 -1
package/CHANGELOG.md ADDED
@@ -0,0 +1,35 @@
1
+ # Changelog
2
+
3
+ ## [0.6.1] - 2026-03-01
4
+
5
+ ### Bug Fixes
6
+
7
+ - **PDF 导出分页修复**:修复 `exportAsPdf` 在 `image` 模式下多页 PDF 内容重叠的严重 bug。原实现在每页绘制完整图片(pdf-lib 不支持子区域裁切),改为使用 canvas 逐页裁切后分别嵌入,确保每页只显示对应区域的内容。
8
+
9
+ ### Dependencies
10
+
11
+ - 升级 `platejs` 52.0.17 → 52.3.2
12
+ - 升级 `@platejs/ai` 52.1.0 → 52.3.1
13
+ - 升级 `@platejs/markdown` 52.1.0 → 52.3.1
14
+
15
+ ### Code Quality
16
+
17
+ - 将 `export.ts`、`copilot-kit.tsx` 中的 `var` 声明统一为 `const`/`let`
18
+ - 移除 `export.ts` 中未使用的 `TNode`、`TPlateEditor` 导入
19
+ - 移除 `copilot-kit.tsx` 中未使用的 `TNode` 导入
20
+ - 清理 `find-replace.ts`、`outline.ts`、`word-count.ts` 中的多余空行
21
+
22
+ ### Testing
23
+
24
+ - 新增 vitest 测试框架,支持 `pnpm test`、`pnpm test:watch`、`pnpm test:coverage`
25
+ - 新增 10 个测试文件,共 134 个单元测试用例,覆盖以下模块:
26
+ - `text-utils` - 文本提取与摘要
27
+ - `validation` - 配置与内容验证(Zod Schema)
28
+ - `content-converter` - HTML/Markdown/JSON 格式转换与安全处理
29
+ - `plugin-factory` - 插件工厂与组合
30
+ - `find-replace` - 查找替换
31
+ - `toc` - 目录树操作
32
+ - `constants` - 常量定义
33
+ - `config-generator` - 代码生成
34
+ - `word-count` - 字数统计
35
+ - `export` - 导出逻辑
package/README.md CHANGED
@@ -8,11 +8,32 @@
8
8
 
9
9
  | 版本 | 状态 | 说明 |
10
10
  |------|------|------|
11
- | v0.5.8 | ✅ 最新版本 | 内容格式转换优化(官方 API) |
11
+ | v0.6.1 | ✅ 最新版本 | Bug 修复、代码质量、单元测试、依赖升级 |
12
+ | v0.6.0 | ✅ 稳定版本 | 全面升级:AI SDK 6.x、Vite 7.x、依赖更新 |
13
+ | v0.5.8 | ✅ 稳定版本 | 内容格式转换优化(官方 API) |
12
14
  | v0.5.6 | ✅ 稳定版本 | 增强上传配置灵活性 |
13
15
  | v0.5.5 | ✅ 稳定版本 | 快捷键保存、本地存储、目录跳转优化 |
14
16
  | v0.5.0 | ✅ 已发布私服 | 基础稳定版本 |
15
17
 
18
+ ### v0.6.0 更新内容
19
+
20
+ - **依赖全面升级** - 更新至最新稳定版本
21
+ - `ai` 5.0.28 → 6.0.45(重大升级)
22
+ - `@ai-sdk/react` 2.0.28 → 3.0.47(重大升级)
23
+ - `vite` 5.4.11 → 7.3.1(重大升级)
24
+ - `platejs` 52.0.1 → 52.0.17
25
+ - `@platejs/ai` 52.0.6 → 52.1.0
26
+ - `@platejs/markdown` 52.0.4 → 52.1.0
27
+ - `typescript` 5.9.2 → 5.9.3
28
+ - `tailwindcss` 4.1.13 → 4.1.18
29
+ - `zod` 4.1.12 → 4.3.5
30
+ - `zustand` 5.0.8 → 5.0.10
31
+ - **代码精简** - 移除 use-chat.ts 中约 1300 行的测试代码
32
+ - **配置清理** - 移除废弃配置属性(uploadToken, authorization)
33
+ - **类型优化** - 优化插件类型定义,改进 EditorPluginKit 类型
34
+ - **HTTP 工具优化** - 简化请求头合并逻辑,移除兼容代码
35
+ - **导出顺序修复** - 修复 package.json exports 中 types 字段顺序
36
+
16
37
  ### v0.5.8 更新内容
17
38
 
18
39
  - **内容格式转换** - 基于 Plate.js 官方 API 实现 JSON/HTML/Markdown 互转
@@ -1011,10 +1032,91 @@ src/
1011
1032
 
1012
1033
  ---
1013
1034
 
1035
+ ## 发布到 npm
1036
+
1037
+ ### 前置条件
1038
+
1039
+ - 已安装 Node.js 18+ 和 pnpm
1040
+ - 拥有 npm 账号并具有 `kc-plate-editor` 包的发布权限
1041
+ - npm 账号已开启 2FA 时,需准备好身份验证器 App(如 Google Authenticator)
1042
+
1043
+ ### 发布步骤
1044
+
1045
+ ```bash
1046
+ # 1. 进入项目目录
1047
+ cd kc-plate-editor
1048
+
1049
+ # 2. 更新版本号(选择 patch/minor/major)
1050
+ npm version patch # 0.6.1 → 0.6.2
1051
+ npm version minor # 0.6.1 → 0.7.0
1052
+ npm version major # 0.6.1 → 1.0.0
1053
+ # 或直接编辑 package.json 中的 version 字段
1054
+
1055
+ # 3. 验证代码质量(typecheck + lint + test)
1056
+ pnpm run typecheck
1057
+ pnpm run lint
1058
+ pnpm run test
1059
+
1060
+ # 4. 构建产物
1061
+ pnpm run build
1062
+
1063
+ # 5. 登录 npm 官方 registry
1064
+ npm login --registry https://registry.npmjs.org/
1065
+ # 按提示在浏览器完成登录,回到终端按 Enter 确认
1066
+
1067
+ # 6. 发布(开启 2FA 的账号需要 --otp 参数)
1068
+ npm publish --registry https://registry.npmjs.org/ --otp=你的6位验证码
1069
+ # 从身份验证器 App 获取 OTP 后立即执行(30秒有效期)
1070
+ ```
1071
+
1072
+ ### 发布到私有 registry
1073
+
1074
+ 如果使用 Verdaccio、Nexus 等私有 npm 仓库:
1075
+
1076
+ ```bash
1077
+ # 1. 登录私有 registry
1078
+ npm login --registry http://your-private-registry:4873/
1079
+
1080
+ # 2. 构建
1081
+ pnpm run build
1082
+
1083
+ # 3. 发布到私有 registry(私服通常不需要 OTP)
1084
+ npm publish --registry http://your-private-registry:4873/
1085
+ ```
1086
+
1087
+ 也可以在 `.npmrc` 中配置默认 registry 避免每次指定:
1088
+
1089
+ ```ini
1090
+ # .npmrc
1091
+ registry=http://your-private-registry:4873/
1092
+ ```
1093
+
1094
+ ### 发布后验证
1095
+
1096
+ ```bash
1097
+ # 查看已发布的版本
1098
+ npm view kc-plate-editor versions --registry https://registry.npmjs.org/
1099
+
1100
+ # 在其他项目中安装最新版
1101
+ pnpm add kc-plate-editor@latest
1102
+ ```
1103
+
1104
+ ### 常见问题
1105
+
1106
+ | 错误 | 原因 | 解决方式 |
1107
+ |------|------|----------|
1108
+ | `E403 Two-factor authentication required` | npm 账号开启了 2FA | 添加 `--otp=123456` 参数 |
1109
+ | `E401 Unauthorized` | 未登录或 token 过期 | 重新执行 `npm login` |
1110
+ | `E403 Forbidden` | 无发布权限 | 检查 npm 账号对该包的权限 |
1111
+ | `EPUBLISHCONFLICT` | 版本号已存在 | 更新 `package.json` 中的版本号 |
1112
+
1113
+ ---
1114
+
1014
1115
  ## 更多资源
1015
1116
 
1016
1117
  - **在线示例** - 运行 `pnpm dev` 后访问 http://localhost:3001
1017
1118
  - **详细文档** - 查看 `docs/` 目录
1119
+ - **变更日志** - 查看 `CHANGELOG.md`
1018
1120
  - **Plate.js 文档** - https://platejs.org
1019
1121
 
1020
1122
  ---
@@ -1025,7 +1127,7 @@ src/
1025
1127
  - Plate.js 52
1026
1128
  - TypeScript 5.9
1027
1129
  - Tailwind CSS 4
1028
- - Vite 5
1130
+ - Vite 7
1029
1131
 
1030
1132
  ---
1031
1133
 
File without changes
@@ -0,0 +1,7 @@
1
+ /**
2
+ * 编辑器 Hooks 统一导出
3
+ *
4
+ * 这些 hooks 将 PlateEditor 组件中的方法逻辑拆分出来,
5
+ * 提供更好的可复用性和性能(减少不必要的重新创建)
6
+ */
7
+ export { useContentMethods, useMarkdownMethods, useHtmlMethods, useExportMethods, useFindReplaceMethods, useDocumentAnalysisMethods, useInsertMethods, useHistoryMethods, useEditorControlMethods, } from './use-editor-methods';
@@ -0,0 +1,89 @@
1
+ import { Value } from 'platejs';
2
+ import { TPlateEditor } from 'platejs/react';
3
+ import { HtmlSerializeOptions } from '../../../lib/content-converter';
4
+ import { FindOptions, ReplaceOptions } from '../../../types/editor-types';
5
+ /**
6
+ * 编辑器方法 Hook
7
+ * 将 PlateEditor 中的方法逻辑拆分出来,提升性能和可维护性
8
+ */
9
+ import * as React from 'react';
10
+ /**
11
+ * 内容管理方法 Hook
12
+ * 提供 getContent, setContent, resetContent 等方法
13
+ */
14
+ export declare function useContentMethods(editor: TPlateEditor | null, initialValueRef: React.RefObject<Value>, previousValueRef: React.MutableRefObject<Value>, onChange?: (value: Value) => void): {
15
+ getContent: () => Value;
16
+ setContent: (content: Value) => void;
17
+ resetContent: () => void;
18
+ getText: () => string;
19
+ isEmpty: () => boolean;
20
+ };
21
+ /**
22
+ * Markdown 方法 Hook
23
+ */
24
+ export declare function useMarkdownMethods(editor: TPlateEditor | null, previousValueRef: React.MutableRefObject<Value>, onChange?: (value: Value) => void): {
25
+ getMarkdown: () => string;
26
+ setMarkdown: (markdown: string) => void;
27
+ insertMarkdown: (markdown: string) => void;
28
+ };
29
+ /**
30
+ * HTML 方法 Hook
31
+ */
32
+ export declare function useHtmlMethods(editor: TPlateEditor | null, previousValueRef: React.MutableRefObject<Value>, onChange?: (value: Value) => void): {
33
+ getHtml: (options?: HtmlSerializeOptions) => Promise<string>;
34
+ setHtml: (html: string) => void;
35
+ };
36
+ /**
37
+ * 导出方法 Hook
38
+ */
39
+ export declare function useExportMethods(editor: TPlateEditor | null): {
40
+ exportAsHtml: (filename?: string) => Promise<void>;
41
+ exportAsMarkdown: (filename?: string) => Promise<void>;
42
+ exportAsPdf: (filename?: string) => Promise<void>;
43
+ exportAsImage: (filename?: string) => Promise<void>;
44
+ };
45
+ /**
46
+ * 查找替换方法 Hook
47
+ */
48
+ export declare function useFindReplaceMethods(editor: TPlateEditor | null): {
49
+ find: (searchText: string, options?: FindOptions) => import('../../../types/editor-types').MatchPosition[];
50
+ replace: (searchText: string, replaceText: string, options?: ReplaceOptions) => number;
51
+ };
52
+ /**
53
+ * 文档分析方法 Hook
54
+ */
55
+ export declare function useDocumentAnalysisMethods(editor: TPlateEditor | null): {
56
+ getOutline: () => import('../../../types/editor-types').OutlineItem[];
57
+ getWordCount: () => import('../../../types/editor-types').WordCountResult;
58
+ };
59
+ /**
60
+ * 插入方法 Hook
61
+ */
62
+ export declare function useInsertMethods(editor: TPlateEditor | null): {
63
+ insertText: (text: string) => void;
64
+ toggleMark: (mark: string) => void;
65
+ insertLink: (url: string, text?: string) => void;
66
+ insertImage: (url: string) => void;
67
+ insertNodes: (nodes: Value, options?: {
68
+ at?: number[];
69
+ }) => void;
70
+ insertCodeBlock: (code: string, language?: string) => void;
71
+ insertBlockquote: (text: string) => void;
72
+ };
73
+ /**
74
+ * 历史操作方法 Hook
75
+ */
76
+ export declare function useHistoryMethods(editor: TPlateEditor | null): {
77
+ undo: () => void;
78
+ redo: () => void;
79
+ canUndo: () => boolean;
80
+ canRedo: () => boolean;
81
+ clearHistory: () => void;
82
+ };
83
+ /**
84
+ * 编辑器控制方法 Hook
85
+ */
86
+ export declare function useEditorControlMethods(editor: TPlateEditor | null): {
87
+ focus: () => void;
88
+ blur: () => void;
89
+ };
@@ -91,6 +91,8 @@ export interface PlateEditorProps {
91
91
  onAutoSave?: (content: Value) => void;
92
92
  /** 保存回调(用于快捷键保存 Ctrl+S / Cmd+S) */
93
93
  onSave?: (content: Value) => void;
94
+ /** 是否将编辑器状态同步到全局 Store,默认 false */
95
+ syncToStore?: boolean;
94
96
  }
95
97
  /**
96
98
  * PlateEditor 组件引用接口
@@ -194,5 +196,64 @@ export interface PlateEditorRef {
194
196
  restoreAutoSave: () => Value | null;
195
197
  /** 清除自动保存数据 */
196
198
  clearAutoSave: () => void;
199
+ /** 获取选中的文本 */
200
+ getSelectedText: () => string;
201
+ /** 检查是否有选中内容 */
202
+ hasSelection: () => boolean;
203
+ /** 获取当前选区 */
204
+ getSelection: () => {
205
+ anchor: {
206
+ path: number[];
207
+ offset: number;
208
+ };
209
+ focus: {
210
+ path: number[];
211
+ offset: number;
212
+ };
213
+ } | null;
214
+ /** 选中所有内容 */
215
+ selectAll: () => void;
216
+ /** 取消选中 */
217
+ deselect: () => void;
218
+ /** 检查是否可以撤销 */
219
+ canUndo: () => boolean;
220
+ /** 检查是否可以重做 */
221
+ canRedo: () => boolean;
222
+ /** 清空历史记录 */
223
+ clearHistory: () => void;
224
+ /**
225
+ * 插入节点
226
+ * @param nodes 要插入的节点数组
227
+ * @param options 插入选项
228
+ */
229
+ insertNodes: (nodes: Value, options?: {
230
+ at?: number[];
231
+ }) => void;
232
+ /**
233
+ * 插入代码块
234
+ * @param code 代码内容
235
+ * @param language 代码语言
236
+ */
237
+ insertCodeBlock: (code: string, language?: string) => void;
238
+ /**
239
+ * 插入引用块
240
+ * @param text 引用内容
241
+ */
242
+ insertBlockquote: (text: string) => void;
243
+ /** 滚动到顶部 */
244
+ scrollToTop: () => void;
245
+ /** 滚动到底部 */
246
+ scrollToBottom: () => void;
247
+ /**
248
+ * 滚动到指定节点
249
+ * @param nodeId 节点 ID
250
+ */
251
+ scrollToNode: (nodeId: string) => void;
252
+ /** 获取当前编辑模式 */
253
+ getMode: () => import('../../types/editor-types').EditorMode;
254
+ /** 设置编辑模式 */
255
+ setMode: (mode: import('../../types/editor-types').EditorMode) => void;
256
+ /** 切换只读状态 */
257
+ toggleReadOnly: () => void;
197
258
  }
198
259
  export declare const PlateEditor: React.ForwardRefExoticComponent<PlateEditorProps & React.RefAttributes<PlateEditorRef>>;
@@ -1,3 +1,4 @@
1
+ import { EditorPluginKit } from '../../../types/plugin-types';
1
2
  export declare const aiChatPlugin: import('platejs/react').PlatePlugin<import('platejs').PluginConfig<"aiChat", {
2
3
  chatOptions: {
3
4
  api: string;
@@ -95,4 +96,4 @@ export declare const aiChatPlugin: import('platejs/react').PlatePlugin<import('p
95
96
  format?: "all" | "none" | "single";
96
97
  } | undefined) => void;
97
98
  }>, {}>>;
98
- export declare const AIKit: any[];
99
+ export declare const AIKit: EditorPluginKit;
@@ -39,6 +39,7 @@ export declare const BlockMenuKit: (import('platejs/react').PlatePlugin<import('
39
39
  };
40
40
  editorPaddingRight?: import('react').CSSProperties["width"];
41
41
  enableContextMenu?: boolean;
42
+ disableSelectAll?: boolean;
42
43
  isSelecting?: boolean;
43
44
  isSelectionAreaVisible?: boolean;
44
45
  rightSelectionAreaClassName?: string;
@@ -1,28 +1,2 @@
1
- export declare const createBlockPlaceholderKit: (locale?: "zh-CN" | "en-US") => import('platejs/react').PlatePlugin<import('platejs').PluginConfig<"blockPlaceholder", {
2
- _target: {
3
- node: import('platejs').TElement;
4
- placeholder: string;
5
- } | null;
6
- placeholders: Record<string, string>;
7
- query: (context: import('platejs/react').PlatePluginContext<import('platejs/react').BlockPlaceholderConfig> & {
8
- node: import('platejs').TElement;
9
- path: import('platejs').Path;
10
- }) => boolean;
11
- className?: string;
12
- }, {}, {}, {
13
- placeholder: (node: import('platejs').TElement) => string | undefined;
14
- }>>[];
15
- export declare const BlockPlaceholderKit: import('platejs/react').PlatePlugin<import('platejs').PluginConfig<"blockPlaceholder", {
16
- _target: {
17
- node: import('platejs').TElement;
18
- placeholder: string;
19
- } | null;
20
- placeholders: Record<string, string>;
21
- query: (context: import('platejs/react').PlatePluginContext<import('platejs/react').BlockPlaceholderConfig> & {
22
- node: import('platejs').TElement;
23
- path: import('platejs').Path;
24
- }) => boolean;
25
- className?: string;
26
- }, {}, {}, {
27
- placeholder: (node: import('platejs').TElement) => string | undefined;
28
- }>>[];
1
+ export declare const createBlockPlaceholderKit: (locale?: "zh-CN" | "en-US") => any[];
2
+ export declare const BlockPlaceholderKit: any[];
@@ -39,6 +39,7 @@ export declare const BlockSelectionKit: import('platejs/react').PlatePlugin<impo
39
39
  };
40
40
  editorPaddingRight?: import('react').CSSProperties["width"];
41
41
  enableContextMenu?: boolean;
42
+ disableSelectAll?: boolean;
42
43
  isSelecting?: boolean;
43
44
  isSelectionAreaVisible?: boolean;
44
45
  rightSelectionAreaClassName?: string;
@@ -1,4 +1,5 @@
1
1
  import { ToolbarConfig, ToolbarAlign } from '../../../types/toolbar-config';
2
+ import { EditorPluginKit } from '../../../types/plugin-types';
2
3
  import { default as React } from 'react';
3
4
  export interface ConfigurableToolbarKitOptions {
4
5
  /** 是否显示工具栏,默认 true */
@@ -20,5 +21,12 @@ export interface ConfigurableToolbarKitOptions {
20
21
  before?: React.ReactNode;
21
22
  after?: React.ReactNode;
22
23
  };
24
+ /** 是否显示目录切换按钮 */
25
+ showTocButton?: boolean;
26
+ /** 目录切换按钮状态引用(使用 ref 避免重新创建 plugins) */
27
+ tocStateRef?: React.RefObject<{
28
+ visible: boolean;
29
+ setVisible: (v: boolean | ((prev: boolean) => boolean)) => void;
30
+ }>;
23
31
  }
24
- export declare function createConfigurableToolbarKit(config: ToolbarConfig, options?: ConfigurableToolbarKitOptions): any[];
32
+ export declare function createConfigurableToolbarKit(config: ToolbarConfig, options?: ConfigurableToolbarKitOptions): EditorPluginKit;
@@ -1,10 +1,50 @@
1
+ import { TElement } from 'platejs';
1
2
  import { EditorConfig } from '../../../lib/config-provider';
3
+ import { EditorPluginKit } from '../../../types/plugin-types';
4
+ /**
5
+ * Copilot 配置选项
6
+ */
7
+ export interface CopilotOptions {
8
+ /** API 地址 */
9
+ apiUrl?: string;
10
+ /** 自定义请求头 */
11
+ headers?: Record<string, string>;
12
+ /** 系统提示词 */
13
+ systemPrompt?: string;
14
+ /** 防抖延迟(毫秒),默认 500 */
15
+ debounceDelay?: number;
16
+ /** 是否在错误时使用随机文本填充,默认 true */
17
+ useFallbackOnError?: boolean;
18
+ /** 自定义提示生成函数 */
19
+ getPrompt?: (context: {
20
+ editor: unknown;
21
+ contextEntry: [TElement, number[]] | null;
22
+ }) => string;
23
+ /** 自定义补全结果处理函数 */
24
+ onComplete?: (completion: string) => string;
25
+ /** 快捷键配置 */
26
+ shortcuts?: {
27
+ accept?: string;
28
+ acceptNextWord?: string;
29
+ reject?: string;
30
+ triggerSuggestion?: string;
31
+ };
32
+ /** 是否启用,默认 true */
33
+ enabled?: boolean;
34
+ }
35
+ /** 导出系统提示词供外部使用 */
36
+ export declare const COPILOT_SYSTEM_PROMPT = "You are an advanced AI writing assistant, similar to VSCode Copilot but for general text. Your task is to predict and generate the next part of the text based on the given context.\n\nRules:\n- Continue the text naturally up to the next punctuation mark (., ,, ;, :, ?, or !).\n- Maintain style and tone. Don't repeat given text.\n- For unclear context, provide the most likely continuation.\n- Handle code snippets, lists, or structured text if needed.\n- Don't include \"\"\" in your response.\n- CRITICAL: Always end with a punctuation mark.\n- CRITICAL: Avoid starting a new block. Do not use block formatting like >, #, 1., 2., -, etc. The suggestion should continue in the same block as the context.\n- If no context is provided or you can't generate a continuation, return \"0\" without explanation.";
2
37
  /**
3
38
  * 创建 Copilot 插件配置
4
39
  * @param editorConfig 编辑器配置(可选,用于自定义 API 地址和请求头)
40
+ * @param options Copilot 特定配置选项
5
41
  */
6
- export declare function createCopilotKit(editorConfig?: EditorConfig): any[];
42
+ export declare function createCopilotKit(editorConfig?: EditorConfig, options?: CopilotOptions): EditorPluginKit;
7
43
  /**
8
44
  * 默认 Copilot 插件(使用默认配置)
9
45
  */
10
- export declare const CopilotKit: any[];
46
+ export declare const CopilotKit: EditorPluginKit;
47
+ /**
48
+ * 创建禁用的 Copilot Kit(仅包含 Markdown 支持)
49
+ */
50
+ export declare const DisabledCopilotKit: EditorPluginKit;
@@ -1,4 +1 @@
1
- export declare const ExitBreakKit: import('platejs').SlatePlugin<import('platejs').PluginConfig<"exitBreak", {}, {}, Record<"exitBreak", {
2
- insert: (options: Omit<import('platejs').InsertExitBreakOptions, "reverse">) => true | undefined;
3
- insertBefore: (options: Omit<import('platejs').InsertExitBreakOptions, "reverse">) => true | undefined;
4
- }>, {}>>[];
1
+ export declare const ExitBreakKit: any[];