@ant-design/agentic-ui 2.30.0 → 2.30.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/Bubble/List/index.d.ts +4 -0
  2. package/dist/Bubble/List/index.js +8 -5
  3. package/dist/Bubble/MessagesContent/EXCEPTION.js +11 -2
  4. package/dist/Bubble/MessagesContent/MarkdownPreview.js +13 -7
  5. package/dist/Bubble/MessagesContent/index.js +39 -10
  6. package/dist/Bubble/MessagesContent/style.js +55 -22
  7. package/dist/Bubble/type.d.ts +4 -0
  8. package/dist/I18n/locales.js +2 -2
  9. package/dist/MarkdownEditor/BaseMarkdownEditor.js +37 -5
  10. package/dist/MarkdownEditor/editor/elements/AgenticUiBlocks/AgenticUiTaskBlock.d.ts +4 -0
  11. package/dist/MarkdownEditor/editor/elements/AgenticUiBlocks/AgenticUiTaskBlock.js +74 -0
  12. package/dist/MarkdownEditor/editor/elements/AgenticUiBlocks/AgenticUiToolUseBarBlock.d.ts +4 -0
  13. package/dist/MarkdownEditor/editor/elements/AgenticUiBlocks/AgenticUiToolUseBarBlock.js +114 -0
  14. package/dist/MarkdownEditor/editor/elements/AgenticUiBlocks/agenticUiEmbedUtils.d.ts +20 -0
  15. package/dist/MarkdownEditor/editor/elements/AgenticUiBlocks/agenticUiEmbedUtils.js +169 -0
  16. package/dist/MarkdownEditor/editor/elements/Table/EditableTable.d.ts +11 -0
  17. package/dist/MarkdownEditor/editor/elements/Table/EditableTable.js +207 -0
  18. package/dist/MarkdownEditor/editor/elements/Table/Table.js +10 -276
  19. package/dist/MarkdownEditor/editor/elements/Table/TableCellIndex/index.js +7 -227
  20. package/dist/MarkdownEditor/editor/elements/Table/TableCellIndexSpacer/index.js +20 -229
  21. package/dist/MarkdownEditor/editor/elements/Table/commands/tableCommands.d.ts +9 -0
  22. package/dist/MarkdownEditor/editor/elements/Table/commands/tableCommands.js +242 -0
  23. package/dist/MarkdownEditor/editor/elements/Table/utils/editableTableWidth.d.ts +20 -0
  24. package/dist/MarkdownEditor/editor/elements/Table/utils/editableTableWidth.js +60 -0
  25. package/dist/MarkdownEditor/editor/elements/Table/utils/useEditableTableColWidths.d.ts +6 -0
  26. package/dist/MarkdownEditor/editor/elements/Table/utils/useEditableTableColWidths.js +20 -0
  27. package/dist/MarkdownEditor/editor/elements/Table/utils/useEditableTableContentWidth.d.ts +10 -0
  28. package/dist/MarkdownEditor/editor/elements/Table/utils/useEditableTableContentWidth.js +103 -0
  29. package/dist/MarkdownEditor/editor/elements/index.js +7 -0
  30. package/dist/MarkdownEditor/editor/parser/parse/parseCode.js +33 -2
  31. package/dist/MarkdownEditor/editor/parser/parserSlateNodeToMarkdown.js +3 -0
  32. package/dist/MarkdownEditor/editor/plugins/handlePaste.js +4 -1
  33. package/dist/MarkdownEditor/style.js +109 -7
  34. package/dist/MarkdownEditor/types.d.ts +5 -0
  35. package/dist/MarkdownInputField/AttachmentButton/AttachmentFileList/AttachmentFileIcon.js +2 -2
  36. package/dist/MarkdownInputField/AttachmentButton/AttachmentFileList/AttachmentFileListItem.js +11 -8
  37. package/dist/MarkdownInputField/AttachmentButton/index.js +7 -2
  38. package/dist/MarkdownInputField/AttachmentButton/types.d.ts +5 -1
  39. package/dist/MarkdownInputField/AttachmentButton/utils.d.ts +7 -0
  40. package/dist/MarkdownInputField/AttachmentButton/utils.js +9 -1
  41. package/dist/MarkdownInputField/FileMapView/FileMapViewItem.js +10 -5
  42. package/dist/MarkdownInputField/FileUploadManager/index.d.ts +9 -0
  43. package/dist/MarkdownInputField/FileUploadManager/index.js +20 -4
  44. package/dist/MarkdownInputField/MarkdownInputField.js +5 -3
  45. package/dist/MarkdownInputField/SendActions/index.d.ts +9 -0
  46. package/dist/MarkdownInputField/SendActions/index.js +3 -2
  47. package/dist/MarkdownInputField/utils/renderHelpers.d.ts +8 -1
  48. package/dist/MarkdownInputField/utils/renderHelpers.js +5 -1
  49. package/dist/MarkdownRenderer/AnimationText.d.ts +4 -7
  50. package/dist/MarkdownRenderer/AnimationText.js +117 -15
  51. package/dist/MarkdownRenderer/MarkdownRenderer.js +15 -1
  52. package/dist/MarkdownRenderer/index.d.ts +2 -2
  53. package/dist/MarkdownRenderer/index.js +1 -1
  54. package/dist/MarkdownRenderer/renderers/AgenticUiTaskBlockRenderer.d.ts +6 -0
  55. package/dist/MarkdownRenderer/renderers/AgenticUiTaskBlockRenderer.js +66 -0
  56. package/dist/MarkdownRenderer/renderers/AgenticUiToolUseBarBlockRenderer.d.ts +6 -0
  57. package/dist/MarkdownRenderer/renderers/AgenticUiToolUseBarBlockRenderer.js +134 -0
  58. package/dist/MarkdownRenderer/style.js +7 -6
  59. package/dist/MarkdownRenderer/useMarkdownToReact.js +5 -4
  60. package/dist/MarkdownRenderer/useStreaming.js +8 -1
  61. package/dist/Plugins/chart/ChartRender.js +1 -0
  62. package/dist/Plugins/chart/index.js +3 -1
  63. package/package.json +2 -1
@@ -176,6 +176,10 @@ export type BubbleListProps = {
176
176
  * 等效于 markdownRenderConfig={{ renderMode }}
177
177
  */
178
178
  renderMode?: 'slate' | 'markdown';
179
+ /**
180
+ * 与 `renderMode` 等价,兼容协议字段 `renderType=markdown`
181
+ */
182
+ renderType?: 'slate' | 'markdown';
179
183
  docListProps?: BubbleProps['docListProps'];
180
184
  /**
181
185
  * 动态控制复制按钮的显隐
@@ -121,15 +121,18 @@ import { useStyle } from "./style";
121
121
  * - 支持滚动和触摸事件
122
122
  * - 提供消息复制功能
123
123
  */ export var BubbleList = function BubbleList(props) {
124
- var bubbleListRef = props.bubbleListRef, bubbleRenderConfig = props.bubbleRenderConfig, className = props.className, legacyLoading = props.loading, isLoading = props.isLoading, styles = props.styles, classNames = props.classNames, markdownRenderConfigProp = props.markdownRenderConfig, renderMode = props.renderMode, userMeta = props.userMeta, assistantMeta = props.assistantMeta, _props_bubbleList = props.bubbleList, bubbleList = _props_bubbleList === void 0 ? [] : _props_bubbleList, style = props.style, onScroll = props.onScroll, onWheel = props.onWheel, onTouchMove = props.onTouchMove;
125
- // 合并 renderMode 快捷属性到 markdownRenderConfig
124
+ var bubbleListRef = props.bubbleListRef, bubbleRenderConfig = props.bubbleRenderConfig, className = props.className, legacyLoading = props.loading, isLoading = props.isLoading, styles = props.styles, classNames = props.classNames, markdownRenderConfigProp = props.markdownRenderConfig, renderMode = props.renderMode, renderType = props.renderType, userMeta = props.userMeta, assistantMeta = props.assistantMeta, _props_bubbleList = props.bubbleList, bubbleList = _props_bubbleList === void 0 ? [] : _props_bubbleList, style = props.style, onScroll = props.onScroll, onWheel = props.onWheel, onTouchMove = props.onTouchMove;
125
+ // 合并 renderMode / renderType 快捷属性到 markdownRenderConfig
126
126
  var markdownRenderConfig = useMemo(function() {
127
- return renderMode ? _object_spread_props(_object_spread({}, markdownRenderConfigProp), {
128
- renderMode: renderMode
127
+ var _ref, _ref1;
128
+ var mode = (_ref = (_ref1 = renderMode !== null && renderMode !== void 0 ? renderMode : renderType) !== null && _ref1 !== void 0 ? _ref1 : markdownRenderConfigProp === null || markdownRenderConfigProp === void 0 ? void 0 : markdownRenderConfigProp.renderMode) !== null && _ref !== void 0 ? _ref : markdownRenderConfigProp === null || markdownRenderConfigProp === void 0 ? void 0 : markdownRenderConfigProp.renderType;
129
+ return mode ? _object_spread_props(_object_spread({}, markdownRenderConfigProp), {
130
+ renderMode: mode
129
131
  }) : markdownRenderConfigProp;
130
132
  }, [
131
133
  markdownRenderConfigProp,
132
- renderMode
134
+ renderMode,
135
+ renderType
133
136
  ]);
134
137
  // 兼容旧属性
135
138
  var loading = isLoading !== null && isLoading !== void 0 ? isLoading : legacyLoading;
@@ -1,5 +1,7 @@
1
1
  import { theme } from "antd";
2
2
  import React from "react";
3
+ import { AnswerAlert } from "../../AnswerAlert";
4
+ import { useLocale } from "../../I18n";
3
5
  /**
4
6
  * EXCEPTION 组件 - 异常消息组件
5
7
  *
@@ -33,7 +35,9 @@ import React from "react";
33
35
  */ export var EXCEPTION = function EXCEPTION(param) {
34
36
  var extra = param.extra, content = param.content;
35
37
  var token = theme.useToken().token;
36
- return /*#__PURE__*/ React.createElement(React.Fragment, null, /*#__PURE__*/ React.createElement("div", {
38
+ var locale = useLocale();
39
+ var messageText = String(content !== null && content !== void 0 ? content : '').trim();
40
+ return /*#__PURE__*/ React.createElement(React.Fragment, null, messageText ? /*#__PURE__*/ React.createElement("div", {
37
41
  style: {
38
42
  color: token.colorError,
39
43
  lineHeight: '24px',
@@ -41,5 +45,10 @@ import React from "react";
41
45
  wordBreak: 'break-all',
42
46
  textWrap: 'wrap'
43
47
  }
44
- }, content), extra);
48
+ }, content) : /*#__PURE__*/ React.createElement(AnswerAlert, {
49
+ message: (locale === null || locale === void 0 ? void 0 : locale['chat.message.generateFailed']) || '生成回答失败,请重试',
50
+ type: "error",
51
+ showIcon: true,
52
+ closable: true
53
+ }), extra);
45
54
  };
@@ -94,8 +94,8 @@ import { MessagesContext } from "./BubbleContext";
94
94
  * />
95
95
  * ```
96
96
  */ export var MarkdownPreview = function MarkdownPreview(props) {
97
- var _ref;
98
- var _props_markdownRenderConfig, _props_originData;
97
+ var _ref, _ref1;
98
+ var _props_markdownRenderConfig, _props_markdownRenderConfig1, _props_originData, _props_originData1;
99
99
  var content = props.content, extra = props.extra, typing = props.typing, htmlRef = props.htmlRef, fncProps = props.fncProps, docListNode = props.docListNode, beforeContent = props.beforeContent, afterContent = props.afterContent;
100
100
  var MarkdownEditorRef = React.useRef(undefined);
101
101
  var hidePadding = (useContext(MessagesContext) || {}).hidePadding;
@@ -104,7 +104,7 @@ import { MessagesContext } from "./BubbleContext";
104
104
  var standalone = config === null || config === void 0 ? void 0 : config.standalone;
105
105
  var extraShowOnHover = config === null || config === void 0 ? void 0 : config.extraShowOnHover;
106
106
  var token = theme.useToken().token;
107
- var renderMode = (_ref = (_props_markdownRenderConfig = props.markdownRenderConfig) === null || _props_markdownRenderConfig === void 0 ? void 0 : _props_markdownRenderConfig.renderMode) !== null && _ref !== void 0 ? _ref : 'slate';
107
+ var renderMode = (_ref = (_ref1 = (_props_markdownRenderConfig = props.markdownRenderConfig) === null || _props_markdownRenderConfig === void 0 ? void 0 : _props_markdownRenderConfig.renderMode) !== null && _ref1 !== void 0 ? _ref1 : (_props_markdownRenderConfig1 = props.markdownRenderConfig) === null || _props_markdownRenderConfig1 === void 0 ? void 0 : _props_markdownRenderConfig1.renderType) !== null && _ref !== void 0 ? _ref : 'slate';
108
108
  var isPaddingHidden = useMemo(function() {
109
109
  return !!extra;
110
110
  }, [
@@ -125,7 +125,7 @@ import { MessagesContext } from "./BubbleContext";
125
125
  var _content_includes, _htmlRef_current, _htmlRef_current1, _props_markdownRenderConfig, _props_originData, _props_originData1, _props_originData2, _props_markdownRenderConfig1, _props_markdownRenderConfig2, _props_markdownRenderConfig3;
126
126
  // MarkdownRenderer 渲染路径——轻量,不创建 Slate 实例
127
127
  if (renderMode === 'markdown') {
128
- var _props_originData3, _props_markdownRenderConfig4, _props_markdownRenderConfig5, _props_markdownRenderConfig6;
128
+ var _props_originData3, _props_markdownRenderConfig4, _props_markdownRenderConfig5, _props_markdownRenderConfig6, _props_markdownRenderConfig7;
129
129
  return /*#__PURE__*/ React.createElement(MarkdownRenderer, {
130
130
  content: content,
131
131
  streaming: typing,
@@ -137,7 +137,8 @@ import { MessagesContext } from "./BubbleContext";
137
137
  padding: isPaddingHidden ? 0 : undefined,
138
138
  margin: isPaddingHidden ? 0 : undefined
139
139
  }, ((_props_markdownRenderConfig5 = props.markdownRenderConfig) === null || _props_markdownRenderConfig5 === void 0 ? void 0 : _props_markdownRenderConfig5.style) || {}),
140
- codeProps: (_props_markdownRenderConfig6 = props.markdownRenderConfig) === null || _props_markdownRenderConfig6 === void 0 ? void 0 : _props_markdownRenderConfig6.codeProps
140
+ codeProps: (_props_markdownRenderConfig6 = props.markdownRenderConfig) === null || _props_markdownRenderConfig6 === void 0 ? void 0 : _props_markdownRenderConfig6.codeProps,
141
+ apaasify: (_props_markdownRenderConfig7 = props.markdownRenderConfig) === null || _props_markdownRenderConfig7 === void 0 ? void 0 : _props_markdownRenderConfig7.apaasify
141
142
  });
142
143
  }
143
144
  // Slate 渲染路径——保持向后兼容
@@ -177,9 +178,13 @@ import { MessagesContext } from "./BubbleContext";
177
178
  hidePadding,
178
179
  typing,
179
180
  (_props_originData = props.originData) === null || _props_originData === void 0 ? void 0 : _props_originData.isLast,
181
+ (_props_originData1 = props.originData) === null || _props_originData1 === void 0 ? void 0 : _props_originData1.isFinished,
180
182
  isPaddingHidden,
181
183
  content,
182
- renderMode
184
+ renderMode,
185
+ props.markdownRenderConfig,
186
+ fncProps,
187
+ standalone
183
188
  ]);
184
189
  var errorDom = /*#__PURE__*/ React.createElement("div", {
185
190
  style: {
@@ -206,7 +211,8 @@ import { MessagesContext } from "./BubbleContext";
206
211
  }, beforeContent, markdown, docListNode, afterContent), extra);
207
212
  }
208
213
  // extraShowOnHover 开启时,无 extra 直接返回内容,避免 hover 出现空浮层
209
- if (!extra) {
214
+ // 生成中(typing)时不使用 Popover,避免 hover 展示 extra
215
+ if (!extra || typing) {
210
216
  return /*#__PURE__*/ React.createElement("div", {
211
217
  style: {
212
218
  display: 'flex',
@@ -274,6 +274,12 @@ import { EXCEPTION } from "./EXCEPTION";
274
274
  import { MarkdownPreview } from "./MarkdownPreview";
275
275
  import { useMessagesContentStyle } from "./style";
276
276
  export var LOADING_FLAT = '...';
277
+ var THINKING_FALLBACK_TEXT = '思考中...';
278
+ var THINKING_DOT_INDICES = [
279
+ 0,
280
+ 1,
281
+ 2
282
+ ];
277
283
  /**
278
284
  * BubbleMessageDisplay 组件 - 聊天气泡消息显示组件
279
285
  *
@@ -364,14 +370,30 @@ export var LOADING_FLAT = '...';
364
370
  contentAfterDom
365
371
  ]);
366
372
  var messageContent = useMemo(function() {
367
- var _props_originData, _props_bubbleRenderConfig, _props_bubbleRenderConfig1, _props_bubbleRenderConfig2, _props_bubbleRenderConfig3, _props_bubbleRenderConfig_extraRender, _props_bubbleRenderConfig4, _props_originData_extra_tags_includes, _props_originData_extra_tags, _props_originData_extra, _props_originData1, _props_originData2, _props_originData_extra1, _props_originData3, _props_originData_extra2, _props_originData4, _props_originData5, _props_originData_extra3, _props_originData6, _props_docListProps, _props_originData7, _props_markdownRenderConfig, _props_originData8, _props_originData9, _props_originData10;
373
+ var _props_originData, _props_bubbleRenderConfig, _props_bubbleRenderConfig1, _props_bubbleRenderConfig2, _props_bubbleRenderConfig3, _props_bubbleRenderConfig_extraRender, _props_bubbleRenderConfig4, _props_originData_extra_tags_includes, _props_originData_extra_tags, _props_originData_extra, _props_originData1, _props_originData2, _props_originData_extra1, _props_originData3, _props_originData_extra2, _props_originData4, _props_originData5, _props_originData_extra3, _props_originData6, _props_docListProps, _props_originData7, _props_markdownRenderConfig, _props_originData8, _props_originData_extra4, _props_originData9, _props_originData10, _props_originData11;
368
374
  if (content === LOADING_FLAT || !((_props_originData = props.originData) === null || _props_originData === void 0 ? void 0 : _props_originData.isFinished) && !content) {
369
375
  var _context_thoughtChain;
370
376
  if ((context === null || context === void 0 ? void 0 : (_context_thoughtChain = context.thoughtChain) === null || _context_thoughtChain === void 0 ? void 0 : _context_thoughtChain.alwaysRender) !== true) {
377
+ var _props_classNames, _props_styles;
371
378
  return wrapSSR(/*#__PURE__*/ React.createElement("div", {
372
379
  className: classNames('agent-item-default-content', "".concat(baseChatCls, "-messages-content-loading"), (context === null || context === void 0 ? void 0 : context.compact) ? "".concat(baseChatCls, "-messages-content-loading-compact") : "".concat(baseChatCls, "-messages-content-loading-default"), hashId),
373
- "data-testid": "message-content"
374
- }, (locale === null || locale === void 0 ? void 0 : locale['chat.message.thinking']) || '思考中...'));
380
+ "data-testid": "message-content",
381
+ role: "status",
382
+ "aria-live": "polite",
383
+ "aria-atomic": "true",
384
+ "aria-label": (locale === null || locale === void 0 ? void 0 : locale['chat.message.thinking']) || THINKING_FALLBACK_TEXT
385
+ }, /*#__PURE__*/ React.createElement("span", {
386
+ className: classNames("".concat(baseChatCls, "-messages-content-loading-dots"), (_props_classNames = props.classNames) === null || _props_classNames === void 0 ? void 0 : _props_classNames.bubbleLoadingIconClassName),
387
+ style: (_props_styles = props.styles) === null || _props_styles === void 0 ? void 0 : _props_styles.bubbleLoadingIconStyle,
388
+ "data-testid": "message-thinking-dots",
389
+ "aria-hidden": "true"
390
+ }, THINKING_DOT_INDICES.map(function(dotIndex) {
391
+ return /*#__PURE__*/ React.createElement("span", {
392
+ key: dotIndex,
393
+ className: "".concat(baseChatCls, "-messages-content-loading-dot"),
394
+ "data-testid": "message-thinking-dot"
395
+ });
396
+ }))));
375
397
  }
376
398
  return null;
377
399
  }
@@ -509,8 +531,15 @@ export var LOADING_FLAT = '...';
509
531
  } : undefined
510
532
  });
511
533
  var extra = (props === null || props === void 0 ? void 0 : (_props_bubbleRenderConfig2 = props.bubbleRenderConfig) === null || _props_bubbleRenderConfig2 === void 0 ? void 0 : _props_bubbleRenderConfig2.extraRender) !== false && (props === null || props === void 0 ? void 0 : (_props_bubbleRenderConfig3 = props.bubbleRenderConfig) === null || _props_bubbleRenderConfig3 === void 0 ? void 0 : _props_bubbleRenderConfig3.extraRender) ? props === null || props === void 0 ? void 0 : (_props_bubbleRenderConfig4 = props.bubbleRenderConfig) === null || _props_bubbleRenderConfig4 === void 0 ? void 0 : (_props_bubbleRenderConfig_extraRender = _props_bubbleRenderConfig4.extraRender) === null || _props_bubbleRenderConfig_extraRender === void 0 ? void 0 : _props_bubbleRenderConfig_extraRender.call(_props_bubbleRenderConfig4, props, defaultExtra) : defaultExtra;
512
- if (content === '...' || /*#__PURE__*/ React.isValidElement(content) || props.placement !== 'left' || (props === null || props === void 0 ? void 0 : (_props_originData1 = props.originData) === null || _props_originData1 === void 0 ? void 0 : (_props_originData_extra = _props_originData1.extra) === null || _props_originData_extra === void 0 ? void 0 : (_props_originData_extra_tags = _props_originData_extra.tags) === null || _props_originData_extra_tags === void 0 ? void 0 : (_props_originData_extra_tags_includes = _props_originData_extra_tags.includes) === null || _props_originData_extra_tags_includes === void 0 ? void 0 : _props_originData_extra_tags_includes.call(_props_originData_extra_tags, 'REJECT_TO_ANSWER')) || ((_props_originData2 = props.originData) === null || _props_originData2 === void 0 ? void 0 : _props_originData2.role) === 'bot') {
513
- var _props_originData11, _props_originData12;
534
+ if (/*#__PURE__*/ React.isValidElement(content)) {
535
+ return wrapSSR(/*#__PURE__*/ React.createElement("div", {
536
+ className: classNames('agent-item-default-content', "".concat(baseChatCls, "-messages-content-message"), hashId),
537
+ "data-testid": "message-box-content",
538
+ onDoubleClick: props.onDoubleClick
539
+ }, beforeContent, content, afterContent, extra));
540
+ }
541
+ if (content === '...' || props.placement !== 'left' || (props === null || props === void 0 ? void 0 : (_props_originData1 = props.originData) === null || _props_originData1 === void 0 ? void 0 : (_props_originData_extra = _props_originData1.extra) === null || _props_originData_extra === void 0 ? void 0 : (_props_originData_extra_tags = _props_originData_extra.tags) === null || _props_originData_extra_tags === void 0 ? void 0 : (_props_originData_extra_tags_includes = _props_originData_extra_tags.includes) === null || _props_originData_extra_tags_includes === void 0 ? void 0 : _props_originData_extra_tags_includes.call(_props_originData_extra_tags, 'REJECT_TO_ANSWER')) || ((_props_originData2 = props.originData) === null || _props_originData2 === void 0 ? void 0 : _props_originData2.role) === 'bot') {
542
+ var _props_originData12, _props_originData13;
514
543
  return wrapSSR(/*#__PURE__*/ React.createElement("div", {
515
544
  className: classNames('agent-item-default-content', "".concat(baseChatCls, "-messages-content-message"), hashId),
516
545
  "data-testid": "message-box-content",
@@ -521,14 +550,14 @@ export var LOADING_FLAT = '...';
521
550
  placement: props.placement,
522
551
  markdownRenderConfig: props.markdownRenderConfig,
523
552
  isFinished: true,
524
- style: ((_props_originData11 = props.originData) === null || _props_originData11 === void 0 ? void 0 : _props_originData11.role) === 'bot' ? {} : {
553
+ style: ((_props_originData12 = props.originData) === null || _props_originData12 === void 0 ? void 0 : _props_originData12.role) === 'bot' ? {} : {
525
554
  color: '#343A45'
526
555
  } // 使用类名方式需要传递className,这里保留style以兼容现有API
527
556
  ,
528
557
  extra: extra,
529
558
  typing: false,
530
559
  originData: props.originData,
531
- content: (_props_originData12 = props.originData) === null || _props_originData12 === void 0 ? void 0 : _props_originData12.content
560
+ content: (_props_originData13 = props.originData) === null || _props_originData13 === void 0 ? void 0 : _props_originData13.content
532
561
  })));
533
562
  }
534
563
  // answerStatus= 'EXCEPTION'时 一定是异常情况
@@ -547,7 +576,7 @@ export var LOADING_FLAT = '...';
547
576
  var _item_output_chunks, _item_output;
548
577
  return ((item === null || item === void 0 ? void 0 : (_item_output = item.output) === null || _item_output === void 0 ? void 0 : (_item_output_chunks = _item_output.chunks) === null || _item_output_chunks === void 0 ? void 0 : _item_output_chunks.length) || 0) > 0;
549
578
  })) && ((_props_docListProps = props.docListProps) === null || _props_docListProps === void 0 ? void 0 : _props_docListProps.enable) !== false) {
550
- var _props_docListProps1, _props_originData_extra4, _props_originData13;
579
+ var _props_docListProps1, _props_originData_extra5, _props_originData14;
551
580
  docInfoDom = /*#__PURE__*/ React.createElement(DocInfoList, _object_spread_props(_object_spread({
552
581
  options: docInfoList.map(function(item) {
553
582
  var _item_output;
@@ -556,7 +585,7 @@ export var LOADING_FLAT = '...';
556
585
  return item;
557
586
  })
558
587
  }, props.docListProps), {
559
- reference_url_info_list: ((_props_docListProps1 = props.docListProps) === null || _props_docListProps1 === void 0 ? void 0 : _props_docListProps1.reference_url_info_list) || ((_props_originData13 = props.originData) === null || _props_originData13 === void 0 ? void 0 : (_props_originData_extra4 = _props_originData13.extra) === null || _props_originData_extra4 === void 0 ? void 0 : _props_originData_extra4.reference_url_info_list) || []
588
+ reference_url_info_list: ((_props_docListProps1 = props.docListProps) === null || _props_docListProps1 === void 0 ? void 0 : _props_docListProps1.reference_url_info_list) || ((_props_originData14 = props.originData) === null || _props_originData14 === void 0 ? void 0 : (_props_originData_extra5 = _props_originData14.extra) === null || _props_originData_extra5 === void 0 ? void 0 : _props_originData_extra5.reference_url_info_list) || []
560
589
  }));
561
590
  }
562
591
  return wrapSSR(/*#__PURE__*/ React.createElement(MarkdownPreview, {
@@ -635,7 +664,7 @@ export var LOADING_FLAT = '...';
635
664
  docListNode: docInfoDom,
636
665
  extra: isExtraNull ? null : extra,
637
666
  htmlRef: props.bubbleListRef,
638
- content: ((_props_originData8 = props.originData) === null || _props_originData8 === void 0 ? void 0 : _props_originData8.isFinished) ? ((_props_originData9 = props.originData) === null || _props_originData9 === void 0 ? void 0 : _props_originData9.content) || (locale === null || locale === void 0 ? void 0 : locale['chat.message.generateFailed']) || '生成回答失败,请重试' : ((_props_originData10 = props.originData) === null || _props_originData10 === void 0 ? void 0 : _props_originData10.content) || '',
667
+ content: ((_props_originData8 = props.originData) === null || _props_originData8 === void 0 ? void 0 : _props_originData8.isFinished) && (props === null || props === void 0 ? void 0 : (_props_originData9 = props.originData) === null || _props_originData9 === void 0 ? void 0 : (_props_originData_extra4 = _props_originData9.extra) === null || _props_originData_extra4 === void 0 ? void 0 : _props_originData_extra4.answerStatus) === 'EXCEPTION' ? ((_props_originData10 = props.originData) === null || _props_originData10 === void 0 ? void 0 : _props_originData10.content) || (locale === null || locale === void 0 ? void 0 : locale['chat.message.generateFailed']) || '生成回答失败,请重试' : ((_props_originData11 = props.originData) === null || _props_originData11 === void 0 ? void 0 : _props_originData11.content) || '',
639
668
  originData: props.originData
640
669
  }));
641
670
  }, [
@@ -51,35 +51,59 @@ function _object_spread_props(target, source) {
51
51
  return target;
52
52
  }
53
53
  import { useEditorStyleRegister } from "../../Hooks/useStyle";
54
+ var THINKING_DOT_SIZE = 4;
55
+ var THINKING_DOT_GAP = 4;
56
+ var THINKING_DOT_ANIMATION = 'agenticBubbleThinkingDotPulse';
57
+ var THINKING_DOT_ANIMATION_DURATION = '1.2s';
58
+ var THINKING_LOADING_PADDING = {
59
+ paddingLeft: 'var(--padding-5x)',
60
+ paddingRight: 'var(--padding-5x)',
61
+ paddingTop: 'var(--padding-1x)',
62
+ paddingBottom: 'var(--padding-2x)'
63
+ };
54
64
  var genStyle = function genStyle(token) {
55
- var _obj;
56
- return _obj = {}, // 加载状态容器(compact模式)
57
- _define_property(_obj, "".concat(token.componentCls, "-messages-content-loading"), {
65
+ var _obj, _obj1;
66
+ return _obj1 = {}, // 加载状态容器(compact模式)
67
+ _define_property(_obj1, "".concat(token.componentCls, "-messages-content-loading"), _object_spread_props(_object_spread({
58
68
  lineHeight: '24px',
59
69
  display: 'flex',
60
70
  alignItems: 'center',
61
- gap: 'var(--padding-2x)',
62
- padding: 'var(--padding-3x)',
63
- '&-compact': {
64
- padding: 'var(--padding-2x)'
65
- },
66
- '&-default': {
67
- padding: 'var(--padding-3x)'
68
- }
69
- }), // 消息内容容器
70
- _define_property(_obj, "".concat(token.componentCls, "-messages-content-message"), {
71
+ gap: 'var(--padding-2x)'
72
+ }, THINKING_LOADING_PADDING), (_obj = {
73
+ color: 'rgb(102, 111, 141)'
74
+ }, _define_property(_obj, "&-dots", {
75
+ display: 'inline-flex',
76
+ alignItems: 'center',
77
+ gap: THINKING_DOT_GAP,
78
+ lineHeight: 1
79
+ }), _define_property(_obj, "&-dot", {
80
+ width: THINKING_DOT_SIZE,
81
+ height: THINKING_DOT_SIZE,
82
+ borderRadius: '50%',
83
+ backgroundColor: 'currentColor',
84
+ opacity: 0.35,
85
+ animationName: THINKING_DOT_ANIMATION,
86
+ animationDuration: THINKING_DOT_ANIMATION_DURATION,
87
+ animationTimingFunction: 'ease-in-out',
88
+ animationIterationCount: 'infinite'
89
+ }), _define_property(_obj, "&-dot:nth-of-type(2)", {
90
+ animationDelay: '0.2s'
91
+ }), _define_property(_obj, "&-dot:nth-of-type(3)", {
92
+ animationDelay: '0.4s'
93
+ }), _define_property(_obj, '&-compact', _object_spread({}, THINKING_LOADING_PADDING)), _define_property(_obj, '&-default', _object_spread({}, THINKING_LOADING_PADDING)), _obj))), // 消息内容容器
94
+ _define_property(_obj1, "".concat(token.componentCls, "-messages-content-message"), {
71
95
  lineHeight: '24px'
72
96
  }), // 用户消息文本颜色
73
- _define_property(_obj, "".concat(token.componentCls, "-messages-content-user-text"), {
97
+ _define_property(_obj1, "".concat(token.componentCls, "-messages-content-user-text"), {
74
98
  color: '#343A45'
75
99
  }), // Popover 标题容器
76
- _define_property(_obj, "".concat(token.componentCls, "-messages-content-popover-title"), {
100
+ _define_property(_obj1, "".concat(token.componentCls, "-messages-content-popover-title"), {
77
101
  display: 'flex',
78
102
  justifyContent: 'space-between',
79
103
  alignItems: 'center',
80
104
  fontSize: '1em'
81
105
  }), // Popover 内容容器
82
- _define_property(_obj, "".concat(token.componentCls, "-messages-content-popover-content"), {
106
+ _define_property(_obj1, "".concat(token.componentCls, "-messages-content-popover-content"), {
83
107
  width: 400,
84
108
  display: 'flex',
85
109
  maxHeight: 400,
@@ -87,17 +111,17 @@ var genStyle = function genStyle(token) {
87
111
  flexDirection: 'column',
88
112
  gap: 'var(--padding-3x)'
89
113
  }), // MarkdownEditor 容器样式
90
- _define_property(_obj, "".concat(token.componentCls, "-messages-content-markdown-editor"), {
114
+ _define_property(_obj1, "".concat(token.componentCls, "-messages-content-markdown-editor"), {
91
115
  padding: 0,
92
116
  width: '100%'
93
117
  }), // 重新生成按钮容器
94
- _define_property(_obj, "div[data-messages-content-retry]", {
118
+ _define_property(_obj1, "div[data-messages-content-retry]", {
95
119
  gap: 4,
96
120
  display: 'flex',
97
121
  cursor: 'pointer',
98
122
  alignItems: 'center'
99
123
  }), // 文档标签容器
100
- _define_property(_obj, "".concat(token.componentCls, "-messages-content-doc-tag"), {
124
+ _define_property(_obj1, "".concat(token.componentCls, "-messages-content-doc-tag"), {
101
125
  borderRadius: 'var(--padding-5x)',
102
126
  opacity: 1,
103
127
  display: 'flex',
@@ -110,16 +134,25 @@ var genStyle = function genStyle(token) {
110
134
  cursor: 'pointer',
111
135
  zIndex: 1
112
136
  }), // 文档标签图标
113
- _define_property(_obj, "".concat(token.componentCls, "-messages-content-doc-tag-icon"), {
137
+ _define_property(_obj1, "".concat(token.componentCls, "-messages-content-doc-tag-icon"), {
114
138
  width: 24
115
139
  }), // 文档名称文本
116
- _define_property(_obj, "".concat(token.componentCls, "-messages-content-doc-name"), {
140
+ _define_property(_obj1, "".concat(token.componentCls, "-messages-content-doc-name"), {
117
141
  overflow: 'hidden',
118
142
  textOverflow: 'ellipsis',
119
143
  WebkitBoxOrient: 'vertical',
120
144
  WebkitLineClamp: 2,
121
145
  display: '-webkit-box'
122
- }), _obj;
146
+ }), _define_property(_obj1, "@keyframes ".concat(THINKING_DOT_ANIMATION), {
147
+ '0%, 80%, 100%': {
148
+ transform: 'scale(0.6)',
149
+ opacity: 0.35
150
+ },
151
+ '40%': {
152
+ transform: 'scale(1)',
153
+ opacity: 1
154
+ }
155
+ }), _obj1;
123
156
  };
124
157
  export function useMessagesContentStyle(componentCls) {
125
158
  return useEditorStyleRegister('BubbleMessageDisplay', function(token) {
@@ -304,6 +304,10 @@ export interface BubbleProps<T = Record<string, any>> extends BubbleItemStylePro
304
304
  * 等效于 markdownRenderConfig={{ renderMode }}
305
305
  */
306
306
  renderMode?: 'slate' | 'markdown';
307
+ /**
308
+ * 与 `renderMode` 等价,兼容部分协议字段(如 `renderType=markdown`)
309
+ */
310
+ renderType?: 'slate' | 'markdown';
307
311
  /**
308
312
  * 自定义配置
309
313
  */
@@ -212,7 +212,7 @@
212
212
  'workspace.file.linkCopied': '已复制链接',
213
213
  'workspace.file.copyFailed': '复制失败',
214
214
  // MarkdownInputField 组件相关
215
- 'markdownInput.fileSizeExceeded': '文件大小超过 ${maxSize} KB',
215
+ 'markdownInput.fileSizeExceeded': '超过 ${maxSize} KB',
216
216
  'markdownInput.maxFileCountExceeded': '最多只能上传 ${maxFileCount} 个文件',
217
217
  'markdownInput.minFileCountRequired': '至少需要上传 ${minFileCount} 个文件',
218
218
  // 文档信息相关
@@ -634,7 +634,7 @@
634
634
  'workspace.file.linkCopied': 'Link copied',
635
635
  'workspace.file.copyFailed': 'Copy failed',
636
636
  // MarkdownInputField component related
637
- 'markdownInput.fileSizeExceeded': 'File size exceeds ${maxSize} KB',
637
+ 'markdownInput.fileSizeExceeded': 'Exceeds ${maxSize} KB',
638
638
  'markdownInput.maxFileCountExceeded': 'Maximum ${maxFileCount} files allowed',
639
639
  'markdownInput.minFileCountRequired': 'At least ${minFileCount} files required',
640
640
  // Document info related
@@ -156,6 +156,7 @@ import { createEditor } from "slate";
156
156
  import { withHistory } from "slate-history";
157
157
  import { withReact } from "slate-react";
158
158
  import { I18nContext, I18nProvide } from "../I18n";
159
+ import { MarkdownRenderer } from "../MarkdownRenderer";
159
160
  import { CommentList } from "./editor/components/CommentList";
160
161
  import { SlateMarkdownEditor } from "./editor/Editor";
161
162
  import { parserMdToSchema } from "./editor/parser/parserMdToSchema";
@@ -248,11 +249,11 @@ var I18nBoundary = function I18nBoundary(param) {
248
249
  * - 支持键盘事件处理
249
250
  * - 提供Markdown解析和渲染
250
251
  */ export var BaseMarkdownEditor = function BaseMarkdownEditor(props) {
251
- var _props_typewriter, _props_readonly;
252
+ var _ref, _props_typewriter, _props_readonly;
252
253
  var _props_jinja, _effectiveJinja_templatePanel, _props_floatBar, _props_floatBar1, _props_textAreaProps;
253
254
  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 ? {
254
255
  height: '100%'
255
- } : _props_contentStyle, editorStyle = props.editorStyle, height = props.height, children = props.children, rest = _object_without_properties(props, [
256
+ } : _props_contentStyle, editorStyle = props.editorStyle, height = props.height, children = props.children, renderMode = props.renderMode, renderType = props.renderType, rest = _object_without_properties(props, [
256
257
  "initValue",
257
258
  "width",
258
259
  "toolBar",
@@ -264,8 +265,11 @@ var I18nBoundary = function I18nBoundary(param) {
264
265
  "contentStyle",
265
266
  "editorStyle",
266
267
  "height",
267
- "children"
268
+ "children",
269
+ "renderMode",
270
+ "renderType"
268
271
  ]);
272
+ var effectiveRenderMode = (_ref = renderMode !== null && renderMode !== void 0 ? renderMode : renderType) !== null && _ref !== void 0 ? _ref : 'slate';
269
273
  // 是否挂载
270
274
  var _useState = _sliced_to_array(useState(false), 2), editorMountStatus = _useState[0], setMountedStatus = _useState[1];
271
275
  var _useState1 = _sliced_to_array(useState(false), 2), isEditorFocused = _useState1[0], setIsEditorFocused = _useState1[1];
@@ -412,7 +416,35 @@ var I18nBoundary = function I18nBoundary(param) {
412
416
  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);
413
417
  var _useState7 = _sliced_to_array(useState(false), 2), openJinjaTemplate = _useState7[0], setOpenJinjaTemplate = _useState7[1];
414
418
  var _useState8 = _sliced_to_array(useState(null), 2), jinjaAnchorPath = _useState8[0], setJinjaAnchorPath = _useState8[1];
415
- var _obj;
419
+ if (readonly && effectiveRenderMode === 'markdown') {
420
+ var _props_typewriter1;
421
+ var _obj;
422
+ return wrapSSR(/*#__PURE__*/ React.createElement(I18nBoundary, null, /*#__PURE__*/ React.createElement(PluginContext.Provider, {
423
+ value: props.plugins || []
424
+ }, /*#__PURE__*/ React.createElement("div", {
425
+ id: props.id ? String(props.id) || undefined : undefined,
426
+ className: classNames(baseClassName, 'markdown-editor', hashId, props.className, (_obj = {}, _define_property(_obj, "".concat(baseClassName, "-readonly"), true), _define_property(_obj, "".concat(baseClassName, "-report"), props.reportMode), _define_property(_obj, "".concat(baseClassName, "-slide"), props.slideMode), _obj)),
427
+ style: _object_spread({
428
+ width: width || '100%',
429
+ height: height || 'auto'
430
+ }, style),
431
+ ref: markdownContainerRef
432
+ }, /*#__PURE__*/ React.createElement(MarkdownRenderer, {
433
+ content: initValue || '',
434
+ streaming: (_props_typewriter1 = props.typewriter) !== null && _props_typewriter1 !== void 0 ? _props_typewriter1 : false,
435
+ plugins: props.plugins,
436
+ remarkPlugins: props.markdownToHtmlOptions,
437
+ codeProps: props.codeProps,
438
+ apaasify: props.apaasify,
439
+ style: _object_spread({
440
+ height: '100%'
441
+ }, contentStyle),
442
+ prefixCls: baseClassName,
443
+ fncProps: props.fncProps,
444
+ linkConfig: props.linkConfig
445
+ }), children))));
446
+ }
447
+ var _obj1;
416
448
  return wrapSSR(/*#__PURE__*/ React.createElement(I18nBoundary, null, /*#__PURE__*/ React.createElement(PluginContext.Provider, {
417
449
  value: props.plugins || []
418
450
  }, /*#__PURE__*/ React.createElement(EditorStoreContext.Provider, {
@@ -445,7 +477,7 @@ var I18nBoundary = function I18nBoundary(param) {
445
477
  }
446
478
  }, /*#__PURE__*/ React.createElement("div", {
447
479
  id: props.id ? String(props.id) || undefined : undefined,
448
- className: classNames(baseClassName, 'markdown-editor', hashId, props.className, (_obj = {}, _define_property(_obj, "".concat(baseClassName, "-readonly"), readonly), _define_property(_obj, "".concat(baseClassName, "-edit"), !readonly), _define_property(_obj, "".concat(baseClassName, "-report"), props.reportMode), _define_property(_obj, "".concat(baseClassName, "-slide"), props.slideMode), _obj)),
480
+ className: classNames(baseClassName, 'markdown-editor', hashId, props.className, (_obj1 = {}, _define_property(_obj1, "".concat(baseClassName, "-readonly"), readonly), _define_property(_obj1, "".concat(baseClassName, "-edit"), !readonly), _define_property(_obj1, "".concat(baseClassName, "-report"), props.reportMode), _define_property(_obj1, "".concat(baseClassName, "-slide"), props.slideMode), _obj1)),
449
481
  style: _object_spread({
450
482
  width: width || '100%',
451
483
  height: height || 'auto'
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import { RenderElementProps } from 'slate-react';
3
+ export declare const AgenticUiTaskBlock: React.FC<RenderElementProps>;
4
+ export declare const ReadonlyAgenticUiTaskBlock: React.NamedExoticComponent<RenderElementProps>;
@@ -0,0 +1,74 @@
1
+ function _define_property(obj, key, value) {
2
+ if (key in obj) {
3
+ Object.defineProperty(obj, key, {
4
+ value: value,
5
+ enumerable: true,
6
+ configurable: true,
7
+ writable: true
8
+ });
9
+ } else {
10
+ obj[key] = value;
11
+ }
12
+ return obj;
13
+ }
14
+ function _object_spread(target) {
15
+ for(var i = 1; i < arguments.length; i++){
16
+ var source = arguments[i] != null ? arguments[i] : {};
17
+ var ownKeys = Object.keys(source);
18
+ if (typeof Object.getOwnPropertySymbols === "function") {
19
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
20
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
21
+ }));
22
+ }
23
+ ownKeys.forEach(function(key) {
24
+ _define_property(target, key, source[key]);
25
+ });
26
+ }
27
+ return target;
28
+ }
29
+ function ownKeys(object, enumerableOnly) {
30
+ var keys = Object.keys(object);
31
+ if (Object.getOwnPropertySymbols) {
32
+ var symbols = Object.getOwnPropertySymbols(object);
33
+ if (enumerableOnly) {
34
+ symbols = symbols.filter(function(sym) {
35
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
36
+ });
37
+ }
38
+ keys.push.apply(keys, symbols);
39
+ }
40
+ return keys;
41
+ }
42
+ function _object_spread_props(target, source) {
43
+ source = source != null ? source : {};
44
+ if (Object.getOwnPropertyDescriptors) {
45
+ Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
46
+ } else {
47
+ ownKeys(Object(source)).forEach(function(key) {
48
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
49
+ });
50
+ }
51
+ return target;
52
+ }
53
+ import React from "react";
54
+ import { TaskList } from "../../../../TaskList";
55
+ import { normalizeTaskListPropsFromJson } from "./agenticUiEmbedUtils";
56
+ export var AgenticUiTaskBlock = function AgenticUiTaskBlock(param) {
57
+ var attributes = param.attributes, children = param.children, element = param.element;
58
+ var listProps = normalizeTaskListPropsFromJson(element.value);
59
+ return /*#__PURE__*/ React.createElement("div", _object_spread_props(_object_spread({}, attributes), {
60
+ contentEditable: false,
61
+ "data-testid": "agentic-ui-task-block",
62
+ style: {
63
+ margin: '0.75em 0'
64
+ }
65
+ }), /*#__PURE__*/ React.createElement(TaskList, listProps), /*#__PURE__*/ React.createElement("span", {
66
+ "data-testid": "agentic-ui-task-hidden-children",
67
+ style: {
68
+ display: 'none'
69
+ }
70
+ }, children));
71
+ };
72
+ AgenticUiTaskBlock.displayName = 'AgenticUiTaskBlock';
73
+ export var ReadonlyAgenticUiTaskBlock = /*#__PURE__*/ React.memo(AgenticUiTaskBlock);
74
+ ReadonlyAgenticUiTaskBlock.displayName = 'ReadonlyAgenticUiTaskBlock';
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import { RenderElementProps } from 'slate-react';
3
+ export declare const AgenticUiToolUseBarBlock: React.FC<RenderElementProps>;
4
+ export declare const ReadonlyAgenticUiToolUseBarBlock: React.NamedExoticComponent<RenderElementProps>;