@ant-design/agentic-ui 2.29.7 → 2.29.8

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 (83) hide show
  1. package/dist/ChatLayout/components/FooterBackgroundLottie/index.js +1 -1
  2. package/dist/MarkdownEditor/BaseMarkdownEditor.js +1 -1
  3. package/dist/MarkdownEditor/editor/elements/Blockquote/ReadonlyBlockquote.d.ts +33 -0
  4. package/dist/MarkdownEditor/editor/elements/Blockquote/ReadonlyBlockquote.js +69 -0
  5. package/dist/MarkdownEditor/editor/elements/Break/ReadonlyBreak.d.ts +30 -0
  6. package/dist/MarkdownEditor/editor/elements/Break/ReadonlyBreak.js +88 -0
  7. package/dist/MarkdownEditor/editor/elements/Card/ReadonlyCard.d.ts +34 -0
  8. package/dist/MarkdownEditor/editor/elements/Card/ReadonlyCard.js +96 -0
  9. package/dist/MarkdownEditor/editor/elements/Code/ReadonlyCode.d.ts +33 -0
  10. package/dist/MarkdownEditor/editor/elements/Code/ReadonlyCode.js +145 -0
  11. package/dist/MarkdownEditor/editor/elements/FootnoteDefinition/ReadonlyFootnoteDefinition.d.ts +34 -0
  12. package/dist/MarkdownEditor/editor/elements/FootnoteDefinition/ReadonlyFootnoteDefinition.js +125 -0
  13. package/dist/MarkdownEditor/editor/elements/FootnoteReference/ReadonlyFootnoteReference.d.ts +34 -0
  14. package/dist/MarkdownEditor/editor/elements/FootnoteReference/ReadonlyFootnoteReference.js +101 -0
  15. package/dist/MarkdownEditor/editor/elements/Head/ReadonlyHead.d.ts +35 -0
  16. package/dist/MarkdownEditor/editor/elements/Head/ReadonlyHead.js +111 -0
  17. package/dist/MarkdownEditor/editor/elements/Head/index.d.ts +3 -0
  18. package/dist/MarkdownEditor/editor/elements/Head/index.js +3 -1
  19. package/dist/MarkdownEditor/editor/elements/Hr/ReadonlyHr.d.ts +30 -0
  20. package/dist/MarkdownEditor/editor/elements/Hr/ReadonlyHr.js +95 -0
  21. package/dist/MarkdownEditor/editor/elements/Image/ReadonlyEditorImage.d.ts +35 -0
  22. package/dist/MarkdownEditor/editor/elements/Image/ReadonlyEditorImage.js +426 -0
  23. package/dist/MarkdownEditor/editor/elements/Image/index.js +38 -50
  24. package/dist/MarkdownEditor/editor/elements/InlineKatex/ReadonlyInlineKatex.d.ts +32 -0
  25. package/dist/MarkdownEditor/editor/elements/InlineKatex/ReadonlyInlineKatex.js +100 -0
  26. package/dist/MarkdownEditor/editor/elements/Katex/ReadonlyKatex.d.ts +32 -0
  27. package/dist/MarkdownEditor/editor/elements/Katex/ReadonlyKatex.js +110 -0
  28. package/dist/MarkdownEditor/editor/elements/LinkCard/ReadonlyLinkCard.d.ts +40 -0
  29. package/dist/MarkdownEditor/editor/elements/LinkCard/ReadonlyLinkCard.js +215 -0
  30. package/dist/MarkdownEditor/editor/elements/List/List.js +27 -12
  31. package/dist/MarkdownEditor/editor/elements/List/ReadonlyList.d.ts +33 -0
  32. package/dist/MarkdownEditor/editor/elements/List/ReadonlyList.js +93 -0
  33. package/dist/MarkdownEditor/editor/elements/List/ReadonlyListItem.d.ts +35 -0
  34. package/dist/MarkdownEditor/editor/elements/List/ReadonlyListItem.js +138 -0
  35. package/dist/MarkdownEditor/editor/elements/Media/ReadonlyMedia.d.ts +36 -0
  36. package/dist/MarkdownEditor/editor/elements/Media/ReadonlyMedia.js +600 -0
  37. package/dist/MarkdownEditor/editor/elements/Mermaid/ReadonlyMermaid.d.ts +32 -0
  38. package/dist/MarkdownEditor/editor/elements/Mermaid/ReadonlyMermaid.js +101 -0
  39. package/dist/MarkdownEditor/editor/elements/Paragraph/ReadonlyParagraph.d.ts +35 -0
  40. package/dist/MarkdownEditor/editor/elements/Paragraph/ReadonlyParagraph.js +109 -0
  41. package/dist/MarkdownEditor/editor/elements/Paragraph/index.js +2 -1
  42. package/dist/MarkdownEditor/editor/elements/Schema/ReadonlySchema.d.ts +33 -0
  43. package/dist/MarkdownEditor/editor/elements/Schema/ReadonlySchema.js +163 -0
  44. package/dist/MarkdownEditor/editor/elements/index.d.ts +20 -1
  45. package/dist/MarkdownEditor/editor/elements/index.js +65 -29
  46. package/dist/MarkdownEditor/editor/parser/parse/parseBlockElements.js +18 -10
  47. package/dist/MarkdownEditor/editor/parser/parserSlateNodeToMarkdown.js +64 -21
  48. package/dist/MarkdownEditor/editor/plugins/elements.js +60 -6
  49. package/dist/MarkdownEditor/editor/plugins/hotKeyCommands/backspace.js +97 -39
  50. package/dist/MarkdownEditor/editor/plugins/hotKeyCommands/tab.d.ts +14 -0
  51. package/dist/MarkdownEditor/editor/plugins/hotKeyCommands/tab.js +117 -90
  52. package/dist/MarkdownEditor/editor/plugins/index.d.ts +8 -0
  53. package/dist/MarkdownEditor/editor/plugins/index.js +8 -0
  54. package/dist/MarkdownEditor/editor/plugins/insertParsedHtmlNodes.d.ts +12 -6
  55. package/dist/MarkdownEditor/editor/plugins/insertParsedHtmlNodes.js +67 -42
  56. package/dist/MarkdownEditor/editor/plugins/utils.d.ts +31 -0
  57. package/dist/MarkdownEditor/editor/plugins/utils.js +75 -0
  58. package/dist/MarkdownEditor/editor/plugins/withCardPlugin.d.ts +15 -0
  59. package/dist/MarkdownEditor/editor/plugins/withCardPlugin.js +329 -0
  60. package/dist/MarkdownEditor/editor/plugins/withCodeTagPlugin.d.ts +11 -0
  61. package/dist/MarkdownEditor/editor/plugins/withCodeTagPlugin.js +299 -0
  62. package/dist/MarkdownEditor/editor/plugins/withInlineNodes.d.ts +12 -0
  63. package/dist/MarkdownEditor/editor/plugins/withInlineNodes.js +17 -0
  64. package/dist/MarkdownEditor/editor/plugins/withLinkAndMediaPlugin.d.ts +11 -0
  65. package/dist/MarkdownEditor/editor/plugins/withLinkAndMediaPlugin.js +70 -0
  66. package/dist/MarkdownEditor/editor/plugins/withListsPlugin.d.ts +23 -0
  67. package/dist/MarkdownEditor/editor/plugins/withListsPlugin.js +204 -0
  68. package/dist/MarkdownEditor/editor/plugins/withMarkdown.d.ts +9 -12
  69. package/dist/MarkdownEditor/editor/plugins/withMarkdown.js +17 -764
  70. package/dist/MarkdownEditor/editor/plugins/withSchemaPlugin.d.ts +11 -0
  71. package/dist/MarkdownEditor/editor/plugins/withSchemaPlugin.js +55 -0
  72. package/dist/MarkdownEditor/editor/plugins/withVoidNodes.d.ts +12 -0
  73. package/dist/MarkdownEditor/editor/plugins/withVoidNodes.js +17 -0
  74. package/dist/MarkdownEditor/editor/store.js +1 -1
  75. package/dist/MarkdownEditor/editor/utils/docx/module.js +41 -8
  76. package/dist/MarkdownEditor/editor/utils/editorCommands.d.ts +97 -0
  77. package/dist/MarkdownEditor/editor/utils/editorCommands.js +966 -0
  78. package/dist/MarkdownEditor/editor/utils/editorUtils.js +2 -2
  79. package/dist/MarkdownEditor/editor/utils/keyboard.js +15 -391
  80. package/dist/MarkdownEditor/el.d.ts +12 -5
  81. package/dist/MarkdownInputField/MarkdownInputField.js +10 -23
  82. package/dist/MarkdownInputField/style.js +9 -4
  83. package/package.json +8 -8
@@ -1,494 +1,10 @@
1
- function _array_like_to_array(arr, len) {
2
- if (len == null || len > arr.length) len = arr.length;
3
- for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
4
- return arr2;
5
- }
6
- function _array_with_holes(arr) {
7
- if (Array.isArray(arr)) return arr;
8
- }
9
- function _array_without_holes(arr) {
10
- if (Array.isArray(arr)) return _array_like_to_array(arr);
11
- }
12
- function _define_property(obj, key, value) {
13
- if (key in obj) {
14
- Object.defineProperty(obj, key, {
15
- value: value,
16
- enumerable: true,
17
- configurable: true,
18
- writable: true
19
- });
20
- } else {
21
- obj[key] = value;
22
- }
23
- return obj;
24
- }
25
- function _iterable_to_array(iter) {
26
- if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
27
- }
28
- function _iterable_to_array_limit(arr, i) {
29
- var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
30
- if (_i == null) return;
31
- var _arr = [];
32
- var _n = true;
33
- var _d = false;
34
- var _s, _e;
35
- try {
36
- for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
37
- _arr.push(_s.value);
38
- if (i && _arr.length === i) break;
39
- }
40
- } catch (err) {
41
- _d = true;
42
- _e = err;
43
- } finally{
44
- try {
45
- if (!_n && _i["return"] != null) _i["return"]();
46
- } finally{
47
- if (_d) throw _e;
48
- }
49
- }
50
- return _arr;
51
- }
52
- function _non_iterable_rest() {
53
- throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
54
- }
55
- function _non_iterable_spread() {
56
- throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
57
- }
58
- function _object_spread(target) {
59
- for(var i = 1; i < arguments.length; i++){
60
- var source = arguments[i] != null ? arguments[i] : {};
61
- var ownKeys = Object.keys(source);
62
- if (typeof Object.getOwnPropertySymbols === "function") {
63
- ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
64
- return Object.getOwnPropertyDescriptor(source, sym).enumerable;
65
- }));
66
- }
67
- ownKeys.forEach(function(key) {
68
- _define_property(target, key, source[key]);
69
- });
70
- }
71
- return target;
72
- }
73
- function ownKeys(object, enumerableOnly) {
74
- var keys = Object.keys(object);
75
- if (Object.getOwnPropertySymbols) {
76
- var symbols = Object.getOwnPropertySymbols(object);
77
- if (enumerableOnly) {
78
- symbols = symbols.filter(function(sym) {
79
- return Object.getOwnPropertyDescriptor(object, sym).enumerable;
80
- });
81
- }
82
- keys.push.apply(keys, symbols);
83
- }
84
- return keys;
85
- }
86
- function _object_spread_props(target, source) {
87
- source = source != null ? source : {};
88
- if (Object.getOwnPropertyDescriptors) {
89
- Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
90
- } else {
91
- ownKeys(Object(source)).forEach(function(key) {
92
- Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
93
- });
94
- }
95
- return target;
96
- }
97
- function _sliced_to_array(arr, i) {
98
- return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
99
- }
100
- function _to_consumable_array(arr) {
101
- return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
102
- }
103
- function _unsupported_iterable_to_array(o, minLen) {
104
- if (!o) return;
105
- if (typeof o === "string") return _array_like_to_array(o, minLen);
106
- var n = Object.prototype.toString.call(o).slice(8, -1);
107
- if (n === "Object" && o.constructor) n = o.constructor.name;
108
- if (n === "Map" || n === "Set") return Array.from(n);
109
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
110
- }
111
- import { Editor, Node, Path, Range, Transforms } from "slate";
112
- import { ReactEditor } from "slate-react";
113
- export var inlineNode = new Set([
114
- 'break',
115
- 'inline-katex'
116
- ]);
117
- var voidNode = new Set([
118
- 'hr',
119
- 'break'
120
- ]);
121
- function hasRange(editor, range) {
122
- var anchor = range.anchor, focus = range.focus;
123
- return Editor.hasPath(editor, anchor.path) && Editor.hasPath(editor, focus.path);
124
- }
125
- /**
126
- * 清空卡片区域的文本内容 - 使用零宽字符替换
127
- * @param editor - Slate编辑器实例
128
- * @param path - 要清空的节点路径
129
- */ var clearCardAreaText = function(editor, path) {
130
- try {
131
- var node = Node.get(editor, path);
132
- if (node) {
133
- // 尝试直接DOM操作,设置为零宽字符
134
- try {
135
- var domNode = ReactEditor.toDOMNode(editor, node);
136
- if (domNode) {
137
- var zeroWidthNode = domNode === null || domNode === void 0 ? void 0 : domNode.querySelector('[data-slate-zero-width]');
138
- if (zeroWidthNode) {
139
- zeroWidthNode.textContent = '\uFEFF';
140
- }
141
- }
142
- } catch (domError) {
143
- // DOM operation failed, falling back to Slate transforms
144
- }
145
- }
146
- } catch (error) {
147
- // 如果操作失败,忽略错误
148
- }
149
- };
150
- /**
151
- * 检查卡片是否为空
152
- * @param cardNode - 卡片节点
153
- * @returns 如果卡片为空则返回true
154
- */ var isCardEmpty = function(cardNode) {
155
- if (!cardNode || cardNode.type !== 'card' || !cardNode.children) {
156
- return false;
157
- }
158
- // 查找实际内容节点(非card-before和card-after的节点)
159
- var contentNodes = cardNode.children.filter(function(child) {
160
- return child.type !== 'card-before' && child.type !== 'card-after';
161
- });
162
- // 如果没有内容节点,则为空
163
- if (contentNodes.length === 0) {
164
- return true;
165
- }
166
- // 检查内容节点是否为空
167
- return contentNodes.every(function(node) {
168
- if (!node.children || node.children.length === 0) {
169
- return true;
170
- }
171
- // 检查是否只包含空文本
172
- return node.children.every(function(child) {
173
- return child.text === '' || child.text && child.text.trim() === '';
174
- });
175
- });
176
- };
177
- /**
178
- * 处理卡片相关节点的操作
179
- *
180
- * @param editor - Slate编辑器实例
181
- * @param operation - 要处理的操作
182
- * @param apply - 原始的apply函数
183
- * @returns 如果操作被处理则返回true,否则返回false
184
- *
185
- * @description
186
- * 处理以下卡片相关操作:
187
- * - 删除卡片节点 (remove_node),包括card、card-before和card-after
188
- * - 在卡片后插入文本 (insert_text)
189
- * - 在卡片内插入节点 (insert_node)
190
- * - 检查并删除空卡片
191
- */ var handleCardOperation = function(editor, operation, apply) {
192
- if (operation.type === 'remove_node') {
193
- var node = operation.node;
194
- // 删除card时,直接删除整个卡片
195
- if (node.type === 'card') {
196
- // 直接执行原始操作,避免递归
197
- apply(operation);
198
- return true;
199
- }
200
- // 删除card-after时,删除整个卡片
201
- if (node.type === 'card-after') {
202
- Transforms.removeNodes(editor, {
203
- at: Path.parent(operation.path)
204
- });
205
- return true;
206
- }
207
- // 删除card-before时,阻止操作
208
- if (node.type === 'card-before') {
209
- return true;
210
- }
211
- // 检查操作后的父级是否为空卡片,如果是则删除
212
- if (operation.path && operation.path.length > 0) {
213
- try {
214
- var parentPath = Path.parent(operation.path);
215
- var parentNode = Node.get(editor, parentPath);
216
- if (parentNode && parentNode.type === 'card' && isCardEmpty(parentNode)) {
217
- Transforms.removeNodes(editor, {
218
- at: parentPath
219
- });
220
- return true;
221
- }
222
- } catch (error) {
223
- // 如果无法获取父节点,忽略错误
224
- }
225
- }
226
- }
227
- if (operation.type === 'insert_text') {
228
- try {
229
- var parentNode1 = Node.get(editor, Path.parent(operation.path));
230
- // card-before 不允许任何文本输入
231
- if (parentNode1.type === 'card-before') {
232
- return true; // 阻止输入
233
- }
234
- // card-after 的输入会插入到卡片后面的新段落中
235
- if (parentNode1.type === 'card-after') {
236
- try {
237
- var grandParentPath = Path.parent(Path.parent(operation.path));
238
- var grandParentNode = Node.get(editor, grandParentPath);
239
- if (grandParentNode.type === 'card') {
240
- // 使用 Editor.withoutNormalizing 确保操作的原子性
241
- Editor.withoutNormalizing(editor, function() {
242
- // 先创建新段落
243
- Transforms.insertNodes(editor, {
244
- type: 'paragraph',
245
- children: [
246
- {
247
- text: operation.text
248
- }
249
- ]
250
- }, {
251
- at: Path.next(grandParentPath)
252
- });
253
- // 然后选中新创建的段落
254
- var newParagraphPath = Path.next(grandParentPath);
255
- var textPath = _to_consumable_array(newParagraphPath).concat([
256
- 0
257
- ]);
258
- Transforms.select(editor, {
259
- anchor: {
260
- path: textPath,
261
- offset: operation.text.length
262
- },
263
- focus: {
264
- path: textPath,
265
- offset: operation.text.length
266
- }
267
- });
268
- clearCardAreaText(editor, operation.path);
269
- });
270
- return true;
271
- }
272
- } catch (error) {
273
- // 如果获取父级节点失败,继续阻止输入
274
- }
275
- return true;
276
- }
277
- } catch (error) {
278
- // 如果无法获取父节点,允许操作继续
279
- }
280
- }
281
- if (operation.type === 'insert_node') {
282
- var parentNode2 = Node.get(editor, Path.parent(operation.path));
283
- // card-before 不允许任何节点插入
284
- if (parentNode2.type === 'card-before') {
285
- return true; // 阻止插入
286
- }
287
- // card-after 的节点插入会放到卡片后面
288
- if (parentNode2.type === 'card-after') {
289
- if (Node.get(editor, Path.parent(Path.parent(operation.path))).type === 'card') {
290
- var cardPath = Path.parent(Path.parent(operation.path));
291
- Transforms.insertNodes(editor, operation.node, {
292
- at: Path.next(cardPath)
293
- });
294
- return true;
295
- }
296
- Transforms.insertNodes(editor, operation.node, {
297
- at: Path.parent(operation.path)
298
- });
299
- return true;
300
- }
301
- }
302
- // 对于删除文本操作,我们需要在操作执行后检查卡片是否变空
303
- // 这将在 editor.apply 的最后处理
304
- return false;
305
- };
306
- /**
307
- * 处理链接卡片和媒体相关节点的操作
308
- *
309
- * @param editor - Slate编辑器实例
310
- * @param operation - 要处理的操作
311
- * @param apply - 原始的apply函数
312
- * @returns 如果操作被处理则返回true,否则返回false
313
- *
314
- * @description
315
- * 处理以下链接和媒体相关操作:
316
- * - 拆分链接卡片或媒体节点 (split_node)
317
- * - 删除链接卡片内的节点 (remove_node)
318
- */ var handleLinkAndMediaOperation = function(editor, operation) {
319
- var _operation_properties, _operation_properties1;
320
- if (operation.type === 'split_node' && (((_operation_properties = operation.properties) === null || _operation_properties === void 0 ? void 0 : _operation_properties.type) === 'link-card' || ((_operation_properties1 = operation.properties) === null || _operation_properties1 === void 0 ? void 0 : _operation_properties1.type) === 'media')) {
321
- var node = Node.get(editor, operation.path);
322
- if ([
323
- 'link-card',
324
- 'media'
325
- ].includes(node === null || node === void 0 ? void 0 : node.type)) {
326
- Transforms.insertNodes(editor, [
327
- {
328
- type: 'paragraph',
329
- children: [
330
- {
331
- text: '',
332
- p: 'true'
333
- }
334
- ]
335
- }
336
- ], {
337
- at: Path.next([
338
- operation.path.at(0)
339
- ]),
340
- select: true
341
- });
342
- }
343
- return true;
344
- }
345
- if (operation.type === 'remove_node') {
346
- var parentNode = Node.get(editor, Path.parent(operation.path));
347
- if ('link-card' === parentNode.type) {
348
- Transforms.removeNodes(editor, {
349
- at: Path.parent(operation.path)
350
- });
351
- return true;
352
- }
353
- }
354
- return false;
355
- };
356
- /**
357
- * 处理schema相关节点的操作
358
- *
359
- * @param editor - Slate编辑器实例
360
- * @param operation - 要处理的操作
361
- * @param apply - 原始的apply函数
362
- * @returns 如果操作被处理则返回true,否则返回false
363
- *
364
- * @description
365
- * 处理以下schema相关操作:
366
- * - 拆分schema节点 (split_node),在拆分点之后插入新的段落节点
367
- */ var handleSchemaOperation = function(editor, operation) {
368
- var _operation_properties;
369
- if (operation.type === 'split_node' && ((_operation_properties = operation.properties) === null || _operation_properties === void 0 ? void 0 : _operation_properties.type) === 'schema') {
370
- var node = Node.get(editor, operation.path);
371
- if ((node === null || node === void 0 ? void 0 : node.type) === 'schema') {
372
- Transforms.insertNodes(editor, [
373
- {
374
- type: 'paragraph',
375
- children: [
376
- {
377
- text: '',
378
- p: 'true'
379
- }
380
- ]
381
- }
382
- ], {
383
- at: Path.next(operation.path),
384
- select: true
385
- });
386
- }
387
- return true;
388
- }
389
- return false;
390
- };
391
- /**
392
- * 处理代码和标签相关节点的操作
393
- *
394
- * @param editor - Slate编辑器实例
395
- * @param operation - 要处理的操作
396
- * @param apply - 原始的apply函数
397
- * @returns 如果操作被处理则返回true,否则返回false
398
- *
399
- * @description
400
- * 处理以下代码和标签相关操作:
401
- * - 删除文本 (remove_text),处理特殊触发文本和空标签
402
- * - 删除节点 (remove_node),处理代码块周围的空格
403
- * - 插入文本 (insert_text),处理代码块中的空格插入
404
- */ var handleCodeTagOperation = function(editor, operation, apply) {
405
- if (operation.type === 'remove_text') {
406
- var currentNode = Node.get(editor, operation.path);
407
- if (currentNode === null || currentNode === void 0 ? void 0 : currentNode.tag) {
408
- var _currentNode_text;
409
- // 处理空标签的删除
410
- if (((_currentNode_text = currentNode.text) === null || _currentNode_text === void 0 ? void 0 : _currentNode_text.trim()) === '') {
411
- Editor.withoutNormalizing(editor, function() {
412
- Transforms.setNodes(editor, {
413
- tag: false,
414
- code: false,
415
- text: ' ',
416
- triggerText: undefined
417
- }, {
418
- at: operation.path
419
- });
420
- });
421
- return true;
422
- }
423
- if (currentNode.text === operation.text) {
424
- Editor.withoutNormalizing(editor, function() {
425
- Transforms.removeNodes(editor, {
426
- at: operation.path
427
- });
428
- Transforms.insertNodes(editor, _object_spread_props(_object_spread({}, currentNode), {
429
- tag: true,
430
- code: true,
431
- text: ' '
432
- }), {
433
- at: operation.path,
434
- select: true
435
- });
436
- });
437
- return true;
438
- }
439
- // 光标在 tag 内部,执行原始的删除操作
440
- apply(operation);
441
- return true;
442
- }
443
- }
444
- if (operation.type === 'insert_text') {
445
- var _editor_selection;
446
- var currentNode1 = Node.get(editor, operation.path);
447
- if ((currentNode1 === null || currentNode1 === void 0 ? void 0 : currentNode1.tag) && operation.text === ' ' && ((_editor_selection = editor.selection) === null || _editor_selection === void 0 ? void 0 : _editor_selection.focus.offset) === currentNode1.text.length) {
448
- // 检查前一个字符是否是空格
449
- var lastChar = currentNode1.text.charAt(currentNode1.text.length - 1);
450
- if (lastChar === ' ') {
451
- // 如果前一个输入是空格,且当前输入也是空格,则插入一个空格到 tag 节点外
452
- Transforms.insertNodes(editor, [
453
- {
454
- text: ' '
455
- }
456
- ]);
457
- return true;
458
- }
459
- }
460
- if ((currentNode1 === null || currentNode1 === void 0 ? void 0 : currentNode1.tag) && operation.text.trim().length > 0 && currentNode1.text.trim().length === 0) {
461
- Editor.withoutNormalizing(editor, function() {
462
- Transforms.removeNodes(editor, {
463
- at: operation.path
464
- });
465
- Transforms.insertNodes(editor, _object_spread_props(_object_spread({}, currentNode1), {
466
- tag: true,
467
- code: true,
468
- text: operation.text
469
- }), {
470
- at: operation.path,
471
- select: true
472
- });
473
- });
474
- return true;
475
- }
476
- }
477
- if (operation.type === 'split_node') {
478
- var node = Node.get(editor, operation.path);
479
- if ((node === null || node === void 0 ? void 0 : node.tag) || (node === null || node === void 0 ? void 0 : node.code)) {
480
- return true;
481
- }
482
- }
483
- return false;
484
- };
485
- // 将所有处理函数放入数组
486
- var operationHandlers = [
487
- handleCardOperation,
488
- handleLinkAndMediaOperation,
489
- handleSchemaOperation,
490
- handleCodeTagOperation
491
- ];
1
+ import { withCardPlugin } from "./withCardPlugin";
2
+ import { withCodeTagPlugin } from "./withCodeTagPlugin";
3
+ import { withInlineNodes } from "./withInlineNodes";
4
+ import { withLinkAndMediaPlugin } from "./withLinkAndMediaPlugin";
5
+ import { withListsPlugin } from "./withListsPlugin";
6
+ import { withSchemaPlugin } from "./withSchemaPlugin";
7
+ import { withVoidNodes } from "./withVoidNodes";
492
8
  /**
493
9
  * 为Slate编辑器添加Markdown支持的插件函数
494
10
  *
@@ -496,278 +12,15 @@ var operationHandlers = [
496
12
  * @returns 增强后的编辑器实例,具有Markdown处理能力
497
13
  *
498
14
  * @description
499
- * 该插件通过扩展编辑器的基本功能,使其能够处理和渲染Markdown内容:
500
- * - 扩展`isInline`方法,识别特定的行内元素
501
- * - 扩展`isVoid`方法,识别特定的空元素
502
- * - 重写`apply`方法,添加自定义操作处理逻辑
503
- * - 重写`deleteBackward`方法,处理特殊节点的删除行为
504
- *
505
- * 自定义操作处理流程:
506
- * 1. 按顺序尝试所有专用处理函数(表格、卡片、链接、Schema等)
507
- * 2. 如果任一处理函数返回true,则操作被消费
508
- * 3. 否则,调用原始的apply方法处理操作
15
+ * 该插件通过组合多个子插件,为编辑器提供完整的Markdown支持:
16
+ * - 行内节点识别(withInlineNodes)
17
+ * - 空节点识别(withVoidNodes)
18
+ * - 卡片功能(withCardPlugin)
19
+ * - 链接和媒体功能(withLinkAndMediaPlugin)
20
+ * - Schema功能(withSchemaPlugin)
21
+ * - 代码标签功能(withCodeTagPlugin)
22
+ *
23
+ * 插件按顺序应用,每个插件都会增强编辑器的特定功能。
509
24
  */ export var withMarkdown = function(editor) {
510
- var isInline = editor.isInline, isVoid = editor.isVoid, apply = editor.apply, deleteBackward = editor.deleteBackward, insertText = editor.insertText, insertFragment = editor.insertFragment;
511
- editor.isInline = function(element) {
512
- return inlineNode.has(element.type) || isInline(element);
513
- };
514
- editor.isVoid = function(element) {
515
- return voidNode.has(element.type) || isVoid(element);
516
- };
517
- editor.apply = function(operation) {
518
- var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
519
- try {
520
- // 依次尝试每个处理函数
521
- for(var _iterator = operationHandlers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
522
- var handler = _step.value;
523
- if (handler(editor, operation, apply)) {
524
- return;
525
- }
526
- }
527
- } catch (err) {
528
- _didIteratorError = true;
529
- _iteratorError = err;
530
- } finally{
531
- try {
532
- if (!_iteratorNormalCompletion && _iterator.return != null) {
533
- _iterator.return();
534
- }
535
- } finally{
536
- if (_didIteratorError) {
537
- throw _iteratorError;
538
- }
539
- }
540
- }
541
- // 记录操作前可能涉及的卡片路径,用于操作后检查
542
- var cardPathsToCheck = [];
543
- if (operation.type === 'remove_text' || operation.type === 'insert_text') {
544
- if (operation.path && operation.path.length > 0) {
545
- try {
546
- // 向上查找是否在卡片内
547
- var currentPath = operation.path;
548
- while(currentPath.length > 0){
549
- var node = Node.get(editor, currentPath);
550
- if (node && node.type === 'card') {
551
- cardPathsToCheck.push(currentPath);
552
- break;
553
- }
554
- currentPath = Path.parent(currentPath);
555
- }
556
- } catch (error) {
557
- // 如果无法获取节点,忽略错误
558
- }
559
- }
560
- }
561
- // 执行原始操作
562
- apply(operation);
563
- var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
564
- try {
565
- // 操作执行后,检查涉及的卡片是否变空
566
- for(var _iterator1 = cardPathsToCheck[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
567
- var cardPath = _step1.value;
568
- try {
569
- var cardNode = Node.get(editor, cardPath);
570
- if (cardNode && cardNode.type === 'card' && isCardEmpty(cardNode)) {
571
- Transforms.removeNodes(editor, {
572
- at: cardPath
573
- });
574
- }
575
- } catch (error) {
576
- // 如果节点已被删除或不存在,忽略错误
577
- }
578
- }
579
- } catch (err) {
580
- _didIteratorError1 = true;
581
- _iteratorError1 = err;
582
- } finally{
583
- try {
584
- if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
585
- _iterator1.return();
586
- }
587
- } finally{
588
- if (_didIteratorError1) {
589
- throw _iteratorError1;
590
- }
591
- }
592
- }
593
- };
594
- editor.insertText = function(text) {
595
- var selection = editor.selection;
596
- if (selection && Range.isCollapsed(selection)) {
597
- try {
598
- var node = Node.get(editor, Path.parent(selection.anchor.path));
599
- // card-before 不允许任何文本输入
600
- if (node.type === 'card-before') {
601
- return; // 阻止输入
602
- }
603
- // card-after 的输入会插入到卡片后面的新段落中
604
- if (node.type === 'card-after') {
605
- var grandParentPath = Path.parent(Path.parent(selection.anchor.path));
606
- var grandParent = Node.get(editor, grandParentPath);
607
- if (grandParent.type === 'card') {
608
- Editor.withoutNormalizing(editor, function() {
609
- Transforms.insertNodes(editor, {
610
- type: 'paragraph',
611
- children: [
612
- {
613
- text: text
614
- }
615
- ]
616
- }, {
617
- at: Path.next(grandParentPath)
618
- });
619
- // 选中新创建的段落
620
- var newParagraphPath = Path.next(grandParentPath);
621
- var textPath = _to_consumable_array(newParagraphPath).concat([
622
- 0
623
- ]);
624
- Transforms.select(editor, {
625
- anchor: {
626
- path: textPath,
627
- offset: text.length
628
- },
629
- focus: {
630
- path: textPath,
631
- offset: text.length
632
- }
633
- });
634
- var cardAfterPath = _to_consumable_array(grandParentPath).concat([
635
- 2,
636
- 0
637
- ]);
638
- clearCardAreaText(editor, cardAfterPath);
639
- });
640
- return;
641
- }
642
- }
643
- } catch (error) {
644
- // 如果无法获取节点,继续原有逻辑
645
- }
646
- }
647
- insertText(text);
648
- };
649
- editor.insertFragment = function(fragment) {
650
- var selection = editor.selection;
651
- if (selection && Range.isCollapsed(selection)) {
652
- try {
653
- var node = Node.get(editor, Path.parent(selection.anchor.path));
654
- // card-before 不允许任何片段插入
655
- if (node.type === 'card-before') {
656
- return; // 阻止插入
657
- }
658
- // card-after 的片段插入会放到卡片后面
659
- if (node.type === 'card-after') {
660
- var grandParentPath = Path.parent(Path.parent(selection.anchor.path));
661
- var grandParent = Node.get(editor, grandParentPath);
662
- if (grandParent.type === 'card') {
663
- // 将片段内容插入到卡片后面
664
- Transforms.insertNodes(editor, fragment, {
665
- at: Path.next(grandParentPath),
666
- select: true
667
- });
668
- return;
669
- }
670
- }
671
- } catch (error) {
672
- // 如果无法获取节点,继续原有逻辑
673
- }
674
- }
675
- insertFragment(fragment);
676
- };
677
- editor.deleteBackward = function(unit) {
678
- var selection = editor.selection;
679
- if (selection && hasRange(editor, selection) && Range.isCollapsed(selection)) {
680
- var node = Node.get(editor, Path.parent(selection.anchor.path));
681
- if (node.type === 'card-before') {
682
- return;
683
- }
684
- if (node.type === 'card-after') {
685
- Transforms.removeNodes(editor, {
686
- at: Path.parent(selection.anchor.path)
687
- });
688
- return;
689
- }
690
- var curNode = Node.get(editor, selection.anchor.path);
691
- // 检查前一个节点是否是 tag
692
- try {
693
- var _ref = _sliced_to_array(Editor.previous(editor, {
694
- at: selection.anchor.path
695
- }) || [], 2), previousNode = _ref[0], previousPath = _ref[1];
696
- var isBeforeTag = selection && selection.anchor.offset <= 1;
697
- if ((previousNode === null || previousNode === void 0 ? void 0 : previousNode.tag) && previousPath && isBeforeTag) {
698
- var _curNode_text, _curNode_text1;
699
- // 如果当前节点不为空,且只有一个文本
700
- if (((_curNode_text = curNode.text) === null || _curNode_text === void 0 ? void 0 : _curNode_text.trim()) && curNode.text.trimEnd().length === 1 && selection.anchor.offset > 0) {
701
- Transforms.insertText(editor, '', {
702
- at: selection.anchor.path
703
- });
704
- Transforms.insertNodes(editor, {
705
- type: 'paragraph',
706
- children: [
707
- {
708
- text: ' '
709
- }
710
- ]
711
- }, {
712
- at: selection.anchor.path,
713
- select: true
714
- });
715
- return;
716
- } else if (((_curNode_text1 = curNode.text) === null || _curNode_text1 === void 0 ? void 0 : _curNode_text1.trim()) && selection.anchor.offset > 0) {
717
- deleteBackward(unit);
718
- return;
719
- }
720
- // 如果前一个节点是 tag,直接删除整个 tag
721
- Editor.withoutNormalizing(editor, function() {
722
- var parent = Node.get(editor, Path.parent(previousPath));
723
- var index = previousPath[previousPath.length - 1];
724
- if (parent.children.length === 1) {
725
- // 如果是唯一的节点,转换为普通文本
726
- Transforms.setNodes(editor, {
727
- tag: false,
728
- code: false,
729
- text: ' ',
730
- triggerText: undefined
731
- }, {
732
- at: previousPath
733
- });
734
- } else if (index === 0) {
735
- // 如果是第一个节点,删除并合并下一个节点
736
- Transforms.removeNodes(editor, {
737
- at: previousPath
738
- });
739
- } else {
740
- // 如果是中间或最后节点,先合并再删除
741
- Transforms.removeNodes(editor, {
742
- at: previousPath
743
- });
744
- }
745
- });
746
- return;
747
- }
748
- } catch (error) {
749
- // 如果获取前一个节点失败,继续执行原始删除操作
750
- }
751
- try {
752
- var _node_text_trim, _node_text, _selection_anchor;
753
- var node1 = Node.get(editor, selection.anchor.path);
754
- if ((node1 === null || node1 === void 0 ? void 0 : node1.tag) && (node1 === null || node1 === void 0 ? void 0 : (_node_text = node1.text) === null || _node_text === void 0 ? void 0 : (_node_text_trim = _node_text.trim()) === null || _node_text_trim === void 0 ? void 0 : _node_text_trim.length) < 1 && (selection === null || selection === void 0 ? void 0 : (_selection_anchor = selection.anchor) === null || _selection_anchor === void 0 ? void 0 : _selection_anchor.offset) < 1) {
755
- var _node_text1;
756
- var text = node1 === null || node1 === void 0 ? void 0 : (_node_text1 = node1.text) === null || _node_text1 === void 0 ? void 0 : _node_text1.replace(node1.triggerText || '', '');
757
- Transforms.setNodes(editor, {
758
- tag: false,
759
- code: false
760
- }, {
761
- at: selection.anchor.path
762
- });
763
- Transforms.insertText(editor, text, {
764
- at: selection.anchor.path
765
- });
766
- return;
767
- }
768
- } catch (unused) {}
769
- }
770
- deleteBackward(unit);
771
- };
772
- return editor;
25
+ return withCodeTagPlugin(withSchemaPlugin(withLinkAndMediaPlugin(withCardPlugin(withListsPlugin(withVoidNodes(withInlineNodes(editor)))))));
773
26
  };