@ant-design/agentic-ui 2.29.58 → 2.30.0

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 (55) hide show
  1. package/dist/Bubble/List/index.d.ts +7 -0
  2. package/dist/Bubble/List/index.js +10 -1
  3. package/dist/Bubble/MessagesContent/BubbleExtra.js +9 -4
  4. package/dist/Bubble/MessagesContent/MarkdownPreview.js +27 -3
  5. package/dist/Bubble/UserBubble.js +3 -1
  6. package/dist/Bubble/type.d.ts +7 -0
  7. package/dist/Hooks/useLanguage.d.ts +1 -0
  8. package/dist/I18n/locales.d.ts +1 -0
  9. package/dist/I18n/locales.js +3 -1
  10. package/dist/MarkdownEditor/editor/parser/parserMarkdownToSlateNode.js +1 -1
  11. package/dist/MarkdownEditor/plugin.d.ts +15 -0
  12. package/dist/MarkdownEditor/style.js +156 -326
  13. package/dist/MarkdownEditor/types.d.ts +9 -0
  14. package/dist/MarkdownInputField/AttachmentButton/AttachmentButtonPopover.js +1 -1
  15. package/dist/MarkdownInputField/FileUploadManager/index.js +3 -2
  16. package/dist/MarkdownInputField/hooks/useMarkdownInputFieldRefs.js +10 -3
  17. package/dist/MarkdownRenderer/AnimationText.d.ts +22 -0
  18. package/dist/MarkdownRenderer/AnimationText.js +124 -0
  19. package/dist/MarkdownRenderer/CharacterQueue.d.ts +36 -0
  20. package/dist/MarkdownRenderer/CharacterQueue.js +188 -0
  21. package/dist/MarkdownRenderer/MarkdownRenderer.d.ts +13 -0
  22. package/dist/MarkdownRenderer/MarkdownRenderer.js +348 -0
  23. package/dist/MarkdownRenderer/index.d.ts +11 -0
  24. package/dist/MarkdownRenderer/index.js +9 -0
  25. package/dist/MarkdownRenderer/renderers/ChartRenderer.d.ts +12 -0
  26. package/dist/MarkdownRenderer/renderers/ChartRenderer.js +395 -0
  27. package/dist/MarkdownRenderer/renderers/CodeRenderer.d.ts +7 -0
  28. package/dist/MarkdownRenderer/renderers/CodeRenderer.js +218 -0
  29. package/dist/MarkdownRenderer/renderers/MermaidRenderer.d.ts +7 -0
  30. package/dist/MarkdownRenderer/renderers/MermaidRenderer.js +43 -0
  31. package/dist/MarkdownRenderer/renderers/SchemaRenderer.d.ts +15 -0
  32. package/dist/MarkdownRenderer/renderers/SchemaRenderer.js +115 -0
  33. package/dist/MarkdownRenderer/renderers/index.d.ts +4 -0
  34. package/dist/MarkdownRenderer/renderers/index.js +4 -0
  35. package/dist/MarkdownRenderer/style.d.ts +16 -0
  36. package/dist/MarkdownRenderer/style.js +46 -0
  37. package/dist/MarkdownRenderer/types.d.ts +74 -0
  38. package/dist/MarkdownRenderer/types.js +1 -0
  39. package/dist/MarkdownRenderer/useMarkdownToReact.d.ts +23 -0
  40. package/dist/MarkdownRenderer/useMarkdownToReact.js +1240 -0
  41. package/dist/MarkdownRenderer/useStreaming.d.ts +29 -0
  42. package/dist/MarkdownRenderer/useStreaming.js +392 -0
  43. package/dist/Plugins/chart/AreaChart/index.js +4 -2
  44. package/dist/Plugins/chart/LineChart/index.js +4 -2
  45. package/dist/Plugins/chart/components/ChartContainer/ChartErrorBoundary.d.ts +8 -0
  46. package/dist/Plugins/chart/components/ChartContainer/ChartErrorBoundary.js +31 -6
  47. package/dist/Plugins/mermaid/style.js +0 -3
  48. package/dist/TaskList/TaskList.js +3 -12
  49. package/dist/TaskList/components/TaskListItem.js +3 -12
  50. package/dist/ThoughtChainList/ThoughtChainListItem.js +2 -4
  51. package/dist/ThoughtChainList/index.js +4 -21
  52. package/dist/ToolUseBarThink/index.js +20 -59
  53. package/dist/index.d.ts +1 -0
  54. package/dist/index.js +2 -0
  55. package/package.json +2 -1
@@ -169,6 +169,13 @@ export type BubbleListProps = {
169
169
  onAvatarClick?: BubbleProps['onAvatarClick'];
170
170
  onDoubleClick?: BubbleProps['onDoubleClick'];
171
171
  markdownRenderConfig?: BubbleProps['markdownRenderConfig'];
172
+ /**
173
+ * 渲染模式快捷设置
174
+ * - 'slate': 使用 Slate 编辑器渲染(默认)
175
+ * - 'markdown': 使用轻量 MarkdownRenderer(无 Slate 实例,性能更优)
176
+ * 等效于 markdownRenderConfig={{ renderMode }}
177
+ */
178
+ renderMode?: 'slate' | 'markdown';
172
179
  docListProps?: BubbleProps['docListProps'];
173
180
  /**
174
181
  * 动态控制复制按钮的显隐
@@ -121,7 +121,16 @@ 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, markdownRenderConfig = props.markdownRenderConfig, 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;
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
126
+ var markdownRenderConfig = useMemo(function() {
127
+ return renderMode ? _object_spread_props(_object_spread({}, markdownRenderConfigProp), {
128
+ renderMode: renderMode
129
+ }) : markdownRenderConfigProp;
130
+ }, [
131
+ markdownRenderConfigProp,
132
+ renderMode
133
+ ]);
125
134
  // 兼容旧属性
126
135
  var loading = isLoading !== null && isLoading !== void 0 ? isLoading : legacyLoading;
127
136
  var getPrefixCls = useContext(ConfigProvider.ConfigContext).getPrefixCls;
@@ -727,21 +727,26 @@ import { VoiceButton } from "./VoiceButton";
727
727
  voiceDom
728
728
  ];
729
729
  }
730
+ var inPopover = context === null || context === void 0 ? void 0 : context.extraShowOnHover;
730
731
  return /*#__PURE__*/ React.createElement("div", {
731
732
  className: prefixCls,
732
- style: _object_spread({
733
+ style: _object_spread(_object_spread_props(_object_spread({
733
734
  display: 'flex',
734
735
  alignItems: 'center',
735
736
  justifyContent: 'space-between',
736
- width: '100%',
737
+ width: '100%'
738
+ }, inPopover ? {
739
+ padding: 0
740
+ } : {
737
741
  paddingLeft: placement === 'right' ? 0 : 'var(--padding-5x)',
738
742
  paddingRight: placement === 'right' ? 0 : 'var(--padding-5x)',
739
743
  paddingTop: placement === 'right' ? 0 : 'var(--padding-1x)',
740
- paddingBottom: placement === 'right' ? 0 : 'var(--padding-2x)',
744
+ paddingBottom: placement === 'right' ? 0 : 'var(--padding-2x)'
745
+ }), {
741
746
  color: 'var(--color-gray-text-secondary)',
742
747
  fontSize: (context === null || context === void 0 ? void 0 : context.compact) ? '11px' : '13px',
743
748
  gap: 4
744
- }, props.style)
749
+ }), props.style)
745
750
  }, typing && originalData.content !== '...' ? /*#__PURE__*/ React.createElement("div", {
746
751
  style: {
747
752
  display: 'flex',
@@ -55,6 +55,7 @@ import React, { useContext, useEffect, useMemo } from "react";
55
55
  import { ErrorBoundary } from "react-error-boundary";
56
56
  import { MarkdownEditor, parserMdToSchema } from "../..";
57
57
  import { useLocale } from "../../I18n";
58
+ import { MarkdownRenderer } from "../../MarkdownRenderer";
58
59
  import { BubbleConfigContext } from "../BubbleConfigProvide";
59
60
  import { MessagesContext } from "./BubbleContext";
60
61
  /**
@@ -93,7 +94,8 @@ import { MessagesContext } from "./BubbleContext";
93
94
  * />
94
95
  * ```
95
96
  */ export var MarkdownPreview = function MarkdownPreview(props) {
96
- var _props_originData;
97
+ var _ref;
98
+ var _props_markdownRenderConfig, _props_originData;
97
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;
98
100
  var MarkdownEditorRef = React.useRef(undefined);
99
101
  var hidePadding = (useContext(MessagesContext) || {}).hidePadding;
@@ -102,6 +104,7 @@ import { MessagesContext } from "./BubbleContext";
102
104
  var standalone = config === null || config === void 0 ? void 0 : config.standalone;
103
105
  var extraShowOnHover = config === null || config === void 0 ? void 0 : config.extraShowOnHover;
104
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';
105
108
  var isPaddingHidden = useMemo(function() {
106
109
  return !!extra;
107
110
  }, [
@@ -110,14 +113,34 @@ import { MessagesContext } from "./BubbleContext";
110
113
  ]);
111
114
  useEffect(function() {
112
115
  var _MarkdownEditorRef_current;
116
+ if (renderMode !== 'slate') return;
113
117
  var schema = parserMdToSchema(content).schema;
114
118
  (_MarkdownEditorRef_current = MarkdownEditorRef.current) === null || _MarkdownEditorRef_current === void 0 ? void 0 : _MarkdownEditorRef_current.store.updateNodeList(schema);
115
119
  }, [
116
- content
120
+ content,
121
+ renderMode
117
122
  ]);
118
123
  var markdown = useMemo(function() {
119
124
  var _ref;
120
125
  var _content_includes, _htmlRef_current, _htmlRef_current1, _props_markdownRenderConfig, _props_originData, _props_originData1, _props_originData2, _props_markdownRenderConfig1, _props_markdownRenderConfig2, _props_markdownRenderConfig3;
126
+ // MarkdownRenderer 渲染路径——轻量,不创建 Slate 实例
127
+ if (renderMode === 'markdown') {
128
+ var _props_originData3, _props_markdownRenderConfig4, _props_markdownRenderConfig5, _props_markdownRenderConfig6;
129
+ return /*#__PURE__*/ React.createElement(MarkdownRenderer, {
130
+ content: content,
131
+ streaming: typing,
132
+ isFinished: (_props_originData3 = props.originData) === null || _props_originData3 === void 0 ? void 0 : _props_originData3.isFinished,
133
+ plugins: (_props_markdownRenderConfig4 = props.markdownRenderConfig) === null || _props_markdownRenderConfig4 === void 0 ? void 0 : _props_markdownRenderConfig4.plugins,
134
+ fncProps: fncProps,
135
+ style: _object_spread({
136
+ maxWidth: standalone ? '100%' : undefined,
137
+ padding: isPaddingHidden ? 0 : undefined,
138
+ margin: isPaddingHidden ? 0 : undefined
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
141
+ });
142
+ }
143
+ // Slate 渲染路径——保持向后兼容
121
144
  var minWidth = (content === null || content === void 0 ? void 0 : (_content_includes = content.includes) === null || _content_includes === void 0 ? void 0 : _content_includes.call(content, 'chartType')) ? standalone ? Math.max(((htmlRef === null || htmlRef === void 0 ? void 0 : (_htmlRef_current = htmlRef.current) === null || _htmlRef_current === void 0 ? void 0 : _htmlRef_current.clientWidth) || 600) - 23, 500) : Math.min(((htmlRef === null || htmlRef === void 0 ? void 0 : (_htmlRef_current1 = htmlRef.current) === null || _htmlRef_current1 === void 0 ? void 0 : _htmlRef_current1.clientWidth) || 600) - 128, 500) : undefined;
122
145
  return /*#__PURE__*/ React.createElement(MarkdownEditor, _object_spread_props(_object_spread({}, props.markdownRenderConfig || {}), {
123
146
  fncProps: fncProps,
@@ -155,7 +178,8 @@ import { MessagesContext } from "./BubbleContext";
155
178
  typing,
156
179
  (_props_originData = props.originData) === null || _props_originData === void 0 ? void 0 : _props_originData.isLast,
157
180
  isPaddingHidden,
158
- content
181
+ content,
182
+ renderMode
159
183
  ]);
160
184
  var errorDom = /*#__PURE__*/ React.createElement("div", {
161
185
  style: {
@@ -175,12 +175,14 @@ var getContentStyle = function getContentStyle(standalone, customStyle) {
175
175
  var contentContainerStyle = getContentContainerStyle();
176
176
  var fileViewStyle = getFileViewStyle(standalone, styles === null || styles === void 0 ? void 0 : styles.bubbleListItemExtraStyle);
177
177
  var contentStyle = getContentStyle(standalone, styles === null || styles === void 0 ? void 0 : styles.bubbleListItemContentStyle);
178
+ // 用户气泡默认 hover 展示复制等操作,父级可透传覆盖
179
+ var effectiveExtraShowOnHover = extraShowOnHover !== null && extraShowOnHover !== void 0 ? extraShowOnHover : true;
178
180
  var _obj;
179
181
  var itemDom = wrapSSR(/*#__PURE__*/ React.createElement(BubbleConfigContext.Provider, {
180
182
  value: {
181
183
  compact: compact,
182
184
  standalone: !!standalone,
183
- extraShowOnHover: extraShowOnHover,
185
+ extraShowOnHover: effectiveExtraShowOnHover,
184
186
  bubble: props
185
187
  }
186
188
  }, /*#__PURE__*/ React.createElement(Flex, {
@@ -297,6 +297,13 @@ export interface BubbleProps<T = Record<string, any>> extends BubbleItemStylePro
297
297
  * Markdown 渲染配置
298
298
  */
299
299
  markdownRenderConfig?: MarkdownEditorProps;
300
+ /**
301
+ * 渲染模式快捷设置
302
+ * - 'slate': 使用 Slate 编辑器渲染(默认)
303
+ * - 'markdown': 使用轻量 MarkdownRenderer(无 Slate 实例,性能更优)
304
+ * 等效于 markdownRenderConfig={{ renderMode }}
305
+ */
306
+ renderMode?: 'slate' | 'markdown';
300
307
  /**
301
308
  * 自定义配置
302
309
  */
@@ -406,6 +406,7 @@ export declare function useLanguage(): {
406
406
  'comment.jumpTo': string;
407
407
  'chart.renderFailed': string;
408
408
  'chart.renderFailedSubTitle': string;
409
+ 'chart.retry': string;
409
410
  'chart.legend.show': string;
410
411
  'chart.legend.hide': string;
411
412
  'chart.legend.prevPage': string;
@@ -368,6 +368,7 @@ export declare const cnLabels: {
368
368
  'comment.jumpTo': string;
369
369
  'chart.renderFailed': string;
370
370
  'chart.renderFailedSubTitle': string;
371
+ 'chart.retry': string;
371
372
  'chart.legend.show': string;
372
373
  'chart.legend.hide': string;
373
374
  'chart.legend.prevPage': string;
@@ -335,7 +335,7 @@
335
335
  'input.selectFile': '选择文件',
336
336
  'input.openGallery': '打开相册',
337
337
  'input.openFile': '打开文件',
338
- 'input.supportedFormatMessage': '支持上传文件,每个文件不超过 ${maxSize},支持 ${extensions}等格式。',
338
+ 'input.supportedFormatMessage': '每个文件不超过 ${maxSize},支持 ${extensions}等格式。',
339
339
  'input.sendButtonTooltip.send': '按 Enter 键发送',
340
340
  'input.sendButtonTooltip.newline': '按 Shift+Enter 键换行',
341
341
  'input.sendButtonTooltip.send.mod': '按 Cmd/Ctrl+Enter 键发送',
@@ -393,6 +393,7 @@
393
393
  // 图表错误相关
394
394
  'chart.renderFailed': '图表渲染失败',
395
395
  'chart.renderFailedSubTitle': '图表组件遇到了一个错误,请稍后重试',
396
+ 'chart.retry': '重新渲染',
396
397
  // DonutChart 图例相关
397
398
  'chart.legend.show': '显示',
398
399
  'chart.legend.hide': '隐藏',
@@ -814,6 +815,7 @@
814
815
  // Chart error related
815
816
  'chart.renderFailed': 'Chart Rendering Failed',
816
817
  'chart.renderFailedSubTitle': 'The chart component encountered an error, please try again later',
818
+ 'chart.retry': 'Retry',
817
819
  // DonutChart legend related
818
820
  'chart.legend.show': 'Show',
819
821
  'chart.legend.hide': 'Hide',
@@ -98,12 +98,12 @@ function _unsupported_iterable_to_array(o, minLen) {
98
98
  if (n === "Map" || n === "Set") return Array.from(n);
99
99
  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
100
100
  }
101
+ import { preprocessProtectTimeFromDirective } from "./constants";
101
102
  import { applyContextPropsAndConfig } from "./parse/applyContextPropsAndConfig";
102
103
  import { handleBlockquote, handleContainerDirective, handleFootnoteDefinition, handleHeading, handleList, handleListItem, handleParagraph, handleTextAndInlineElements } from "./parse/parseBlockElements";
103
104
  import { handleCode, handleYaml } from "./parse/parseCode";
104
105
  import { handleDefinition, handleInlineCode, handleThematicBreak } from "./parse/parseElements";
105
106
  import { addEmptyLinesIfNeeded } from "./parse/parseEmptyLines";
106
- import { preprocessProtectTimeFromDirective } from "./constants";
107
107
  import { handleFootnoteReference } from "./parse/parseFootnote";
108
108
  import { handleHtml, preprocessNonStandardHtmlTags, preprocessThinkTags } from "./parse/parseHtml";
109
109
  import { handleInlineMath, handleMath } from "./parse/parseMath";
@@ -1,8 +1,21 @@
1
1
  import { Node } from 'mdast';
2
2
  import React from 'react';
3
3
  import { Editor, NodeEntry } from 'slate';
4
+ import type { Plugin } from 'unified';
4
5
  import { ElementProps, Elements } from './el';
5
6
  import type { JinjaConfig } from './types';
7
+ /**
8
+ * MarkdownRenderer 渲染模式下的插件配置。
9
+ * 与 Slate 编辑器侧的 elements 并行,用于 HTML/React 渲染模式。
10
+ */
11
+ export interface RendererPlugin {
12
+ /** 用于 HTML/React 渲染模式的组件映射(tagName → Component) */
13
+ rendererComponents?: Record<string, React.ComponentType<any>>;
14
+ /** 自定义 rehype 插件 */
15
+ rehypePlugins?: Plugin[];
16
+ /** 自定义 remark 插件 */
17
+ remarkPlugins?: Plugin[];
18
+ }
6
19
  export type MarkdownEditorPlugin = {
7
20
  elements?: Record<string, React.ComponentType<ElementProps<any>>>;
8
21
  parseMarkdown?: {
@@ -20,5 +33,7 @@ export type MarkdownEditorPlugin = {
20
33
  jinja?: true;
21
34
  /** 通过插件启用时的默认 Jinja 配置(当未传 props.jinja 时使用) */
22
35
  jinjaConfig?: JinjaConfig;
36
+ /** MarkdownRenderer 渲染模式下的配置 */
37
+ renderer?: RendererPlugin;
23
38
  };
24
39
  export declare const PluginContext: React.Context<MarkdownEditorPlugin[]>;