@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
@@ -262,35 +262,55 @@ export var ELEMENT_TAGS = {
262
262
  type: 'blockquote'
263
263
  };
264
264
  },
265
- H1: function() {
266
- return {
265
+ H1: function(el) {
266
+ var _el_style;
267
+ var align = (el && typeof el.getAttribute === 'function' ? el.getAttribute('align') : null) || (el === null || el === void 0 ? void 0 : (_el_style = el.style) === null || _el_style === void 0 ? void 0 : _el_style.textAlign) || (el && typeof el.getAttribute === 'function' ? el.getAttribute('data-align') : null);
268
+ return _object_spread({
267
269
  type: 'head',
268
270
  level: 1
269
- };
271
+ }, align ? {
272
+ align: align
273
+ } : {});
270
274
  },
271
- H2: function() {
272
- return {
275
+ H2: function(el) {
276
+ var _el_style;
277
+ var align = (el && typeof el.getAttribute === 'function' ? el.getAttribute('align') : null) || (el === null || el === void 0 ? void 0 : (_el_style = el.style) === null || _el_style === void 0 ? void 0 : _el_style.textAlign) || (el && typeof el.getAttribute === 'function' ? el.getAttribute('data-align') : null);
278
+ return _object_spread({
273
279
  type: 'head',
274
280
  level: 2
275
- };
281
+ }, align ? {
282
+ align: align
283
+ } : {});
276
284
  },
277
- H3: function() {
278
- return {
285
+ H3: function(el) {
286
+ var _el_style;
287
+ var align = (el && typeof el.getAttribute === 'function' ? el.getAttribute('align') : null) || (el === null || el === void 0 ? void 0 : (_el_style = el.style) === null || _el_style === void 0 ? void 0 : _el_style.textAlign) || (el && typeof el.getAttribute === 'function' ? el.getAttribute('data-align') : null);
288
+ return _object_spread({
279
289
  type: 'head',
280
290
  level: 3
281
- };
291
+ }, align ? {
292
+ align: align
293
+ } : {});
282
294
  },
283
- H4: function() {
284
- return {
295
+ H4: function(el) {
296
+ var _el_style;
297
+ var align = (el && typeof el.getAttribute === 'function' ? el.getAttribute('align') : null) || (el === null || el === void 0 ? void 0 : (_el_style = el.style) === null || _el_style === void 0 ? void 0 : _el_style.textAlign) || (el && typeof el.getAttribute === 'function' ? el.getAttribute('data-align') : null);
298
+ return _object_spread({
285
299
  type: 'head',
286
300
  level: 4
287
- };
301
+ }, align ? {
302
+ align: align
303
+ } : {});
288
304
  },
289
- H5: function() {
290
- return {
305
+ H5: function(el) {
306
+ var _el_style;
307
+ var align = (el && typeof el.getAttribute === 'function' ? el.getAttribute('align') : null) || (el === null || el === void 0 ? void 0 : (_el_style = el.style) === null || _el_style === void 0 ? void 0 : _el_style.textAlign) || (el && typeof el.getAttribute === 'function' ? el.getAttribute('data-align') : null);
308
+ return _object_spread({
291
309
  type: 'head',
292
310
  level: 5
293
- };
311
+ }, align ? {
312
+ align: align
313
+ } : {});
294
314
  },
295
315
  TABLE: function() {
296
316
  return {
@@ -299,8 +319,8 @@ export var ELEMENT_TAGS = {
299
319
  },
300
320
  IMG: function(el) {
301
321
  // 添加更严格的图片URL验证,避免将普通URL误识别为图片
302
- var src = el.src;
303
- var alt = el.alt;
322
+ var src = el === null || el === void 0 ? void 0 : el.src;
323
+ var alt = el === null || el === void 0 ? void 0 : el.alt;
304
324
  // 检查是否为有效的图片URL
305
325
  var isValidImageUrl = function(url) {
306
326
  if (!url) return false;
@@ -386,10 +406,14 @@ export var ELEMENT_TAGS = {
386
406
  order: true
387
407
  };
388
408
  },
389
- P: function() {
390
- return {
409
+ P: function(el) {
410
+ var _el_style;
411
+ var align = (el && typeof el.getAttribute === 'function' ? el.getAttribute('align') : null) || (el === null || el === void 0 ? void 0 : (_el_style = el.style) === null || _el_style === void 0 ? void 0 : _el_style.textAlign) || (el && typeof el.getAttribute === 'function' ? el.getAttribute('data-align') : null);
412
+ return _object_spread({
391
413
  type: 'paragraph'
392
- };
414
+ }, align ? {
415
+ align: align
416
+ } : {});
393
417
  },
394
418
  PRE: function() {
395
419
  return {
@@ -398,14 +422,14 @@ export var ELEMENT_TAGS = {
398
422
  },
399
423
  UL: function() {
400
424
  return {
401
- type: 'list'
425
+ type: 'bulleted-list'
402
426
  };
403
427
  }
404
428
  };
405
429
  export var TEXT_TAGS = {
406
430
  A: function(el) {
407
431
  return {
408
- url: el.getAttribute('href')
432
+ url: el && typeof el.getAttribute === 'function' ? el.getAttribute('href') : null
409
433
  };
410
434
  },
411
435
  CODE: function() {
@@ -420,7 +444,7 @@ export var TEXT_TAGS = {
420
444
  },
421
445
  SPAN: function(el) {
422
446
  return {
423
- text: el.textContent
447
+ text: el === null || el === void 0 ? void 0 : el.textContent
424
448
  };
425
449
  },
426
450
  DEL: function() {
@@ -456,24 +480,24 @@ export var TEXT_TAGS = {
456
480
  };
457
481
  export var deserialize = function(el) {
458
482
  var parentTag = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : '';
459
- if (el.nodeName.toLowerCase() === 'script') return [];
460
- if (el.nodeName.toLowerCase() === 'style') return [];
461
- if (el.nodeName.toLowerCase() === 'meta') return [];
462
- if (el.nodeName.toLowerCase() === 'link') return [];
463
- if (el.nodeName.toLowerCase() === 'head') return [];
464
- if (el.nodeName.toLowerCase() === 'colgroup') return [];
465
- if (el.nodeName.toLowerCase() === 'noscript') return [];
466
- if (el.nodeType === 3) {
467
- return el.textContent;
468
- } else if (el.nodeType !== 1) {
483
+ if ((el === null || el === void 0 ? void 0 : el.nodeName.toLowerCase()) === 'script') return [];
484
+ if ((el === null || el === void 0 ? void 0 : el.nodeName.toLowerCase()) === 'style') return [];
485
+ if ((el === null || el === void 0 ? void 0 : el.nodeName.toLowerCase()) === 'meta') return [];
486
+ if ((el === null || el === void 0 ? void 0 : el.nodeName.toLowerCase()) === 'link') return [];
487
+ if ((el === null || el === void 0 ? void 0 : el.nodeName.toLowerCase()) === 'head') return [];
488
+ if ((el === null || el === void 0 ? void 0 : el.nodeName.toLowerCase()) === 'colgroup') return [];
489
+ if ((el === null || el === void 0 ? void 0 : el.nodeName.toLowerCase()) === 'noscript') return [];
490
+ if ((el === null || el === void 0 ? void 0 : el.nodeType) === 3) {
491
+ return el === null || el === void 0 ? void 0 : el.textContent;
492
+ } else if ((el === null || el === void 0 ? void 0 : el.nodeType) !== 1) {
469
493
  return null;
470
- } else if (el.nodeName === 'BR') {
494
+ } else if ((el === null || el === void 0 ? void 0 : el.nodeName) === 'BR') {
471
495
  return '\n';
472
496
  }
473
497
  var nodeName = el.nodeName;
474
498
  var target = el;
475
- if (nodeName === 'PRE' && el.childNodes[0] && el.childNodes[0].nodeName === 'CODE') {
476
- target = el.childNodes[0];
499
+ if (nodeName === 'PRE' && (el === null || el === void 0 ? void 0 : el.childNodes[0]) && (el === null || el === void 0 ? void 0 : el.childNodes[0].nodeName) === 'CODE') {
500
+ target = el === null || el === void 0 ? void 0 : el.childNodes[0];
477
501
  }
478
502
  var children = Array.from(target.childNodes).map(function(n) {
479
503
  return deserialize(n, target.nodeName.toLowerCase().toLowerCase());
@@ -481,14 +505,14 @@ export var deserialize = function(el) {
481
505
  if (children.length === 0) {
482
506
  children = [
483
507
  {
484
- text: el.textContent || ''
508
+ text: (el === null || el === void 0 ? void 0 : el.textContent) || ''
485
509
  }
486
510
  ];
487
511
  }
488
- if (fragment.has(el.nodeName.toLowerCase())) {
512
+ if (fragment.has(el === null || el === void 0 ? void 0 : el.nodeName.toLowerCase())) {
489
513
  return jsx('fragment', {}, children);
490
514
  }
491
- if (TEXT_TAGS[nodeName] && Array.from(el.childNodes).some(function(e) {
515
+ if (TEXT_TAGS[nodeName] && Array.from(el === null || el === void 0 ? void 0 : el.childNodes).some(function(e) {
492
516
  return e.nodeType !== 3 && !TEXT_TAGS[e.nodeName];
493
517
  })) {
494
518
  return jsx('fragment', {}, children);
@@ -556,8 +580,9 @@ export var deserialize = function(el) {
556
580
  return children;
557
581
  };
558
582
  var parserCodeText = function(el) {
559
- el.innerHTML = el.innerHTML.replace(/<br\/?>|<\/div>(?=\S)/g, '\n');
560
- return el.innerText;
583
+ if (!el) return '';
584
+ el.innerHTML = el === null || el === void 0 ? void 0 : el.innerHTML.replace(/<br\/?>|<\/div>(?=\S)/g, '\n');
585
+ return el === null || el === void 0 ? void 0 : el.innerText;
561
586
  };
562
587
  var getTextsNode = function(nodes) {
563
588
  var text = [];
@@ -1143,7 +1168,7 @@ export var insertParsedHtmlNodes = function(editor, html, editorProps, rtl) {
1143
1168
  true
1144
1169
  ];
1145
1170
  }
1146
- if (!((node === null || node === void 0 ? void 0 : node[0].type) === 'list-item' && fragmentList[0].type === 'list')) return [
1171
+ if (!((node === null || node === void 0 ? void 0 : node[0].type) === 'list-item' && (fragmentList[0].type === 'list' || fragmentList[0].type === 'bulleted-list' || fragmentList[0].type === 'numbered-list'))) return [
1147
1172
  3,
1148
1173
  12
1149
1174
  ];
@@ -0,0 +1,31 @@
1
+ import { Editor, Path } from 'slate';
2
+ /**
3
+ * 行内节点类型集合
4
+ */
5
+ export declare const inlineNode: Set<string>;
6
+ /**
7
+ * 空节点类型集合
8
+ */
9
+ export declare const voidNode: Set<string>;
10
+ /**
11
+ * 检查编辑器是否包含有效的范围
12
+ * @param editor - Slate编辑器实例
13
+ * @param range - 要检查的范围
14
+ * @returns 如果范围有效则返回true
15
+ */
16
+ export declare function hasRange(editor: Editor, range: {
17
+ anchor: any;
18
+ focus: any;
19
+ }): boolean;
20
+ /**
21
+ * 清空卡片区域的文本内容 - 使用零宽字符替换
22
+ * @param editor - Slate编辑器实例
23
+ * @param path - 要清空的节点路径
24
+ */
25
+ export declare const clearCardAreaText: (editor: Editor, path: Path) => void;
26
+ /**
27
+ * 检查卡片是否为空
28
+ * @param cardNode - 卡片节点
29
+ * @returns 如果卡片为空则返回true
30
+ */
31
+ export declare const isCardEmpty: (cardNode: any) => boolean;
@@ -0,0 +1,75 @@
1
+ import { Editor, Node } from "slate";
2
+ import { ReactEditor } from "slate-react";
3
+ /**
4
+ * 行内节点类型集合
5
+ */ export var inlineNode = new Set([
6
+ 'break',
7
+ 'inline-katex'
8
+ ]);
9
+ /**
10
+ * 空节点类型集合
11
+ */ export var voidNode = new Set([
12
+ 'hr',
13
+ 'break'
14
+ ]);
15
+ /**
16
+ * 检查编辑器是否包含有效的范围
17
+ * @param editor - Slate编辑器实例
18
+ * @param range - 要检查的范围
19
+ * @returns 如果范围有效则返回true
20
+ */ export function hasRange(editor, range) {
21
+ var anchor = range.anchor, focus = range.focus;
22
+ return Editor.hasPath(editor, anchor.path) && Editor.hasPath(editor, focus.path);
23
+ }
24
+ /**
25
+ * 清空卡片区域的文本内容 - 使用零宽字符替换
26
+ * @param editor - Slate编辑器实例
27
+ * @param path - 要清空的节点路径
28
+ */ export var clearCardAreaText = function(editor, path) {
29
+ try {
30
+ var node = Node.get(editor, path);
31
+ if (node) {
32
+ // 尝试直接DOM操作,设置为零宽字符
33
+ try {
34
+ var domNode = ReactEditor.toDOMNode(editor, node);
35
+ if (domNode) {
36
+ var zeroWidthNode = domNode === null || domNode === void 0 ? void 0 : domNode.querySelector('[data-slate-zero-width]');
37
+ if (zeroWidthNode) {
38
+ zeroWidthNode.textContent = '\uFEFF';
39
+ }
40
+ }
41
+ } catch (domError) {
42
+ // DOM operation failed, falling back to Slate transforms
43
+ }
44
+ }
45
+ } catch (error) {
46
+ // 如果操作失败,忽略错误
47
+ }
48
+ };
49
+ /**
50
+ * 检查卡片是否为空
51
+ * @param cardNode - 卡片节点
52
+ * @returns 如果卡片为空则返回true
53
+ */ export var isCardEmpty = function(cardNode) {
54
+ if (!cardNode || cardNode.type !== 'card' || !cardNode.children) {
55
+ return false;
56
+ }
57
+ // 查找实际内容节点(非card-before和card-after的节点)
58
+ var contentNodes = cardNode.children.filter(function(child) {
59
+ return child.type !== 'card-before' && child.type !== 'card-after';
60
+ });
61
+ // 如果没有内容节点,则为空
62
+ if (contentNodes.length === 0) {
63
+ return true;
64
+ }
65
+ // 检查内容节点是否为空
66
+ return contentNodes.every(function(node) {
67
+ if (!node.children || node.children.length === 0) {
68
+ return true;
69
+ }
70
+ // 检查是否只包含空文本
71
+ return node.children.every(function(child) {
72
+ return child.text === '' || child.text && child.text.trim() === '';
73
+ });
74
+ });
75
+ };
@@ -0,0 +1,15 @@
1
+ import { Editor } from 'slate';
2
+ /**
3
+ * 扩展编辑器以处理卡片节点的操作和行为
4
+ *
5
+ * @param editor - 要扩展的Slate编辑器实例
6
+ * @returns 增强后的编辑器实例,能够处理卡片相关操作
7
+ *
8
+ * @description
9
+ * 该插件重写编辑器的 `apply`、`insertText`、`insertFragment` 和 `deleteBackward` 方法,
10
+ * 添加对卡片节点的特殊处理逻辑,包括:
11
+ * - 卡片节点的删除、插入和文本操作
12
+ * - 卡片空检查逻辑
13
+ * - 卡片区域的文本和片段插入处理
14
+ */
15
+ export declare const withCardPlugin: (editor: Editor) => import("slate").BaseEditor & import("slate-react").ReactEditor & import("slate-history").HistoryEditor;
@@ -0,0 +1,329 @@
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_without_holes(arr) {
7
+ if (Array.isArray(arr)) return _array_like_to_array(arr);
8
+ }
9
+ function _iterable_to_array(iter) {
10
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
11
+ }
12
+ function _non_iterable_spread() {
13
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
14
+ }
15
+ function _to_consumable_array(arr) {
16
+ return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
17
+ }
18
+ function _unsupported_iterable_to_array(o, minLen) {
19
+ if (!o) return;
20
+ if (typeof o === "string") return _array_like_to_array(o, minLen);
21
+ var n = Object.prototype.toString.call(o).slice(8, -1);
22
+ if (n === "Object" && o.constructor) n = o.constructor.name;
23
+ if (n === "Map" || n === "Set") return Array.from(n);
24
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
25
+ }
26
+ import { Editor, Node, Path, Range, Transforms } from "slate";
27
+ import { clearCardAreaText, hasRange, isCardEmpty } from "./utils";
28
+ /**
29
+ * 处理卡片相关节点的操作
30
+ *
31
+ * @param editor - Slate编辑器实例
32
+ * @param operation - 要处理的操作
33
+ * @param apply - 原始的apply函数
34
+ * @returns 如果操作被处理则返回true,否则返回false
35
+ *
36
+ * @description
37
+ * 处理以下卡片相关操作:
38
+ * - 删除卡片节点 (remove_node),包括card、card-before和card-after
39
+ * - 在卡片后插入文本 (insert_text)
40
+ * - 在卡片内插入节点 (insert_node)
41
+ * - 检查并删除空卡片
42
+ */ var handleCardOperation = function(editor, operation, apply) {
43
+ if (operation.type === 'remove_node') {
44
+ var node = operation.node;
45
+ // 删除card时,直接删除整个卡片
46
+ if (node.type === 'card') {
47
+ // 直接执行原始操作,避免递归
48
+ apply(operation);
49
+ return true;
50
+ }
51
+ // 删除card-after时,删除整个卡片
52
+ if (node.type === 'card-after') {
53
+ Transforms.removeNodes(editor, {
54
+ at: Path.parent(operation.path)
55
+ });
56
+ return true;
57
+ }
58
+ // 删除card-before时,阻止操作
59
+ if (node.type === 'card-before') {
60
+ return true;
61
+ }
62
+ // 检查操作后的父级是否为空卡片,如果是则删除
63
+ if (operation.path && operation.path.length > 0) {
64
+ try {
65
+ var parentPath = Path.parent(operation.path);
66
+ var parentNode = Node.get(editor, parentPath);
67
+ if (parentNode && parentNode.type === 'card' && isCardEmpty(parentNode)) {
68
+ Transforms.removeNodes(editor, {
69
+ at: parentPath
70
+ });
71
+ return true;
72
+ }
73
+ } catch (error) {
74
+ // 如果无法获取父节点,忽略错误
75
+ }
76
+ }
77
+ }
78
+ if (operation.type === 'insert_text') {
79
+ try {
80
+ var parentNode1 = Node.get(editor, Path.parent(operation.path));
81
+ // card-before 不允许任何文本输入
82
+ if (parentNode1.type === 'card-before') {
83
+ return true; // 阻止输入
84
+ }
85
+ // card-after 的输入会插入到卡片后面的新段落中
86
+ if (parentNode1.type === 'card-after') {
87
+ try {
88
+ var grandParentPath = Path.parent(Path.parent(operation.path));
89
+ var grandParentNode = Node.get(editor, grandParentPath);
90
+ if (grandParentNode.type === 'card') {
91
+ // 使用 Editor.withoutNormalizing 确保操作的原子性
92
+ Editor.withoutNormalizing(editor, function() {
93
+ // 先创建新段落
94
+ Transforms.insertNodes(editor, {
95
+ type: 'paragraph',
96
+ children: [
97
+ {
98
+ text: operation.text
99
+ }
100
+ ]
101
+ }, {
102
+ at: Path.next(grandParentPath)
103
+ });
104
+ // 然后选中新创建的段落
105
+ var newParagraphPath = Path.next(grandParentPath);
106
+ var textPath = _to_consumable_array(newParagraphPath).concat([
107
+ 0
108
+ ]);
109
+ Transforms.select(editor, {
110
+ anchor: {
111
+ path: textPath,
112
+ offset: operation.text.length
113
+ },
114
+ focus: {
115
+ path: textPath,
116
+ offset: operation.text.length
117
+ }
118
+ });
119
+ clearCardAreaText(editor, operation.path);
120
+ });
121
+ return true;
122
+ }
123
+ } catch (error) {
124
+ // 如果获取父级节点失败,继续阻止输入
125
+ }
126
+ return true;
127
+ }
128
+ } catch (error) {
129
+ // 如果无法获取父节点,允许操作继续
130
+ }
131
+ }
132
+ if (operation.type === 'insert_node') {
133
+ var parentNode2 = Node.get(editor, Path.parent(operation.path));
134
+ // card-before 不允许任何节点插入
135
+ if (parentNode2.type === 'card-before') {
136
+ return true; // 阻止插入
137
+ }
138
+ // card-after 的节点插入会放到卡片后面
139
+ if (parentNode2.type === 'card-after') {
140
+ if (Node.get(editor, Path.parent(Path.parent(operation.path))).type === 'card') {
141
+ var cardPath = Path.parent(Path.parent(operation.path));
142
+ Transforms.insertNodes(editor, operation.node, {
143
+ at: Path.next(cardPath)
144
+ });
145
+ return true;
146
+ }
147
+ Transforms.insertNodes(editor, operation.node, {
148
+ at: Path.parent(operation.path)
149
+ });
150
+ return true;
151
+ }
152
+ }
153
+ // 对于删除文本操作,我们需要在操作执行后检查卡片是否变空
154
+ // 这将在 editor.apply 的最后处理
155
+ return false;
156
+ };
157
+ /**
158
+ * 扩展编辑器以处理卡片节点的操作和行为
159
+ *
160
+ * @param editor - 要扩展的Slate编辑器实例
161
+ * @returns 增强后的编辑器实例,能够处理卡片相关操作
162
+ *
163
+ * @description
164
+ * 该插件重写编辑器的 `apply`、`insertText`、`insertFragment` 和 `deleteBackward` 方法,
165
+ * 添加对卡片节点的特殊处理逻辑,包括:
166
+ * - 卡片节点的删除、插入和文本操作
167
+ * - 卡片空检查逻辑
168
+ * - 卡片区域的文本和片段插入处理
169
+ */ export var withCardPlugin = function(editor) {
170
+ var apply = editor.apply, insertText = editor.insertText, insertFragment = editor.insertFragment, deleteBackward = editor.deleteBackward;
171
+ editor.apply = function(operation) {
172
+ // 尝试处理卡片相关操作
173
+ if (handleCardOperation(editor, operation, apply)) {
174
+ return;
175
+ }
176
+ // 记录操作前可能涉及的卡片路径,用于操作后检查
177
+ var cardPathsToCheck = [];
178
+ if (operation.type === 'remove_text' || operation.type === 'insert_text') {
179
+ if (operation.path && operation.path.length > 0) {
180
+ try {
181
+ // 向上查找是否在卡片内
182
+ var currentPath = operation.path;
183
+ while(currentPath.length > 0){
184
+ var node = Node.get(editor, currentPath);
185
+ if (node && node.type === 'card') {
186
+ cardPathsToCheck.push(currentPath);
187
+ break;
188
+ }
189
+ currentPath = Path.parent(currentPath);
190
+ }
191
+ } catch (error) {
192
+ // 如果无法获取节点,忽略错误
193
+ }
194
+ }
195
+ }
196
+ // 执行原始操作
197
+ apply(operation);
198
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
199
+ try {
200
+ // 操作执行后,检查涉及的卡片是否变空
201
+ for(var _iterator = cardPathsToCheck[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
202
+ var cardPath = _step.value;
203
+ try {
204
+ var cardNode = Node.get(editor, cardPath);
205
+ if (cardNode && cardNode.type === 'card' && isCardEmpty(cardNode)) {
206
+ Transforms.removeNodes(editor, {
207
+ at: cardPath
208
+ });
209
+ }
210
+ } catch (error) {
211
+ // 如果节点已被删除或不存在,忽略错误
212
+ }
213
+ }
214
+ } catch (err) {
215
+ _didIteratorError = true;
216
+ _iteratorError = err;
217
+ } finally{
218
+ try {
219
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
220
+ _iterator.return();
221
+ }
222
+ } finally{
223
+ if (_didIteratorError) {
224
+ throw _iteratorError;
225
+ }
226
+ }
227
+ }
228
+ };
229
+ editor.insertText = function(text) {
230
+ var selection = editor.selection;
231
+ if (selection && Range.isCollapsed(selection)) {
232
+ try {
233
+ var node = Node.get(editor, Path.parent(selection.anchor.path));
234
+ // card-before 不允许任何文本输入
235
+ if (node.type === 'card-before') {
236
+ return; // 阻止输入
237
+ }
238
+ // card-after 的输入会插入到卡片后面的新段落中
239
+ if (node.type === 'card-after') {
240
+ var grandParentPath = Path.parent(Path.parent(selection.anchor.path));
241
+ var grandParent = Node.get(editor, grandParentPath);
242
+ if (grandParent.type === 'card') {
243
+ Editor.withoutNormalizing(editor, function() {
244
+ Transforms.insertNodes(editor, {
245
+ type: 'paragraph',
246
+ children: [
247
+ {
248
+ text: text
249
+ }
250
+ ]
251
+ }, {
252
+ at: Path.next(grandParentPath)
253
+ });
254
+ // 选中新创建的段落
255
+ var newParagraphPath = Path.next(grandParentPath);
256
+ var textPath = _to_consumable_array(newParagraphPath).concat([
257
+ 0
258
+ ]);
259
+ Transforms.select(editor, {
260
+ anchor: {
261
+ path: textPath,
262
+ offset: text.length
263
+ },
264
+ focus: {
265
+ path: textPath,
266
+ offset: text.length
267
+ }
268
+ });
269
+ var cardAfterPath = _to_consumable_array(grandParentPath).concat([
270
+ 2,
271
+ 0
272
+ ]);
273
+ clearCardAreaText(editor, cardAfterPath);
274
+ });
275
+ return;
276
+ }
277
+ }
278
+ } catch (error) {
279
+ // 如果无法获取节点,继续原有逻辑
280
+ }
281
+ }
282
+ insertText(text);
283
+ };
284
+ editor.insertFragment = function(fragment) {
285
+ var selection = editor.selection;
286
+ if (selection && Range.isCollapsed(selection)) {
287
+ try {
288
+ var node = Node.get(editor, Path.parent(selection.anchor.path));
289
+ // card-before 不允许任何片段插入
290
+ if (node.type === 'card-before') {
291
+ return; // 阻止插入
292
+ }
293
+ // card-after 的片段插入会放到卡片后面
294
+ if (node.type === 'card-after') {
295
+ var grandParentPath = Path.parent(Path.parent(selection.anchor.path));
296
+ var grandParent = Node.get(editor, grandParentPath);
297
+ if (grandParent.type === 'card') {
298
+ // 将片段内容插入到卡片后面
299
+ Transforms.insertNodes(editor, fragment, {
300
+ at: Path.next(grandParentPath),
301
+ select: true
302
+ });
303
+ return;
304
+ }
305
+ }
306
+ } catch (error) {
307
+ // 如果无法获取节点,继续原有逻辑
308
+ }
309
+ }
310
+ insertFragment(fragment);
311
+ };
312
+ editor.deleteBackward = function(unit) {
313
+ var selection = editor.selection;
314
+ if (selection && hasRange(editor, selection) && Range.isCollapsed(selection)) {
315
+ var node = Node.get(editor, Path.parent(selection.anchor.path));
316
+ if (node.type === 'card-before') {
317
+ return;
318
+ }
319
+ if (node.type === 'card-after') {
320
+ Transforms.removeNodes(editor, {
321
+ at: Path.parent(selection.anchor.path)
322
+ });
323
+ return;
324
+ }
325
+ }
326
+ deleteBackward(unit);
327
+ };
328
+ return editor;
329
+ };
@@ -0,0 +1,11 @@
1
+ import { Editor } from 'slate';
2
+ /**
3
+ * 扩展编辑器以处理代码和标签节点的操作
4
+ *
5
+ * @param editor - 要扩展的Slate编辑器实例
6
+ * @returns 增强后的编辑器实例,能够处理代码和标签相关操作
7
+ *
8
+ * @description
9
+ * 该插件重写编辑器的 `apply` 和 `deleteBackward` 方法,添加对代码和标签节点的特殊处理逻辑。
10
+ */
11
+ export declare const withCodeTagPlugin: (editor: Editor) => import("slate").BaseEditor & import("slate-react").ReactEditor & import("slate-history").HistoryEditor;