@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.
- package/dist/Bubble/List/index.d.ts +7 -0
- package/dist/Bubble/List/index.js +10 -1
- package/dist/Bubble/MessagesContent/BubbleExtra.js +9 -4
- package/dist/Bubble/MessagesContent/MarkdownPreview.js +27 -3
- package/dist/Bubble/UserBubble.js +3 -1
- package/dist/Bubble/type.d.ts +7 -0
- package/dist/Hooks/useLanguage.d.ts +1 -0
- package/dist/I18n/locales.d.ts +1 -0
- package/dist/I18n/locales.js +3 -1
- package/dist/MarkdownEditor/editor/parser/parserMarkdownToSlateNode.js +1 -1
- package/dist/MarkdownEditor/plugin.d.ts +15 -0
- package/dist/MarkdownEditor/style.js +156 -326
- package/dist/MarkdownEditor/types.d.ts +9 -0
- package/dist/MarkdownInputField/AttachmentButton/AttachmentButtonPopover.js +1 -1
- package/dist/MarkdownInputField/FileUploadManager/index.js +3 -2
- package/dist/MarkdownInputField/hooks/useMarkdownInputFieldRefs.js +10 -3
- package/dist/MarkdownRenderer/AnimationText.d.ts +22 -0
- package/dist/MarkdownRenderer/AnimationText.js +124 -0
- package/dist/MarkdownRenderer/CharacterQueue.d.ts +36 -0
- package/dist/MarkdownRenderer/CharacterQueue.js +188 -0
- package/dist/MarkdownRenderer/MarkdownRenderer.d.ts +13 -0
- package/dist/MarkdownRenderer/MarkdownRenderer.js +348 -0
- package/dist/MarkdownRenderer/index.d.ts +11 -0
- package/dist/MarkdownRenderer/index.js +9 -0
- package/dist/MarkdownRenderer/renderers/ChartRenderer.d.ts +12 -0
- package/dist/MarkdownRenderer/renderers/ChartRenderer.js +395 -0
- package/dist/MarkdownRenderer/renderers/CodeRenderer.d.ts +7 -0
- package/dist/MarkdownRenderer/renderers/CodeRenderer.js +218 -0
- package/dist/MarkdownRenderer/renderers/MermaidRenderer.d.ts +7 -0
- package/dist/MarkdownRenderer/renderers/MermaidRenderer.js +43 -0
- package/dist/MarkdownRenderer/renderers/SchemaRenderer.d.ts +15 -0
- package/dist/MarkdownRenderer/renderers/SchemaRenderer.js +115 -0
- package/dist/MarkdownRenderer/renderers/index.d.ts +4 -0
- package/dist/MarkdownRenderer/renderers/index.js +4 -0
- package/dist/MarkdownRenderer/style.d.ts +16 -0
- package/dist/MarkdownRenderer/style.js +46 -0
- package/dist/MarkdownRenderer/types.d.ts +74 -0
- package/dist/MarkdownRenderer/types.js +1 -0
- package/dist/MarkdownRenderer/useMarkdownToReact.d.ts +23 -0
- package/dist/MarkdownRenderer/useMarkdownToReact.js +1240 -0
- package/dist/MarkdownRenderer/useStreaming.d.ts +29 -0
- package/dist/MarkdownRenderer/useStreaming.js +392 -0
- package/dist/Plugins/chart/AreaChart/index.js +4 -2
- package/dist/Plugins/chart/LineChart/index.js +4 -2
- package/dist/Plugins/chart/components/ChartContainer/ChartErrorBoundary.d.ts +8 -0
- package/dist/Plugins/chart/components/ChartContainer/ChartErrorBoundary.js +31 -6
- package/dist/Plugins/mermaid/style.js +0 -3
- package/dist/TaskList/TaskList.js +3 -12
- package/dist/TaskList/components/TaskListItem.js +3 -12
- package/dist/ThoughtChainList/ThoughtChainListItem.js +2 -4
- package/dist/ThoughtChainList/index.js +4 -21
- package/dist/ToolUseBarThink/index.js +20 -59
- package/dist/index.d.ts +1 -0
- package/dist/index.js +2 -0
- 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,
|
|
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
|
|
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:
|
|
185
|
+
extraShowOnHover: effectiveExtraShowOnHover,
|
|
184
186
|
bubble: props
|
|
185
187
|
}
|
|
186
188
|
}, /*#__PURE__*/ React.createElement(Flex, {
|
package/dist/Bubble/type.d.ts
CHANGED
|
@@ -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;
|
package/dist/I18n/locales.d.ts
CHANGED
|
@@ -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;
|
package/dist/I18n/locales.js
CHANGED
|
@@ -335,7 +335,7 @@
|
|
|
335
335
|
'input.selectFile': '选择文件',
|
|
336
336
|
'input.openGallery': '打开相册',
|
|
337
337
|
'input.openFile': '打开文件',
|
|
338
|
-
'input.supportedFormatMessage': '
|
|
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[]>;
|