@ant-design/agentic-ui 2.30.21 → 2.30.23

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 (107) hide show
  1. package/dist/Bubble/MessagesContent/MarkdownPreview.d.ts +0 -58
  2. package/dist/Bubble/MessagesContent/MarkdownPreview.js +79 -155
  3. package/dist/Bubble/OpenAIMessageBubble/index.d.ts +11 -0
  4. package/dist/Bubble/OpenAIMessageBubble/index.js +8 -0
  5. package/dist/Bubble/OpenAIMessageBubble/mapOllamaMessages.d.ts +7 -0
  6. package/dist/Bubble/OpenAIMessageBubble/mapOllamaMessages.js +136 -0
  7. package/dist/Bubble/OpenAIMessageBubble/mapOpenAIMessages.d.ts +8 -0
  8. package/dist/Bubble/OpenAIMessageBubble/mapOpenAIMessages.js +156 -0
  9. package/dist/Bubble/OpenAIMessageBubble/mapOpenClawMessages.d.ts +8 -0
  10. package/dist/Bubble/OpenAIMessageBubble/mapOpenClawMessages.js +127 -0
  11. package/dist/Bubble/OpenAIMessageBubble/normalizeOllamaMessages.d.ts +16 -0
  12. package/dist/Bubble/OpenAIMessageBubble/normalizeOllamaMessages.js +110 -0
  13. package/dist/Bubble/OpenAIMessageBubble/normalizeOpenClawMessages.d.ts +10 -0
  14. package/dist/Bubble/OpenAIMessageBubble/normalizeOpenClawMessages.js +61 -0
  15. package/dist/Bubble/OpenAIMessageBubble/ollamaTypes.d.ts +48 -0
  16. package/dist/Bubble/OpenAIMessageBubble/ollamaTypes.js +1 -0
  17. package/dist/Bubble/OpenAIMessageBubble/openClawTypes.d.ts +27 -0
  18. package/dist/Bubble/OpenAIMessageBubble/openClawTypes.js +1 -0
  19. package/dist/Bubble/OpenAIMessageBubble/types.d.ts +71 -0
  20. package/dist/Bubble/OpenAIMessageBubble/types.js +1 -0
  21. package/dist/Bubble/OpenAIMessageBubble/useOllamaMessageBubbleData.d.ts +7 -0
  22. package/dist/Bubble/OpenAIMessageBubble/useOllamaMessageBubbleData.js +23 -0
  23. package/dist/Bubble/OpenAIMessageBubble/useOpenAIMessageBubbleData.d.ts +6 -0
  24. package/dist/Bubble/OpenAIMessageBubble/useOpenAIMessageBubbleData.js +20 -0
  25. package/dist/Bubble/OpenAIMessageBubble/useOpenClawMessageBubbleData.d.ts +7 -0
  26. package/dist/Bubble/OpenAIMessageBubble/useOpenClawMessageBubbleData.js +22 -0
  27. package/dist/Bubble/index.d.ts +2 -0
  28. package/dist/Bubble/index.js +1 -0
  29. package/dist/Hooks/useAutoScroll.js +6 -4
  30. package/dist/MarkdownEditor/BaseMarkdownEditor.d.ts +1 -50
  31. package/dist/MarkdownEditor/BaseMarkdownEditor.js +11 -55
  32. package/dist/MarkdownEditor/editor/Editor.js +35 -21
  33. package/dist/MarkdownEditor/editor/elements/Code/index.js +1 -0
  34. package/dist/MarkdownEditor/editor/elements/Table/SimpleTable.js +5 -1
  35. package/dist/MarkdownEditor/editor/elements/Table/commands/tableCommands.js +24 -8
  36. package/dist/MarkdownEditor/editor/elements/index.js +18 -14
  37. package/dist/MarkdownEditor/editor/plugins/elements.d.ts +2 -0
  38. package/dist/MarkdownEditor/editor/plugins/elements.js +4 -2
  39. package/dist/MarkdownEditor/editor/plugins/handlePaste.js +46 -35
  40. package/dist/MarkdownEditor/editor/plugins/hotKeyCommands/backspace.js +133 -133
  41. package/dist/MarkdownEditor/editor/plugins/hotKeyCommands/enter.js +156 -140
  42. package/dist/MarkdownEditor/editor/plugins/hotKeyCommands/match.d.ts +2 -1
  43. package/dist/MarkdownEditor/editor/plugins/hotKeyCommands/match.js +23 -4
  44. package/dist/MarkdownEditor/editor/plugins/hotKeyCommands/tab.js +40 -36
  45. package/dist/MarkdownEditor/editor/plugins/useKeyboard.js +46 -44
  46. package/dist/MarkdownEditor/editor/plugins/withCodeTagPlugin.js +1 -13
  47. package/dist/MarkdownEditor/editor/store.d.ts +15 -1
  48. package/dist/MarkdownEditor/editor/store.js +45 -34
  49. package/dist/MarkdownEditor/editor/tools/InsertAutocomplete.js +15 -11
  50. package/dist/MarkdownEditor/editor/utils/editorCommands.js +98 -17
  51. package/dist/MarkdownEditor/editor/utils/editorUtils.d.ts +11 -0
  52. package/dist/MarkdownEditor/editor/utils/editorUtils.js +43 -6
  53. package/dist/MarkdownEditor/editor/utils/keyboard.js +14 -12
  54. package/dist/MarkdownEditor/types.d.ts +36 -414
  55. package/dist/MarkdownEditor/types.js +1 -4
  56. package/dist/MarkdownInputField/AttachmentButton/AttachmentFileList/AttachmentFileListItem.d.ts +1 -1
  57. package/dist/MarkdownInputField/AttachmentButton/AttachmentFileList/AttachmentFileListItem.js +4 -5
  58. package/dist/MarkdownInputField/AttachmentButton/AttachmentFileList/index.d.ts +1 -1
  59. package/dist/MarkdownInputField/AttachmentButton/index.d.ts +1 -1
  60. package/dist/MarkdownInputField/MarkdownInputField.js +8 -1
  61. package/dist/MarkdownInputField/SendActions/index.js +7 -4
  62. package/dist/MarkdownInputField/SendButton/index.d.ts +6 -0
  63. package/dist/MarkdownInputField/SendButton/index.js +6 -0
  64. package/dist/MarkdownInputField/hooks/useMarkdownInputFieldHandlers.d.ts +2 -1
  65. package/dist/MarkdownInputField/hooks/useMarkdownInputFieldHandlers.js +12 -3
  66. package/dist/MarkdownInputField/hooks/useMarkdownInputFieldRefs.d.ts +1 -0
  67. package/dist/MarkdownInputField/hooks/useMarkdownInputFieldRefs.js +36 -5
  68. package/dist/MarkdownInputField/utils/renderHelpers.js +5 -0
  69. package/dist/MarkdownRenderer/AnimationText.d.ts +1 -5
  70. package/dist/MarkdownRenderer/AnimationText.js +2 -8
  71. package/dist/MarkdownRenderer/CharacterQueue.d.ts +0 -2
  72. package/dist/MarkdownRenderer/CharacterQueue.js +2 -2
  73. package/dist/MarkdownRenderer/FncRefForMarkdown.d.ts +24 -0
  74. package/dist/MarkdownRenderer/FncRefForMarkdown.js +65 -0
  75. package/dist/MarkdownRenderer/MarkdownRenderer.d.ts +1 -9
  76. package/dist/MarkdownRenderer/MarkdownRenderer.js +25 -18
  77. package/dist/MarkdownRenderer/StreamingCursor.d.ts +4 -0
  78. package/dist/MarkdownRenderer/StreamingCursor.js +20 -0
  79. package/dist/MarkdownRenderer/extractFootnoteDefinitions.d.ts +13 -0
  80. package/dist/MarkdownRenderer/extractFootnoteDefinitions.js +40 -0
  81. package/dist/MarkdownRenderer/markdownReactShared.d.ts +11 -38
  82. package/dist/MarkdownRenderer/markdownReactShared.js +28 -54
  83. package/dist/MarkdownRenderer/renderers/ChartRenderer.js +9 -1
  84. package/dist/MarkdownRenderer/renderers/CodeRenderer.d.ts +4 -1
  85. package/dist/MarkdownRenderer/renderers/CodeRenderer.js +27 -3
  86. package/dist/MarkdownRenderer/renderers/SchemaRenderer.d.ts +2 -0
  87. package/dist/MarkdownRenderer/renderers/SchemaRenderer.js +33 -5
  88. package/dist/MarkdownRenderer/streaming/MarkdownBlockPiece.d.ts +1 -3
  89. package/dist/MarkdownRenderer/streaming/MarkdownBlockPiece.js +16 -28
  90. package/dist/MarkdownRenderer/streaming/useStreamingMarkdownReact.js +2 -1
  91. package/dist/MarkdownRenderer/style.js +18 -0
  92. package/dist/MarkdownRenderer/types.d.ts +17 -93
  93. package/dist/MarkdownRenderer/useMarkdownToReact.js +1 -1
  94. package/dist/MarkdownRenderer/useStreaming.d.ts +1 -10
  95. package/dist/MarkdownRenderer/useStreaming.js +5 -13
  96. package/dist/Plugins/mermaid/MermaidRendererImpl.js +481 -7
  97. package/dist/Plugins/mermaid/style.js +71 -22
  98. package/dist/Plugins/mermaid/useMermaidRender.d.ts +2 -1
  99. package/dist/Plugins/mermaid/useMermaidRender.js +41 -13
  100. package/dist/Plugins/mermaid/utils.d.ts +16 -0
  101. package/dist/Plugins/mermaid/utils.js +197 -5
  102. package/dist/ThoughtChainList/MarkdownEditor.d.ts +1 -35
  103. package/dist/ThoughtChainList/MarkdownEditor.js +5 -44
  104. package/dist/Workspace/Browser/index.js +19 -1
  105. package/dist/Workspace/RealtimeFollow/index.d.ts +3 -0
  106. package/dist/Workspace/RealtimeFollow/index.js +5 -3
  107. package/package.json +8 -7
@@ -0,0 +1,23 @@
1
+ import { useMemo } from "react";
2
+ import { mapOllamaMessagesToMessageBubbleData } from "./mapOllamaMessages";
3
+ /**
4
+ * 将 Ollama `/api/chat` 的 messages 转为 MessageBubbleData[](与 {@link mapOllamaMessagesToMessageBubbleData} 一致,带 memo)。
5
+ */ export function useOllamaMessageBubbleData(messages, mapOptions, mapMessage) {
6
+ var _ref = mapOptions !== null && mapOptions !== void 0 ? mapOptions : {}, baseTime = _ref.baseTime, timeStepMs = _ref.timeStepMs, bumpUpdateAtOnLastMessage = _ref.bumpUpdateAtOnLastMessage, getMessageId = _ref.getMessageId, toolRoleAs = _ref.toolRoleAs, appendToolCallsToContent = _ref.appendToolCallsToContent, preserveRawInExtra = _ref.preserveRawInExtra, appendThinkingToContent = _ref.appendThinkingToContent, appendImagesPlaceholder = _ref.appendImagesPlaceholder, preserveOllamaRawInExtra = _ref.preserveOllamaRawInExtra;
7
+ return useMemo(function() {
8
+ return mapOllamaMessagesToMessageBubbleData(messages, mapOptions, mapMessage);
9
+ }, [
10
+ messages,
11
+ baseTime,
12
+ timeStepMs,
13
+ bumpUpdateAtOnLastMessage,
14
+ getMessageId,
15
+ toolRoleAs,
16
+ appendToolCallsToContent,
17
+ preserveRawInExtra,
18
+ appendThinkingToContent,
19
+ appendImagesPlaceholder,
20
+ preserveOllamaRawInExtra,
21
+ mapMessage
22
+ ]);
23
+ }
@@ -0,0 +1,6 @@
1
+ import type { MessageBubbleData } from '../../Types/message';
2
+ import type { OpenAIChatMessage, OpenAIMessagesMapMessage, OpenAIMessagesMapOptions } from './types';
3
+ /**
4
+ * 将 OpenAI Chat Completions 风格的 messages 转为 MessageBubbleData[](与 {@link mapOpenAIMessagesToMessageBubbleData} 一致,带 memo)。
5
+ */
6
+ export declare function useOpenAIMessageBubbleData(messages: OpenAIChatMessage[], mapOptions?: OpenAIMessagesMapOptions, mapMessage?: OpenAIMessagesMapMessage): MessageBubbleData[];
@@ -0,0 +1,20 @@
1
+ import { useMemo } from "react";
2
+ import { mapOpenAIMessagesToMessageBubbleData } from "./mapOpenAIMessages";
3
+ /**
4
+ * 将 OpenAI Chat Completions 风格的 messages 转为 MessageBubbleData[](与 {@link mapOpenAIMessagesToMessageBubbleData} 一致,带 memo)。
5
+ */ export function useOpenAIMessageBubbleData(messages, mapOptions, mapMessage) {
6
+ var _ref = mapOptions !== null && mapOptions !== void 0 ? mapOptions : {}, baseTime = _ref.baseTime, timeStepMs = _ref.timeStepMs, bumpUpdateAtOnLastMessage = _ref.bumpUpdateAtOnLastMessage, getMessageId = _ref.getMessageId, toolRoleAs = _ref.toolRoleAs, appendToolCallsToContent = _ref.appendToolCallsToContent, preserveRawInExtra = _ref.preserveRawInExtra;
7
+ return useMemo(function() {
8
+ return mapOpenAIMessagesToMessageBubbleData(messages, mapOptions, mapMessage);
9
+ }, [
10
+ messages,
11
+ baseTime,
12
+ timeStepMs,
13
+ bumpUpdateAtOnLastMessage,
14
+ getMessageId,
15
+ toolRoleAs,
16
+ appendToolCallsToContent,
17
+ preserveRawInExtra,
18
+ mapMessage
19
+ ]);
20
+ }
@@ -0,0 +1,7 @@
1
+ import type { MessageBubbleData } from '../../Types/message';
2
+ import type { OpenAIMessagesMapMessage } from './types';
3
+ import type { OpenClawChatMessage, OpenClawMessagesMapOptions } from './openClawTypes';
4
+ /**
5
+ * 将 OpenClaw 会话 / transcript 风格的 messages 转为 MessageBubbleData[](与 {@link mapOpenClawMessagesToMessageBubbleData} 一致,带 memo)。
6
+ */
7
+ export declare function useOpenClawMessageBubbleData(messages: OpenClawChatMessage[], mapOptions?: OpenClawMessagesMapOptions, mapMessage?: OpenAIMessagesMapMessage): MessageBubbleData[];
@@ -0,0 +1,22 @@
1
+ import { useMemo } from "react";
2
+ import { mapOpenClawMessagesToMessageBubbleData } from "./mapOpenClawMessages";
3
+ /**
4
+ * 将 OpenClaw 会话 / transcript 风格的 messages 转为 MessageBubbleData[](与 {@link mapOpenClawMessagesToMessageBubbleData} 一致,带 memo)。
5
+ */ export function useOpenClawMessageBubbleData(messages, mapOptions, mapMessage) {
6
+ var _ref = mapOptions !== null && mapOptions !== void 0 ? mapOptions : {}, baseTime = _ref.baseTime, timeStepMs = _ref.timeStepMs, bumpUpdateAtOnLastMessage = _ref.bumpUpdateAtOnLastMessage, getMessageId = _ref.getMessageId, toolRoleAs = _ref.toolRoleAs, appendToolCallsToContent = _ref.appendToolCallsToContent, preserveRawInExtra = _ref.preserveRawInExtra, useOpenClawTimestamps = _ref.useOpenClawTimestamps, preserveOpenClawRawInExtra = _ref.preserveOpenClawRawInExtra;
7
+ return useMemo(function() {
8
+ return mapOpenClawMessagesToMessageBubbleData(messages, mapOptions, mapMessage);
9
+ }, [
10
+ messages,
11
+ baseTime,
12
+ timeStepMs,
13
+ bumpUpdateAtOnLastMessage,
14
+ getMessageId,
15
+ toolRoleAs,
16
+ appendToolCallsToContent,
17
+ preserveRawInExtra,
18
+ useOpenClawTimestamps,
19
+ preserveOpenClawRawInExtra,
20
+ mapMessage
21
+ ]);
22
+ }
@@ -14,3 +14,5 @@ export * from './type';
14
14
  export { UserBubble } from './UserBubble';
15
15
  /** Schema Editor 相关导出 */
16
16
  export * from './schema-editor';
17
+ /** OpenAI Chat messages → MessageBubbleData */
18
+ export * from './OpenAIMessageBubble';
@@ -12,3 +12,4 @@ export * from "./MessagesContent/BubbleContext";
12
12
  export * from "./type";
13
13
  export { UserBubble } from "./UserBubble";
14
14
  /** Schema Editor 相关导出 */ export * from "./schema-editor";
15
+ /** OpenAI Chat messages → MessageBubbleData */ export * from "./OpenAIMessageBubble";
@@ -277,16 +277,18 @@ var SCROLL_TOLERANCE = 20;
277
277
  var container = containerRef.current;
278
278
  if (!container) return;
279
279
  observer.current = new MutationObserver(function(mutations) {
280
- var hasAddedNodes = mutations.some(function(m) {
281
- return m.addedNodes.length > 0;
280
+ var shouldCheck = mutations.some(function(m) {
281
+ var _ref, _ref1;
282
+ var _m_addedNodes, _m_removedNodes;
283
+ return ((_ref = (_m_addedNodes = m.addedNodes) === null || _m_addedNodes === void 0 ? void 0 : _m_addedNodes.length) !== null && _ref !== void 0 ? _ref : 0) > 0 || ((_ref1 = (_m_removedNodes = m.removedNodes) === null || _m_removedNodes === void 0 ? void 0 : _m_removedNodes.length) !== null && _ref1 !== void 0 ? _ref1 : 0) > 0 || m.type === 'characterData';
282
284
  });
283
- if (hasAddedNodes) checkScroll === null || checkScroll === void 0 ? void 0 : checkScroll();
285
+ if (shouldCheck) checkScroll === null || checkScroll === void 0 ? void 0 : checkScroll();
284
286
  });
285
287
  observer.current.observe(container, {
286
288
  childList: true,
287
289
  subtree: true,
288
290
  attributes: false,
289
- characterData: false
291
+ characterData: true
290
292
  });
291
293
  return function() {
292
294
  var _observer_current;
@@ -7,54 +7,5 @@ export * from './editor/elements';
7
7
  export * from './editor/utils';
8
8
  export * from './el';
9
9
  export * from './types';
10
- /**
11
- * BaseMarkdownEditor 组件 - 基础Markdown编辑器组件
12
- *
13
- * 该组件是Markdown编辑器的核心实现,基于Slate.js构建,提供完整的Markdown编辑功能。
14
- * 支持插件系统、工具栏、目录、只读模式等功能,是MarkdownEditor的基础组件。
15
- *
16
- * @component
17
- * @description 基础Markdown编辑器组件,提供核心的Markdown编辑功能
18
- * @param {MarkdownEditorProps} props - 组件属性
19
- * @param {string} [props.initValue] - 初始值
20
- * @param {(value: string) => void} [props.onChange] - 内容变化回调
21
- * @param {React.RefObject} [props.editorRef] - 编辑器引用
22
- * @param {boolean} [props.readonly] - 是否只读模式
23
- * @param {Plugin[]} [props.plugins] - 插件列表
24
- * @param {ToolBarConfig} [props.toolBar] - 工具栏配置
25
- * @param {boolean} [props.toc] - 是否显示目录
26
- * @param {string|number} [props.width] - 编辑器宽度
27
- * @param {string|number} [props.height] - 编辑器高度
28
- * @param {React.CSSProperties} [props.style] - 容器样式
29
- * @param {React.CSSProperties} [props.contentStyle] - 内容区域样式
30
- * @param {React.CSSProperties} [props.editorStyle] - 编辑器样式
31
- * @param {MarkdownRenderConfig} [props.markdownRenderConfig] - Markdown渲染配置
32
- * @param {Function} [props.onBlur] - 失焦回调
33
- * @param {Function} [props.onFocus] - 聚焦回调
34
- *
35
- * @example
36
- * ```tsx
37
- * <BaseMarkdownEditor
38
- * initValue="# Hello World"
39
- * onChange={(value) => console.log('内容变化:', value)}
40
- * editorRef={editorRef}
41
- * readonly={false}
42
- * toc={true}
43
- * toolBar={{ show: true }}
44
- * />
45
- * ```
46
- *
47
- * @returns {React.ReactElement} 渲染的基础Markdown编辑器组件
48
- *
49
- * @remarks
50
- * - 基于Slate.js构建
51
- * - 支持插件系统扩展
52
- * - 提供完整的工具栏功能
53
- * - 支持目录生成
54
- * - 支持只读模式
55
- * - 提供焦点管理
56
- * - 支持错误捕获
57
- * - 支持键盘事件处理
58
- * - 提供Markdown解析和渲染
59
- */
10
+ /** 基于 Slate.js 的 Markdown 编辑器核心组件,readonly + renderMode='markdown' 时走轻量 MarkdownRenderer */
60
11
  export declare const BaseMarkdownEditor: React.FC<MarkdownEditorProps>;
@@ -199,57 +199,8 @@ var I18nBoundary = function I18nBoundary(param) {
199
199
  }
200
200
  return /*#__PURE__*/ React.createElement(I18nProvide, null, children);
201
201
  };
202
- /**
203
- * BaseMarkdownEditor 组件 - 基础Markdown编辑器组件
204
- *
205
- * 该组件是Markdown编辑器的核心实现,基于Slate.js构建,提供完整的Markdown编辑功能。
206
- * 支持插件系统、工具栏、目录、只读模式等功能,是MarkdownEditor的基础组件。
207
- *
208
- * @component
209
- * @description 基础Markdown编辑器组件,提供核心的Markdown编辑功能
210
- * @param {MarkdownEditorProps} props - 组件属性
211
- * @param {string} [props.initValue] - 初始值
212
- * @param {(value: string) => void} [props.onChange] - 内容变化回调
213
- * @param {React.RefObject} [props.editorRef] - 编辑器引用
214
- * @param {boolean} [props.readonly] - 是否只读模式
215
- * @param {Plugin[]} [props.plugins] - 插件列表
216
- * @param {ToolBarConfig} [props.toolBar] - 工具栏配置
217
- * @param {boolean} [props.toc] - 是否显示目录
218
- * @param {string|number} [props.width] - 编辑器宽度
219
- * @param {string|number} [props.height] - 编辑器高度
220
- * @param {React.CSSProperties} [props.style] - 容器样式
221
- * @param {React.CSSProperties} [props.contentStyle] - 内容区域样式
222
- * @param {React.CSSProperties} [props.editorStyle] - 编辑器样式
223
- * @param {MarkdownRenderConfig} [props.markdownRenderConfig] - Markdown渲染配置
224
- * @param {Function} [props.onBlur] - 失焦回调
225
- * @param {Function} [props.onFocus] - 聚焦回调
226
- *
227
- * @example
228
- * ```tsx
229
- * <BaseMarkdownEditor
230
- * initValue="# Hello World"
231
- * onChange={(value) => console.log('内容变化:', value)}
232
- * editorRef={editorRef}
233
- * readonly={false}
234
- * toc={true}
235
- * toolBar={{ show: true }}
236
- * />
237
- * ```
238
- *
239
- * @returns {React.ReactElement} 渲染的基础Markdown编辑器组件
240
- *
241
- * @remarks
242
- * - 基于Slate.js构建
243
- * - 支持插件系统扩展
244
- * - 提供完整的工具栏功能
245
- * - 支持目录生成
246
- * - 支持只读模式
247
- * - 提供焦点管理
248
- * - 支持错误捕获
249
- * - 支持键盘事件处理
250
- * - 提供Markdown解析和渲染
251
- */ export var BaseMarkdownEditor = function BaseMarkdownEditor(props) {
252
- var _ref, _props_typewriter, _props_readonly;
202
+ /** 基于 Slate.js 的 Markdown 编辑器核心组件,readonly + renderMode='markdown' 时走轻量 MarkdownRenderer */ export var BaseMarkdownEditor = function BaseMarkdownEditor(props) {
203
+ var _ref, _ref1, _props_streaming, _props_readonly;
253
204
  var _props_jinja, _effectiveJinja_templatePanel, _props_floatBar, _props_floatBar1, _props_textAreaProps;
254
205
  var initValue = props.initValue, width = props.width, _props_toolBar = props.toolBar, toolBar = _props_toolBar === void 0 ? {} : _props_toolBar, editorRef = props.editorRef, _props_toc = props.toc, toc = _props_toc === void 0 ? false : _props_toc, readonly = props.readonly, lazy = props.lazy, style = props.style, _props_contentStyle = props.contentStyle, contentStyle = _props_contentStyle === void 0 ? {
255
206
  height: '100%'
@@ -416,8 +367,9 @@ var I18nBoundary = function I18nBoundary(param) {
416
367
  var jinjaTemplatePanelEnabled = jinjaEnabled && effectiveJinja !== undefined && effectiveJinja !== null && effectiveJinja.templatePanel !== false && (_type_of(effectiveJinja.templatePanel) !== 'object' || ((_effectiveJinja_templatePanel = effectiveJinja.templatePanel) === null || _effectiveJinja_templatePanel === void 0 ? void 0 : _effectiveJinja_templatePanel.enable) !== false);
417
368
  var _useState7 = _sliced_to_array(useState(false), 2), openJinjaTemplate = _useState7[0], setOpenJinjaTemplate = _useState7[1];
418
369
  var _useState8 = _sliced_to_array(useState(null), 2), jinjaAnchorPath = _useState8[0], setJinjaAnchorPath = _useState8[1];
370
+ var isStreaming = (_ref1 = (_props_streaming = props.streaming) !== null && _props_streaming !== void 0 ? _props_streaming : props.typewriter) !== null && _ref1 !== void 0 ? _ref1 : false;
419
371
  if (readonly && effectiveRenderMode === 'markdown') {
420
- var _props_typewriter1;
372
+ var _props_isFinished;
421
373
  var _obj;
422
374
  return wrapSSR(/*#__PURE__*/ React.createElement(I18nBoundary, null, /*#__PURE__*/ React.createElement(PluginContext.Provider, {
423
375
  value: props.plugins || []
@@ -431,7 +383,10 @@ var I18nBoundary = function I18nBoundary(param) {
431
383
  ref: markdownContainerRef
432
384
  }, /*#__PURE__*/ React.createElement(MarkdownRenderer, {
433
385
  content: initValue || '',
434
- streaming: (_props_typewriter1 = props.typewriter) !== null && _props_typewriter1 !== void 0 ? _props_typewriter1 : false,
386
+ streaming: isStreaming,
387
+ isFinished: (_props_isFinished = props.isFinished) !== null && _props_isFinished !== void 0 ? _props_isFinished : !isStreaming,
388
+ queueOptions: props.queueOptions,
389
+ streamingParagraphAnimation: props.streamingParagraphAnimation,
435
390
  plugins: props.plugins,
436
391
  remarkPlugins: props.markdownToHtmlOptions,
437
392
  codeProps: props.codeProps,
@@ -442,7 +397,8 @@ var I18nBoundary = function I18nBoundary(param) {
442
397
  prefixCls: baseClassName,
443
398
  fncProps: props.fncProps,
444
399
  linkConfig: props.linkConfig,
445
- eleRender: props.eleRender
400
+ eleRender: props.eleRender,
401
+ fileMapConfig: props.fileMapConfig
446
402
  }), children))));
447
403
  }
448
404
  var _obj1;
@@ -462,7 +418,7 @@ var I18nBoundary = function I18nBoundary(param) {
462
418
  store: instance.store,
463
419
  domRect: domRect,
464
420
  setDomRect: setDomRect,
465
- typewriter: (_props_typewriter = props.typewriter) !== null && _props_typewriter !== void 0 ? _props_typewriter : false,
421
+ typewriter: isStreaming,
466
422
  readonly: (_props_readonly = props.readonly) !== null && _props_readonly !== void 0 ? _props_readonly : false,
467
423
  editorProps: effectiveJinja !== undefined ? _object_spread_props(_object_spread({}, props), {
468
424
  jinja: effectiveJinja
@@ -498,13 +498,12 @@ var defaultAllowedTypes = [
498
498
  _getSelectionContent1 = getSelectionContent(selection), markdown1 = _getSelectionContent1.markdown, nodes1 = _getSelectionContent1.nodes;
499
499
  (_props_onSelectionChange2 = props.onSelectionChange) === null || _props_onSelectionChange2 === void 0 ? void 0 : _props_onSelectionChange2.call(props, selection, markdown1, nodes1);
500
500
  }
501
- // 只有在有实际选中文本时才显示工具栏
502
- if (!Range.isCollapsed(selection)) {
503
- range = ReactEditor.toDOMRange(markdownEditorRef.current, selection);
504
- rect = range === null || range === void 0 ? void 0 : range.getBoundingClientRect();
505
- if (rect) {
506
- setDomRect === null || setDomRect === void 0 ? void 0 : setDomRect(rect);
507
- } else {
501
+ if (!Range.isCollapsed(selection) && Editor.hasPath(markdownEditorRef.current, selection.anchor.path) && Editor.hasPath(markdownEditorRef.current, selection.focus.path)) {
502
+ try {
503
+ range = ReactEditor.toDOMRange(markdownEditorRef.current, selection);
504
+ rect = range === null || range === void 0 ? void 0 : range.getBoundingClientRect();
505
+ setDomRect === null || setDomRect === void 0 ? void 0 : setDomRect(rect !== null && rect !== void 0 ? rect : null);
506
+ } catch (unused) {
508
507
  setDomRect === null || setDomRect === void 0 ? void 0 : setDomRect(null);
509
508
  }
510
509
  } else {
@@ -633,10 +632,14 @@ var defaultAllowedTypes = [
633
632
  // 2. 检查目标元素是否可编辑,如果不可编辑,则从DOM选区中获取编辑器选区
634
633
  if (operationType === 'copy' && !hasEditableTarget(markdownEditorRef.current, event.target)) {
635
634
  var domSelection = window.getSelection();
636
- markdownEditorRef.current.selection = getSelectionFromDomSelection(markdownEditorRef.current, domSelection);
635
+ if (domSelection) {
636
+ markdownEditorRef.current.selection = getSelectionFromDomSelection(markdownEditorRef.current, domSelection);
637
+ }
637
638
  } else if (operationType === 'cut') {
638
639
  var domSelection1 = window.getSelection();
639
- markdownEditorRef.current.selection = getSelectionFromDomSelection(markdownEditorRef.current, domSelection1);
640
+ if (domSelection1) {
641
+ markdownEditorRef.current.selection = getSelectionFromDomSelection(markdownEditorRef.current, domSelection1);
642
+ }
640
643
  }
641
644
  // 如果无法获取选区,则直接返回
642
645
  if (!markdownEditorRef.current.selection) {
@@ -647,10 +650,13 @@ var defaultAllowedTypes = [
647
650
  var _event_clipboardData;
648
651
  (_event_clipboardData = event.clipboardData) === null || _event_clipboardData === void 0 ? void 0 : _event_clipboardData.clearData();
649
652
  var editor = markdownEditorRef.current;
653
+ var sel = editor.selection;
654
+ if (!Editor.hasPath(editor, sel.anchor.path) || !Editor.hasPath(editor, sel.focus.path)) {
655
+ return false;
656
+ }
650
657
  try {
651
- // 复制HTML内容
652
658
  var tempDiv = document.createElement('div');
653
- var domRange = ReactEditor.toDOMRange(editor, editor.selection);
659
+ var domRange = ReactEditor.toDOMRange(editor, sel);
654
660
  var selectedHtml = domRange.cloneContents();
655
661
  tempDiv.appendChild(selectedHtml);
656
662
  event.clipboardData.setData('text/html', tempDiv.innerHTML);
@@ -970,12 +976,16 @@ var defaultAllowedTypes = [
970
976
  var _markdownEditorRef_current_selection1;
971
977
  var node = Node.get(markdownEditorRef.current, ((_markdownEditorRef_current_selection1 = markdownEditorRef.current.selection) === null || _markdownEditorRef_current_selection1 === void 0 ? void 0 : _markdownEditorRef_current_selection1.focus.path) || []);
972
978
  if (node) {
973
- var dom = ReactEditor.toDOMNode(markdownEditorRef.current, node);
974
- if (dom) {
975
- var tagInput = dom.querySelector('[data-tag-popup-input]');
976
- if (tagInput) {
977
- tagInput.setAttribute('data-composition', '');
979
+ try {
980
+ var dom = ReactEditor.toDOMNode(markdownEditorRef.current, node);
981
+ if (dom) {
982
+ var tagInput = dom.querySelector('[data-tag-popup-input]');
983
+ if (tagInput) {
984
+ tagInput.setAttribute('data-composition', '');
985
+ }
978
986
  }
987
+ } catch (unused) {
988
+ // node may not be mounted yet; ignore
979
989
  }
980
990
  }
981
991
  }
@@ -1003,12 +1013,16 @@ var defaultAllowedTypes = [
1003
1013
  var _markdownEditorRef_current_selection1;
1004
1014
  var node = Node.get(markdownEditorRef.current, ((_markdownEditorRef_current_selection1 = markdownEditorRef.current.selection) === null || _markdownEditorRef_current_selection1 === void 0 ? void 0 : _markdownEditorRef_current_selection1.focus.path) || []);
1005
1015
  if (node) {
1006
- var dom = ReactEditor.toDOMNode(markdownEditorRef.current, node);
1007
- if (dom) {
1008
- var tagInput = dom.querySelector('[data-tag-popup-input]');
1009
- if (tagInput) {
1010
- tagInput.removeAttribute('data-composition');
1016
+ try {
1017
+ var dom = ReactEditor.toDOMNode(markdownEditorRef.current, node);
1018
+ if (dom) {
1019
+ var tagInput = dom.querySelector('[data-tag-popup-input]');
1020
+ if (tagInput) {
1021
+ tagInput.removeAttribute('data-composition');
1022
+ }
1011
1023
  }
1024
+ } catch (unused) {
1025
+ // node may have been unmounted during composition; ignore
1012
1026
  }
1013
1027
  }
1014
1028
  }
@@ -85,6 +85,7 @@ export var Code = function Code(param) {
85
85
  // 检查代码块是否未闭合
86
86
  var isUnclosed = (element === null || element === void 0 ? void 0 : (_element_otherProps2 = element.otherProps) === null || _element_otherProps2 === void 0 ? void 0 : _element_otherProps2.finished) === false;
87
87
  return /*#__PURE__*/ React.createElement("div", _object_spread_props(_object_spread({}, attributes), {
88
+ "data-be": "code",
88
89
  "data-is-unclosed": isUnclosed || undefined,
89
90
  "data-language": element === null || element === void 0 ? void 0 : element.language,
90
91
  style: {
@@ -64,7 +64,11 @@ import { TablePropsProvider } from "./TableContext";
64
64
  var baseCls = getPrefixCls('agentic-md-editor-content-table');
65
65
  var editor = useSlate();
66
66
  var tablePath = useMemo(function() {
67
- return ReactEditor.findPath(editor, props.element);
67
+ try {
68
+ return ReactEditor.findPath(editor, props.element);
69
+ } catch (unused) {
70
+ return [];
71
+ }
68
72
  }, [
69
73
  props.element
70
74
  ]);
@@ -114,8 +114,12 @@ function forEachCellPath(editor, tablePath, callback) {
114
114
  }
115
115
  export function clearTableSelection(editor, tablePath) {
116
116
  forEachCellPath(editor, tablePath, function(_, cellNode) {
117
- var domNode = ReactEditor.toDOMNode(editor, cellNode);
118
- domNode === null || domNode === void 0 ? void 0 : domNode.removeAttribute('data-select');
117
+ try {
118
+ var domNode = ReactEditor.toDOMNode(editor, cellNode);
119
+ domNode === null || domNode === void 0 ? void 0 : domNode.removeAttribute('data-select');
120
+ } catch (unused) {
121
+ // cell may not be mounted yet
122
+ }
119
123
  });
120
124
  }
121
125
  export function selectTableRow(editor, tablePath, rowIndex) {
@@ -137,8 +141,12 @@ export function selectTableRow(editor, tablePath, rowIndex) {
137
141
  if (tableCellNode.type !== 'table-cell') {
138
142
  continue;
139
143
  }
140
- var domNode = ReactEditor.toDOMNode(editor, tableCellNode);
141
- domNode === null || domNode === void 0 ? void 0 : domNode.setAttribute('data-select', 'true');
144
+ try {
145
+ var domNode = ReactEditor.toDOMNode(editor, tableCellNode);
146
+ domNode === null || domNode === void 0 ? void 0 : domNode.setAttribute('data-select', 'true');
147
+ } catch (unused) {
148
+ // cell may not be mounted yet
149
+ }
142
150
  }
143
151
  }
144
152
  export function selectTableColumn(editor, tablePath, columnIndex) {
@@ -158,14 +166,22 @@ export function selectTableColumn(editor, tablePath, columnIndex) {
158
166
  if (tableCellNode.type !== 'table-cell') {
159
167
  continue;
160
168
  }
161
- var domNode = ReactEditor.toDOMNode(editor, tableCellNode);
162
- domNode === null || domNode === void 0 ? void 0 : domNode.setAttribute('data-select', 'true');
169
+ try {
170
+ var domNode = ReactEditor.toDOMNode(editor, tableCellNode);
171
+ domNode === null || domNode === void 0 ? void 0 : domNode.setAttribute('data-select', 'true');
172
+ } catch (unused) {
173
+ // cell may not be mounted yet
174
+ }
163
175
  }
164
176
  }
165
177
  export function selectWholeTable(editor, tablePath) {
166
178
  forEachCellPath(editor, tablePath, function(_, cellNode) {
167
- var domNode = ReactEditor.toDOMNode(editor, cellNode);
168
- domNode === null || domNode === void 0 ? void 0 : domNode.setAttribute('data-select', 'true');
179
+ try {
180
+ var domNode = ReactEditor.toDOMNode(editor, cellNode);
181
+ domNode === null || domNode === void 0 ? void 0 : domNode.setAttribute('data-select', 'true');
182
+ } catch (unused) {
183
+ // cell may not be mounted yet
184
+ }
169
185
  });
170
186
  }
171
187
  export function removeTableRow(editor, tablePath, rowIndex) {
@@ -387,20 +387,24 @@ var MLeafComponent = function MLeafComponent(props) {
387
387
  setTimeout(function() {
388
388
  if (!markdownEditorRef.current) return;
389
389
  if (!(path === null || path === void 0 ? void 0 : path.length)) return;
390
- var nextPath = Path.next(path);
391
- if (!Editor.hasPath(markdownEditorRef.current, nextPath)) {
392
- Transforms.insertNodes(markdownEditorRef.current, [
393
- {
394
- text: ' '
395
- }
396
- ], {
397
- select: true
398
- });
399
- } else {
400
- Transforms.select(markdownEditorRef.current, {
401
- anchor: Editor.end(markdownEditorRef.current, path),
402
- focus: Editor.end(markdownEditorRef.current, path)
403
- });
390
+ try {
391
+ var nextPath = Path.next(path);
392
+ if (!Editor.hasPath(markdownEditorRef.current, nextPath)) {
393
+ Transforms.insertNodes(markdownEditorRef.current, [
394
+ {
395
+ text: ' '
396
+ }
397
+ ], {
398
+ select: true
399
+ });
400
+ } else {
401
+ Transforms.select(markdownEditorRef.current, {
402
+ anchor: Editor.end(markdownEditorRef.current, path),
403
+ focus: Editor.end(markdownEditorRef.current, path)
404
+ });
405
+ }
406
+ } catch (unused) {
407
+ // path may have become stale after the timeout; ignore
404
408
  }
405
409
  }, 0);
406
410
  },
@@ -12,6 +12,8 @@ export type CheckMdParams = {
12
12
  interface MdNode {
13
13
  reg: RegExp;
14
14
  matchKey?: string | RegExp;
15
+ /** 为 true 时仅在 `markdown.matchInputToNode === true` 时参与匹配(避免首段 `- ` 误转列表) */
16
+ gatedByMatchInputToNode?: boolean;
15
17
  checkAllow?: (ctx: {
16
18
  editor: Editor;
17
19
  node: NodeEntry<Element>;
@@ -329,6 +329,7 @@ export var MdElements = {
329
329
  task: {
330
330
  reg: /^\s*\[(x|\s)]\s+/,
331
331
  matchKey: ' ',
332
+ gatedByMatchInputToNode: true,
332
333
  checkAllow: function checkAllow(ctx) {
333
334
  var _ctx_node_, _ctx_node;
334
335
  if (((_ctx_node = ctx.node) === null || _ctx_node === void 0 ? void 0 : (_ctx_node_ = _ctx_node[0]) === null || _ctx_node_ === void 0 ? void 0 : _ctx_node_.type) === 'paragraph') {
@@ -362,6 +363,7 @@ export var MdElements = {
362
363
  },
363
364
  list: {
364
365
  matchKey: ' ',
366
+ gatedByMatchInputToNode: true,
365
367
  reg: /^\s*(\d+\.|-|\*|\+)\s+?/,
366
368
  checkAllow: function checkAllow(ctx) {
367
369
  var _ctx_node_, _ctx_node;
@@ -420,7 +422,7 @@ export var MdElements = {
420
422
  reg: /^\s*(\*\*\*|___|---)\s*$/,
421
423
  checkAllow: function checkAllow(ctx) {
422
424
  var _ctx_node_, _ctx_node;
423
- return ((_ctx_node = ctx.node) === null || _ctx_node === void 0 ? void 0 : (_ctx_node_ = _ctx_node[0]) === null || _ctx_node_ === void 0 ? void 0 : _ctx_node_.type) === 'paragraph' && ctx.node[1][0] !== 0;
425
+ return ((_ctx_node = ctx.node) === null || _ctx_node === void 0 ? void 0 : (_ctx_node_ = _ctx_node[0]) === null || _ctx_node_ === void 0 ? void 0 : _ctx_node_.type) === 'paragraph';
424
426
  },
425
427
  run: function run(param) {
426
428
  var editor = param.editor, path = param.path;
@@ -446,7 +448,7 @@ export var MdElements = {
446
448
  reg: /^\s*(\*\*\*|___|---)\s*/,
447
449
  checkAllow: function checkAllow(ctx) {
448
450
  var _ctx_node_, _ctx_node;
449
- return ((_ctx_node = ctx.node) === null || _ctx_node === void 0 ? void 0 : (_ctx_node_ = _ctx_node[0]) === null || _ctx_node_ === void 0 ? void 0 : _ctx_node_.type) === 'paragraph' && ctx.node[1][0] !== 0;
451
+ return ((_ctx_node = ctx.node) === null || _ctx_node === void 0 ? void 0 : (_ctx_node_ = _ctx_node[0]) === null || _ctx_node_ === void 0 ? void 0 : _ctx_node_.type) === 'paragraph';
450
452
  },
451
453
  run: function run(param) {
452
454
  var editor = param.editor, path = param.path;