@ant-design/agentic-ui 2.30.10 → 2.30.12
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/MessagesContent/style.js +3 -1
- package/dist/Bubble/style.js +35 -13
- package/dist/ChatLayout/index.js +9 -1
- package/dist/ChatLayout/style.js +16 -13
- package/dist/Components/ActionIconBox/index.js +4 -0
- package/dist/Components/Button/IconButton/style.js +1 -1
- package/dist/Components/Button/ToggleButton/style.js +1 -1
- package/dist/History/components/HistoryList.d.ts +2 -12
- package/dist/History/components/HistoryList.js +48 -43
- package/dist/History/style.d.ts +4 -0
- package/dist/History/style.js +3 -2
- package/dist/Hooks/useAutoScroll.js +38 -14
- package/dist/Hooks/useLanguage.d.ts +1 -0
- package/dist/I18n/locales.d.ts +1 -0
- package/dist/I18n/locales.js +2 -0
- package/dist/MarkdownEditor/BaseMarkdownEditor.js +2 -1
- package/dist/MarkdownEditor/editor/Editor.js +22 -6
- package/dist/MarkdownEditor/editor/elements/AgenticUiBlocks/AgenticUiFileMapBlock.d.ts +4 -0
- package/dist/MarkdownEditor/editor/elements/AgenticUiBlocks/AgenticUiFileMapBlock.js +83 -0
- package/dist/MarkdownEditor/editor/elements/AgenticUiBlocks/agenticUiEmbedUtils.d.ts +10 -0
- package/dist/MarkdownEditor/editor/elements/AgenticUiBlocks/agenticUiEmbedUtils.js +44 -0
- package/dist/MarkdownEditor/editor/elements/Paragraph/index.js +27 -5
- package/dist/MarkdownEditor/editor/elements/index.js +3 -0
- package/dist/MarkdownEditor/editor/parser/parse/parseCode.js +2 -1
- package/dist/MarkdownEditor/editor/parser/parserSlateNodeToMarkdown.js +1 -0
- package/dist/MarkdownEditor/editor/plugins/handlePaste.js +2 -1
- package/dist/MarkdownEditor/editor/style.js +7 -3
- package/dist/MarkdownEditor/editor/tools/JinjaTemplatePanel/index.js +2 -2
- package/dist/MarkdownEditor/types.d.ts +10 -0
- package/dist/MarkdownInputField/AttachmentButton/AttachmentFileList/AttachmentFileIcon.js +1 -1
- package/dist/MarkdownInputField/AttachmentButton/AttachmentFileList/style.js +3 -3
- package/dist/MarkdownInputField/FileMapView/style.js +3 -2
- package/dist/MarkdownInputField/SkillModeBar/style.js +1 -1
- package/dist/MarkdownInputField/style.js +1 -1
- package/dist/MarkdownRenderer/MarkdownRenderer.js +10 -2
- package/dist/MarkdownRenderer/index.d.ts +4 -1
- package/dist/MarkdownRenderer/index.js +3 -0
- package/dist/MarkdownRenderer/markdownReactShared.d.ts +35 -28
- package/dist/MarkdownRenderer/markdownReactShared.js +179 -58
- package/dist/MarkdownRenderer/renderers/AgenticUiFileMapBlockRenderer.d.ts +6 -0
- package/dist/MarkdownRenderer/renderers/AgenticUiFileMapBlockRenderer.js +79 -0
- package/dist/MarkdownRenderer/renderers/index.d.ts +3 -0
- package/dist/MarkdownRenderer/renderers/index.js +3 -0
- package/dist/MarkdownRenderer/streaming/useStreamingMarkdownReact.js +3 -2
- package/dist/MarkdownRenderer/types.d.ts +21 -0
- package/dist/MarkdownRenderer/useStreaming.js +40 -13
- package/dist/Plugins/chart/components/ChartContainer/ChartErrorBoundary.d.ts +2 -0
- package/dist/Plugins/code/components/CodeRenderer.js +22 -6
- package/dist/Plugins/code/components/CodeToolbar.d.ts +2 -0
- package/dist/Plugins/code/components/CodeToolbar.js +11 -4
- package/dist/Plugins/code/hooks/useToolbarConfig.d.ts +3 -1
- package/dist/Plugins/code/hooks/useToolbarConfig.js +5 -3
- package/dist/Plugins/code/utils/index.d.ts +1 -0
- package/dist/Plugins/code/utils/index.js +1 -0
- package/dist/Plugins/code/utils/localPreview.d.ts +12 -0
- package/dist/Plugins/code/utils/localPreview.js +190 -0
- package/dist/ThoughtChainList/style.js +1 -1
- package/dist/ToolUseBarThink/style.js +1 -1
- package/dist/Workspace/Browser/index.d.ts +6 -0
- package/dist/Workspace/Browser/index.js +22 -13
- package/dist/Workspace/Browser/style.js +14 -15
- package/dist/Workspace/File/FileComponent.js +4 -4
- package/dist/Workspace/File/PreviewComponent.js +4 -4
- package/dist/Workspace/File/style.js +33 -39
- package/dist/Workspace/RealtimeFollow/style.js +78 -85
- package/dist/Workspace/style.js +41 -53
- package/package.json +1 -2
|
@@ -0,0 +1,83 @@
|
|
|
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 { FileMapView } from "../../../../MarkdownInputField/FileMapView";
|
|
55
|
+
import { normalizeFileMapPropsFromJson } from "./agenticUiEmbedUtils";
|
|
56
|
+
export var AgenticUiFileMapBlock = function AgenticUiFileMapBlock(param) {
|
|
57
|
+
var attributes = param.attributes, children = param.children, element = param.element;
|
|
58
|
+
var _normalizeFileMapPropsFromJson = normalizeFileMapPropsFromJson(element.value), fileList = _normalizeFileMapPropsFromJson.fileList, className = _normalizeFileMapPropsFromJson.className;
|
|
59
|
+
var fileMap = new Map(fileList.map(function(f) {
|
|
60
|
+
return [
|
|
61
|
+
f.uuid || f.name,
|
|
62
|
+
f
|
|
63
|
+
];
|
|
64
|
+
}));
|
|
65
|
+
return /*#__PURE__*/ React.createElement("div", _object_spread_props(_object_spread({}, attributes), {
|
|
66
|
+
contentEditable: false,
|
|
67
|
+
"data-testid": "agentic-ui-filemap-block",
|
|
68
|
+
style: {
|
|
69
|
+
margin: '0.75em 0'
|
|
70
|
+
}
|
|
71
|
+
}), /*#__PURE__*/ React.createElement(FileMapView, {
|
|
72
|
+
fileMap: fileMap,
|
|
73
|
+
className: className
|
|
74
|
+
}), /*#__PURE__*/ React.createElement("span", {
|
|
75
|
+
"data-testid": "agentic-ui-filemap-hidden-children",
|
|
76
|
+
style: {
|
|
77
|
+
display: 'none'
|
|
78
|
+
}
|
|
79
|
+
}, children));
|
|
80
|
+
};
|
|
81
|
+
AgenticUiFileMapBlock.displayName = 'AgenticUiFileMapBlock';
|
|
82
|
+
export var ReadonlyAgenticUiFileMapBlock = /*#__PURE__*/ React.memo(AgenticUiFileMapBlock);
|
|
83
|
+
ReadonlyAgenticUiFileMapBlock.displayName = 'ReadonlyAgenticUiFileMapBlock';
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { CSSProperties } from 'react';
|
|
2
|
+
import type { AttachmentFile } from '../../../../MarkdownInputField/AttachmentButton/types';
|
|
2
3
|
import type { TaskListProps } from '../../../../TaskList/types';
|
|
3
4
|
import type { ToolCall } from '../../../../ToolUseBar/BarItem';
|
|
4
5
|
/**
|
|
@@ -18,3 +19,12 @@ export interface NormalizedToolUseBarEmbedProps {
|
|
|
18
19
|
disableAnimation?: boolean;
|
|
19
20
|
}
|
|
20
21
|
export declare function normalizeToolUseBarPropsFromJson(parsed: unknown): NormalizedToolUseBarEmbedProps;
|
|
22
|
+
export interface NormalizedFileMapEmbedProps {
|
|
23
|
+
fileList: AttachmentFile[];
|
|
24
|
+
className?: string;
|
|
25
|
+
style?: CSSProperties;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* 将 ```agentic-ui-filemap JSON 规范化为 FileMapView 所需 props
|
|
29
|
+
*/
|
|
30
|
+
export declare function normalizeFileMapPropsFromJson(parsed: unknown): NormalizedFileMapEmbedProps;
|
|
@@ -167,3 +167,47 @@ export function normalizeToolUseBarPropsFromJson(parsed) {
|
|
|
167
167
|
disableAnimation: disableAnimation
|
|
168
168
|
};
|
|
169
169
|
}
|
|
170
|
+
var fileItemFromRecord = function fileItemFromRecord(x, index) {
|
|
171
|
+
var name = x.name !== undefined && x.name !== null ? String(x.name) : "file-".concat(index);
|
|
172
|
+
var url = x.url !== undefined && x.url !== null ? String(x.url) : undefined;
|
|
173
|
+
var previewUrl = x.previewUrl !== undefined && x.previewUrl !== null ? String(x.previewUrl) : undefined;
|
|
174
|
+
var type = x.type !== undefined && x.type !== null ? String(x.type) : 'application/octet-stream';
|
|
175
|
+
var size = typeof x.size === 'number' ? x.size : undefined;
|
|
176
|
+
var uuid = x.uuid !== undefined && x.uuid !== null ? String(x.uuid) : x.id !== undefined && x.id !== null ? String(x.id) : "file-".concat(index);
|
|
177
|
+
var rawStatus = x.status;
|
|
178
|
+
var status = rawStatus === 'error' || rawStatus === 'uploading' || rawStatus === 'pending' || rawStatus === 'done' ? rawStatus : undefined;
|
|
179
|
+
var errorMessage = typeof x.errorMessage === 'string' ? x.errorMessage : undefined;
|
|
180
|
+
return {
|
|
181
|
+
name: name,
|
|
182
|
+
type: type,
|
|
183
|
+
url: url,
|
|
184
|
+
previewUrl: previewUrl,
|
|
185
|
+
uuid: uuid,
|
|
186
|
+
size: size,
|
|
187
|
+
status: status,
|
|
188
|
+
errorMessage: errorMessage
|
|
189
|
+
};
|
|
190
|
+
};
|
|
191
|
+
/**
|
|
192
|
+
* 将 ```agentic-ui-filemap JSON 规范化为 FileMapView 所需 props
|
|
193
|
+
*/ export function normalizeFileMapPropsFromJson(parsed) {
|
|
194
|
+
var root = parsed && (typeof parsed === "undefined" ? "undefined" : _type_of(parsed)) === 'object' && !Array.isArray(parsed) ? parsed : null;
|
|
195
|
+
var rawItems = [];
|
|
196
|
+
if (root && Array.isArray(root.fileList)) {
|
|
197
|
+
rawItems = root.fileList;
|
|
198
|
+
} else if (root && Array.isArray(root.files)) {
|
|
199
|
+
rawItems = root.files;
|
|
200
|
+
} else if (Array.isArray(parsed)) {
|
|
201
|
+
rawItems = parsed;
|
|
202
|
+
}
|
|
203
|
+
var fileList = rawItems.filter(function(x) {
|
|
204
|
+
return !!x && (typeof x === "undefined" ? "undefined" : _type_of(x)) === 'object';
|
|
205
|
+
}).map(function(x, i) {
|
|
206
|
+
return fileItemFromRecord(x, i);
|
|
207
|
+
});
|
|
208
|
+
var className = root && typeof root.className === 'string' ? root.className : undefined;
|
|
209
|
+
return {
|
|
210
|
+
fileList: fileList,
|
|
211
|
+
className: className
|
|
212
|
+
};
|
|
213
|
+
}
|
|
@@ -97,7 +97,7 @@ function _unsupported_iterable_to_array(o, minLen) {
|
|
|
97
97
|
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
|
|
98
98
|
}
|
|
99
99
|
import classNames from "clsx";
|
|
100
|
-
import React, { useContext } from "react";
|
|
100
|
+
import React, { useContext, useEffect, useState } from "react";
|
|
101
101
|
import { Node } from "slate";
|
|
102
102
|
import { I18nContext } from "../../../../I18n";
|
|
103
103
|
import { debugInfo } from "../../../../Utils/debugUtils";
|
|
@@ -115,6 +115,28 @@ export var Paragraph = function Paragraph(props) {
|
|
|
115
115
|
var _useEditorStore = useEditorStore(), store = _useEditorStore.store, markdownEditorRef = _useEditorStore.markdownEditorRef, markdownContainerRef = _useEditorStore.markdownContainerRef, readonly = _useEditorStore.readonly, editorProps = _useEditorStore.editorProps;
|
|
116
116
|
var locale = useContext(I18nContext).locale;
|
|
117
117
|
var _useSelStatus = _sliced_to_array(useSelStatus(props.element), 1), selected = _useSelStatus[0];
|
|
118
|
+
// 将 store.inputComposition(可变对象属性)同步到 React state,
|
|
119
|
+
// 使 useMemo 能在组合输入状态变化时重新评估 isEmpty,
|
|
120
|
+
// 避免竞态导致占位符在组合结束后短暂闪现。
|
|
121
|
+
var _useState = _sliced_to_array(useState(false), 2), isComposing = _useState[0], setIsComposing = _useState[1];
|
|
122
|
+
useEffect(function() {
|
|
123
|
+
var container = markdownContainerRef.current;
|
|
124
|
+
if (!container) return;
|
|
125
|
+
var observer = new MutationObserver(function() {
|
|
126
|
+
setIsComposing(container.hasAttribute('data-composition'));
|
|
127
|
+
});
|
|
128
|
+
observer.observe(container, {
|
|
129
|
+
attributes: true,
|
|
130
|
+
attributeFilter: [
|
|
131
|
+
'data-composition'
|
|
132
|
+
]
|
|
133
|
+
});
|
|
134
|
+
return function() {
|
|
135
|
+
return observer.disconnect();
|
|
136
|
+
};
|
|
137
|
+
}, [
|
|
138
|
+
markdownContainerRef
|
|
139
|
+
]);
|
|
118
140
|
return React.useMemo(function() {
|
|
119
141
|
var _props_element_children_every, _props_element_children, _props_element, _markdownEditorRef_current, _props_children;
|
|
120
142
|
var str = Node.string(props.element).trim();
|
|
@@ -129,10 +151,9 @@ export var Paragraph = function Paragraph(props) {
|
|
|
129
151
|
var hasOnlyTextNodes = (_props_element = props.element) === null || _props_element === void 0 ? void 0 : (_props_element_children = _props_element.children) === null || _props_element_children === void 0 ? void 0 : (_props_element_children_every = _props_element_children.every) === null || _props_element_children_every === void 0 ? void 0 : _props_element_children_every.call(_props_element_children, function(child) {
|
|
130
152
|
return !child.type && !child.code && !child.tag;
|
|
131
153
|
});
|
|
132
|
-
//
|
|
133
|
-
//
|
|
134
|
-
|
|
135
|
-
var isEmpty = !str && ((_markdownEditorRef_current = markdownEditorRef.current) === null || _markdownEditorRef_current === void 0 ? void 0 : _markdownEditorRef_current.children.length) === 1 && hasOnlyTextNodes ? true : undefined;
|
|
154
|
+
// 组合输入进行中时,Slate 模型尚未更新(字符还在 IME 候选区),
|
|
155
|
+
// 此时强制视为非空以隐藏占位符,避免用户输入时占位符仍然可见。
|
|
156
|
+
var isEmpty = !str && !isComposing && ((_markdownEditorRef_current = markdownEditorRef.current) === null || _markdownEditorRef_current === void 0 ? void 0 : _markdownEditorRef_current.children.length) === 1 && hasOnlyTextNodes ? true : undefined;
|
|
136
157
|
return /*#__PURE__*/ React.createElement("div", _object_spread_props(_object_spread({}, props.attributes), {
|
|
137
158
|
"data-be": 'paragraph',
|
|
138
159
|
"data-drag-el": true,
|
|
@@ -155,6 +176,7 @@ export var Paragraph = function Paragraph(props) {
|
|
|
155
176
|
align,
|
|
156
177
|
readonly,
|
|
157
178
|
selected,
|
|
179
|
+
isComposing,
|
|
158
180
|
(_markdownEditorRef_current = markdownEditorRef.current) === null || _markdownEditorRef_current === void 0 ? void 0 : _markdownEditorRef_current.children.length,
|
|
159
181
|
editorProps.titlePlaceholderContent
|
|
160
182
|
]);
|
|
@@ -98,6 +98,7 @@ import { useEditorStore } from "../store";
|
|
|
98
98
|
import { EditorUtils } from "../utils/editorUtils";
|
|
99
99
|
import { AgenticUiTaskBlock, ReadonlyAgenticUiTaskBlock } from "./AgenticUiBlocks/AgenticUiTaskBlock";
|
|
100
100
|
import { AgenticUiToolUseBarBlock, ReadonlyAgenticUiToolUseBarBlock } from "./AgenticUiBlocks/AgenticUiToolUseBarBlock";
|
|
101
|
+
import { AgenticUiFileMapBlock, ReadonlyAgenticUiFileMapBlock } from "./AgenticUiBlocks/AgenticUiFileMapBlock";
|
|
101
102
|
import { Blockquote } from "./Blockquote";
|
|
102
103
|
import { ReadonlyBlockquote } from "./Blockquote/ReadonlyBlockquote";
|
|
103
104
|
import { Break } from "./Break";
|
|
@@ -250,6 +251,8 @@ var MElementComponent = function MElementComponent(props) {
|
|
|
250
251
|
case 'agentic-ui-toolusebar':
|
|
251
252
|
case 'agentic-ui-usertoolbar':
|
|
252
253
|
return props.readonly ? /*#__PURE__*/ React.createElement(ReadonlyAgenticUiToolUseBarBlock, readonlyElementProps) : /*#__PURE__*/ React.createElement(AgenticUiToolUseBarBlock, props);
|
|
254
|
+
case 'agentic-ui-filemap':
|
|
255
|
+
return props.readonly ? /*#__PURE__*/ React.createElement(ReadonlyAgenticUiFileMapBlock, readonlyElementProps) : /*#__PURE__*/ React.createElement(AgenticUiFileMapBlock, props);
|
|
253
256
|
case 'image':
|
|
254
257
|
return props.readonly ? /*#__PURE__*/ React.createElement(ReadonlyEditorImage, readonlyElementProps) : /*#__PURE__*/ React.createElement(EditorImage, props);
|
|
255
258
|
case 'media':
|
|
@@ -128,7 +128,8 @@ var processSchemaLanguage = function processSchemaLanguage(element, value) {
|
|
|
128
128
|
'agentar-card': processSchemaLanguage,
|
|
129
129
|
'agentic-ui-task': processAgenticUiJsonBlock('agentic-ui-task'),
|
|
130
130
|
'agentic-ui-toolusebar': processAgenticUiJsonBlock('agentic-ui-toolusebar'),
|
|
131
|
-
/** @deprecated 使用 `agentic-ui-toolusebar`,保留解析以兼容旧内容 */ 'agentic-ui-usertoolbar': processAgenticUiJsonBlock('agentic-ui-toolusebar')
|
|
131
|
+
/** @deprecated 使用 `agentic-ui-toolusebar`,保留解析以兼容旧内容 */ 'agentic-ui-usertoolbar': processAgenticUiJsonBlock('agentic-ui-toolusebar'),
|
|
132
|
+
'agentic-ui-filemap': processAgenticUiJsonBlock('agentic-ui-filemap')
|
|
132
133
|
};
|
|
133
134
|
/**
|
|
134
135
|
* 处理代码块节点
|
|
@@ -758,7 +758,8 @@ import { parseMarkdownToNodesAndInsert } from "./parseMarkdownToNodesAndInsert";
|
|
|
758
758
|
'apaasify',
|
|
759
759
|
'agentic-ui-task',
|
|
760
760
|
'agentic-ui-toolusebar',
|
|
761
|
-
'agentic-ui-usertoolbar'
|
|
761
|
+
'agentic-ui-usertoolbar',
|
|
762
|
+
'agentic-ui-filemap'
|
|
762
763
|
].includes(rangeNode.type);
|
|
763
764
|
};
|
|
764
765
|
/**
|
|
@@ -203,7 +203,7 @@ var genStyle = function genStyle(token) {
|
|
|
203
203
|
width: '8px',
|
|
204
204
|
height: '8px'
|
|
205
205
|
}), _define_property(_obj, '::-webkit-scrollbar-thumb', {
|
|
206
|
-
backgroundColor: 'var(--color-gray-text-tertiary)',
|
|
206
|
+
backgroundColor: 'var(--color-gray-text-tertiary, var(--color-gray-text-light))',
|
|
207
207
|
borderRadius: '20px'
|
|
208
208
|
}), _define_property(_obj, '&-edit', {
|
|
209
209
|
'> div.empty:first-child': {
|
|
@@ -222,7 +222,11 @@ var genStyle = function genStyle(token) {
|
|
|
222
222
|
fontSize: '1em',
|
|
223
223
|
lineHeight: '21px',
|
|
224
224
|
wordBreak: 'break-word',
|
|
225
|
-
whiteSpace: 'wrap'
|
|
225
|
+
whiteSpace: 'wrap',
|
|
226
|
+
// 防止占位符伪元素响应触摸/点击事件,避免在移动端
|
|
227
|
+
// 竞态窗口内占位符遮挡用户对实际文字的交互。
|
|
228
|
+
pointerEvents: 'none',
|
|
229
|
+
userSelect: 'none'
|
|
226
230
|
}
|
|
227
231
|
},
|
|
228
232
|
'> div.empty:first-child [data-slate-node="text"]': {
|
|
@@ -366,7 +370,7 @@ var genStyle = function genStyle(token) {
|
|
|
366
370
|
fontSize: '0.9rem',
|
|
367
371
|
lineHeight: 'var(--line-height-base)',
|
|
368
372
|
letterSpacing: 'var(--letter-spacing-base)',
|
|
369
|
-
fontFamily: 'var(--font-family-base)'
|
|
373
|
+
fontFamily: 'var(--font-family-base, var(--font-family-text))'
|
|
370
374
|
},
|
|
371
375
|
'ul, ol': {
|
|
372
376
|
margin: 0
|
|
@@ -337,12 +337,12 @@ export var JinjaTemplatePanel = function JinjaTemplatePanel() {
|
|
|
337
337
|
}, loading ? /*#__PURE__*/ React.createElement("div", {
|
|
338
338
|
style: {
|
|
339
339
|
padding: 12,
|
|
340
|
-
color: 'var(--color-text-secondary)'
|
|
340
|
+
color: 'var(--color-text-secondary, var(--color-gray-text-secondary, rgba(0,0,0,0.45)))'
|
|
341
341
|
}
|
|
342
342
|
}, locale.loading) : items.length === 0 ? notFoundContent !== null && notFoundContent !== void 0 ? notFoundContent : /*#__PURE__*/ React.createElement("div", {
|
|
343
343
|
style: {
|
|
344
344
|
padding: 12,
|
|
345
|
-
color: 'var(--color-text-secondary)'
|
|
345
|
+
color: 'var(--color-text-secondary, var(--color-gray-text-secondary, rgba(0,0,0,0.45)))'
|
|
346
346
|
}
|
|
347
347
|
}, locale['jinja.panel.noTemplates']) : items.map(function(item, i) {
|
|
348
348
|
return /*#__PURE__*/ React.createElement("div", {
|
|
@@ -637,4 +637,14 @@ export type MarkdownEditorProps = {
|
|
|
637
637
|
* @description 当同时传入时,`renderMode` 优先
|
|
638
638
|
*/
|
|
639
639
|
renderType?: RenderMode;
|
|
640
|
+
/**
|
|
641
|
+
* 自定义元素渲染函数(仅 `renderMode: 'markdown'` 时生效)
|
|
642
|
+
* @description 拦截并自定义 MarkdownRenderer 中任意块级/行内元素的渲染结果。
|
|
643
|
+
* 与 Slate 模式的 `eleItemRender` 对应,允许替换段落、标题、列表、图片等元素。
|
|
644
|
+
* 返回 `undefined` 时回退到默认渲染。
|
|
645
|
+
* @param props - 元素属性(tagName、node、children 等)
|
|
646
|
+
* @param defaultDom - 默认渲染结果
|
|
647
|
+
* @returns 自定义渲染节点,或 undefined 时回退到 defaultDom
|
|
648
|
+
*/
|
|
649
|
+
eleRender?: (props: import('../MarkdownRenderer/types').MarkdownRendererEleProps, defaultDom: React.ReactNode) => React.ReactNode;
|
|
640
650
|
};
|
|
@@ -108,7 +108,7 @@ var VideoThumbnail = function VideoThumbnail(param) {
|
|
|
108
108
|
style: _object_spread_props(_object_spread({}, style), {
|
|
109
109
|
position: 'relative',
|
|
110
110
|
overflow: 'hidden',
|
|
111
|
-
borderRadius: 'var(--radius-base)',
|
|
111
|
+
borderRadius: 'var(--radius-base, 4px)',
|
|
112
112
|
flexShrink: 0
|
|
113
113
|
})
|
|
114
114
|
}, /*#__PURE__*/ React.createElement("video", {
|
|
@@ -83,8 +83,8 @@ var genStyle = function genStyle(token) {
|
|
|
83
83
|
height: 'var(--padding-1x)'
|
|
84
84
|
},
|
|
85
85
|
'&::-webkit-scrollbar-thumb': {
|
|
86
|
-
background: 'var(--color-gray-border-default)',
|
|
87
|
-
borderRadius: 'var(--radius-base)'
|
|
86
|
+
background: 'var(--color-gray-border-default, var(--color-gray-border-light))',
|
|
87
|
+
borderRadius: 'var(--radius-base, var(--radius-control-xs, 4px))'
|
|
88
88
|
},
|
|
89
89
|
'&::-webkit-scrollbar-track': {
|
|
90
90
|
background: 'transparent'
|
|
@@ -141,7 +141,7 @@ var genStyle = function genStyle(token) {
|
|
|
141
141
|
background: 'var(--color-gray-bg-card-white)',
|
|
142
142
|
boxSizing: 'border-box',
|
|
143
143
|
boxShadow: 'var(--shadow-control-base)',
|
|
144
|
-
borderRadius: 'var(--radius-base)',
|
|
144
|
+
borderRadius: 'var(--radius-base, var(--radius-control-xs, 4px))',
|
|
145
145
|
border: 'none',
|
|
146
146
|
overflow: 'hidden',
|
|
147
147
|
img: {
|
|
@@ -80,7 +80,8 @@ var genStyle = function genStyle(token) {
|
|
|
80
80
|
padding: 0,
|
|
81
81
|
maxWidth: 'calc(285px * 3 + 4px * 2)',
|
|
82
82
|
'& > :only-child': {
|
|
83
|
-
marginTop: 8
|
|
83
|
+
marginTop: 8,
|
|
84
|
+
padding: 2
|
|
84
85
|
}
|
|
85
86
|
},
|
|
86
87
|
'&::-webkit-scrollbar': {
|
|
@@ -271,7 +272,7 @@ var genStyle = function genStyle(token) {
|
|
|
271
272
|
background: 'var(--color-gray-bg-card-white)',
|
|
272
273
|
boxSizing: 'border-box',
|
|
273
274
|
boxShadow: 'var(--shadow-control-base)',
|
|
274
|
-
borderRadius: 'var(--radius-base)',
|
|
275
|
+
borderRadius: 'var(--radius-base, 4px)',
|
|
275
276
|
border: 'none',
|
|
276
277
|
overflow: 'hidden',
|
|
277
278
|
img: {
|
|
@@ -99,7 +99,7 @@ var genStyle = function genStyle(token) {
|
|
|
99
99
|
borderRadius: 'var(--radius-control-sm)'
|
|
100
100
|
},
|
|
101
101
|
'&:active': {
|
|
102
|
-
backgroundColor: 'var(--color-gray-control-fill-pressed)',
|
|
102
|
+
backgroundColor: 'var(--color-gray-control-fill-pressed, var(--color-gray-control-fill-secondary-active))',
|
|
103
103
|
outline: 'none',
|
|
104
104
|
border: 'none'
|
|
105
105
|
},
|
|
@@ -172,7 +172,7 @@ var genStyle = function genStyle(token) {
|
|
|
172
172
|
maxHeight: 400,
|
|
173
173
|
height: '100%',
|
|
174
174
|
overflowY: 'visible',
|
|
175
|
-
scrollbarColor: 'var(--color-gray-text-tertiary) transparent',
|
|
175
|
+
scrollbarColor: 'var(--color-gray-text-tertiary, #505c716b) transparent',
|
|
176
176
|
scrollbarWidth: 'thin',
|
|
177
177
|
'&&-disabled': {
|
|
178
178
|
backgroundColor: 'rgba(0,0,0,0.04)',
|
|
@@ -140,6 +140,7 @@ import { useStyle as useEditorStyle } from "../MarkdownEditor/style";
|
|
|
140
140
|
import { CharacterQueue } from "./CharacterQueue";
|
|
141
141
|
import { AgenticUiTaskBlockRenderer } from "./renderers/AgenticUiTaskBlockRenderer";
|
|
142
142
|
import { AgenticUiToolUseBarBlockRenderer } from "./renderers/AgenticUiToolUseBarBlockRenderer";
|
|
143
|
+
import { AgenticUiFileMapBlockRenderer } from "./renderers/AgenticUiFileMapBlockRenderer";
|
|
143
144
|
import { ChartBlockRenderer } from "./renderers/ChartRenderer";
|
|
144
145
|
import { CodeBlockRenderer } from "./renderers/CodeRenderer";
|
|
145
146
|
import { MermaidBlockRenderer } from "./renderers/MermaidRenderer";
|
|
@@ -215,6 +216,12 @@ var SCHEMA_LANGUAGES = new Set([
|
|
|
215
216
|
language: language
|
|
216
217
|
}));
|
|
217
218
|
}
|
|
219
|
+
if (language === 'agentic-ui-filemap') {
|
|
220
|
+
var FileMapComp = pluginComponents['agentic-ui-filemap'] || AgenticUiFileMapBlockRenderer;
|
|
221
|
+
return /*#__PURE__*/ React.createElement(FileMapComp, _object_spread_props(_object_spread({}, rest), {
|
|
222
|
+
language: language
|
|
223
|
+
}));
|
|
224
|
+
}
|
|
218
225
|
if (SCHEMA_LANGUAGES.has(language)) {
|
|
219
226
|
var SchemaComp = pluginComponents.schema || SchemaBlockRenderer;
|
|
220
227
|
return /*#__PURE__*/ React.createElement(SchemaComp, _object_spread_props(_object_spread({}, rest), {
|
|
@@ -236,7 +243,7 @@ var SCHEMA_LANGUAGES = new Set([
|
|
|
236
243
|
* - Markdown → hast → React 元素树(hast-util-to-jsx-runtime)
|
|
237
244
|
* - 特殊块(code / mermaid / chart / katex)通过组件映射拦截渲染
|
|
238
245
|
*/ var InternalMarkdownRenderer = /*#__PURE__*/ forwardRef(function(props, ref) {
|
|
239
|
-
var content = props.content, _props_streaming = props.streaming, streaming = _props_streaming === void 0 ? false : _props_streaming, isFinished = props.isFinished, queueOptions = props.queueOptions, plugins = props.plugins, remarkPlugins = props.remarkPlugins, htmlConfig = props.htmlConfig, className = props.className, style = props.style, customPrefixCls = props.prefixCls, linkConfig = props.linkConfig, streamingParagraphAnimation = props.streamingParagraphAnimation, apaasify = props.apaasify;
|
|
246
|
+
var content = props.content, _props_streaming = props.streaming, streaming = _props_streaming === void 0 ? false : _props_streaming, isFinished = props.isFinished, queueOptions = props.queueOptions, plugins = props.plugins, remarkPlugins = props.remarkPlugins, htmlConfig = props.htmlConfig, className = props.className, style = props.style, customPrefixCls = props.prefixCls, linkConfig = props.linkConfig, streamingParagraphAnimation = props.streamingParagraphAnimation, apaasify = props.apaasify, eleRender = props.eleRender;
|
|
240
247
|
var getPrefixCls = useContext(ConfigProvider.ConfigContext).getPrefixCls;
|
|
241
248
|
// 复用 MarkdownEditor 的 CSS 前缀和样式,保持渲染一致性
|
|
242
249
|
var prefixCls = getPrefixCls('agentic-md-editor', customPrefixCls);
|
|
@@ -358,7 +365,8 @@ var SCHEMA_LANGUAGES = new Set([
|
|
|
358
365
|
linkConfig: linkConfig,
|
|
359
366
|
streaming: streaming,
|
|
360
367
|
streamingParagraphAnimation: streamingParagraphAnimation,
|
|
361
|
-
contentRevisionSource: streaming ? displayedContent : undefined
|
|
368
|
+
contentRevisionSource: streaming ? displayedContent : undefined,
|
|
369
|
+
eleRender: eleRender
|
|
362
370
|
});
|
|
363
371
|
return wrapVarSSR(wrapSSR(wrapContentSSR(/*#__PURE__*/ React.createElement("div", {
|
|
364
372
|
ref: containerRef,
|
|
@@ -2,11 +2,14 @@ export { default as AnimationText } from './AnimationText';
|
|
|
2
2
|
export type { AnimationConfig, AnimationTextProps } from './AnimationText';
|
|
3
3
|
export { CharacterQueue } from './CharacterQueue';
|
|
4
4
|
export { default as MarkdownRenderer } from './MarkdownRenderer';
|
|
5
|
+
export { AgenticUiFileMapBlockRenderer } from './renderers/AgenticUiFileMapBlockRenderer';
|
|
6
|
+
export { AgenticUiTaskBlockRenderer } from './renderers/AgenticUiTaskBlockRenderer';
|
|
7
|
+
export { AgenticUiToolUseBarBlockRenderer } from './renderers/AgenticUiToolUseBarBlockRenderer';
|
|
5
8
|
export { ChartBlockRenderer } from './renderers/ChartRenderer';
|
|
6
9
|
export { CodeBlockRenderer } from './renderers/CodeRenderer';
|
|
7
10
|
export { MermaidBlockRenderer } from './renderers/MermaidRenderer';
|
|
8
11
|
export { SchemaBlockRenderer } from './renderers/SchemaRenderer';
|
|
9
|
-
export type { CharacterQueueOptions, MarkdownRendererProps, MarkdownRendererRef, RenderMode, RendererBlockProps, } from './types';
|
|
12
|
+
export type { CharacterQueueOptions, MarkdownRendererEleProps, MarkdownRendererProps, MarkdownRendererRef, RenderMode, RendererBlockProps, } from './types';
|
|
10
13
|
export type { UseMarkdownToReactOptions } from './markdownReactShared';
|
|
11
14
|
export { markdownToReactSync, useMarkdownToReact } from './useMarkdownToReact';
|
|
12
15
|
export { useStreamingMarkdownReact } from './streaming/useStreamingMarkdownReact';
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
export { default as AnimationText } from "./AnimationText";
|
|
2
2
|
export { CharacterQueue } from "./CharacterQueue";
|
|
3
3
|
export { default as MarkdownRenderer } from "./MarkdownRenderer";
|
|
4
|
+
export { AgenticUiFileMapBlockRenderer } from "./renderers/AgenticUiFileMapBlockRenderer";
|
|
5
|
+
export { AgenticUiTaskBlockRenderer } from "./renderers/AgenticUiTaskBlockRenderer";
|
|
6
|
+
export { AgenticUiToolUseBarBlockRenderer } from "./renderers/AgenticUiToolUseBarBlockRenderer";
|
|
4
7
|
export { ChartBlockRenderer } from "./renderers/ChartRenderer";
|
|
5
8
|
export { CodeBlockRenderer } from "./renderers/CodeRenderer";
|
|
6
9
|
export { MermaidBlockRenderer } from "./renderers/MermaidRenderer";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { Processor } from 'unified';
|
|
3
3
|
import { type MarkdownRemarkPlugin, type MarkdownToHtmlConfig } from '../MarkdownEditor/editor/utils/markdownToHtml';
|
|
4
|
-
import type { RendererBlockProps } from './types';
|
|
4
|
+
import type { MarkdownRendererEleProps, RendererBlockProps } from './types';
|
|
5
5
|
declare const createHastProcessor: (extraRemarkPlugins?: MarkdownRemarkPlugin[], config?: MarkdownToHtmlConfig) => Processor;
|
|
6
6
|
/**
|
|
7
7
|
* 构建与 MarkdownEditor Readonly 组件对齐的 hast→React 组件映射。
|
|
@@ -12,40 +12,40 @@ declare const createHastProcessor: (extraRemarkPlugins?: MarkdownRemarkPlugin[],
|
|
|
12
12
|
declare const buildEditorAlignedComponents: (prefixCls: string, userComponents: Record<string, React.ComponentType<RendererBlockProps>>, streaming?: boolean, linkConfig?: {
|
|
13
13
|
openInNewTab?: boolean | undefined;
|
|
14
14
|
onClick?: ((url?: string) => boolean | void) | undefined;
|
|
15
|
-
} | undefined, streamingParagraphAnimation?: boolean) => {
|
|
16
|
-
p: (props: any) => React.
|
|
17
|
-
h1: (props: any) => React.
|
|
18
|
-
h2: (props: any) => React.
|
|
19
|
-
h3: (props: any) => React.
|
|
20
|
-
h4: (props: any) => React.
|
|
21
|
-
h5: (props: any) => React.
|
|
22
|
-
h6: (props: any) => React.
|
|
23
|
-
blockquote: (props: any) => React.
|
|
24
|
-
ul: (props: any) => React.
|
|
25
|
-
ol: (props: any) => React.
|
|
26
|
-
li: (props: any) => React.
|
|
27
|
-
table: (props: any) => React.
|
|
15
|
+
} | undefined, streamingParagraphAnimation?: boolean, eleRender?: ((props: MarkdownRendererEleProps, defaultDom: React.ReactNode) => React.ReactNode) | undefined) => {
|
|
16
|
+
p: (props: any) => React.ReactNode;
|
|
17
|
+
h1: (props: any) => React.ReactNode;
|
|
18
|
+
h2: (props: any) => React.ReactNode;
|
|
19
|
+
h3: (props: any) => React.ReactNode;
|
|
20
|
+
h4: (props: any) => React.ReactNode;
|
|
21
|
+
h5: (props: any) => React.ReactNode;
|
|
22
|
+
h6: (props: any) => React.ReactNode;
|
|
23
|
+
blockquote: (props: any) => React.ReactNode;
|
|
24
|
+
ul: (props: any) => React.ReactNode;
|
|
25
|
+
ol: (props: any) => React.ReactNode;
|
|
26
|
+
li: (props: any) => React.ReactNode;
|
|
27
|
+
table: (props: any) => React.ReactNode;
|
|
28
28
|
thead: (props: any) => React.ReactElement<any, string | React.JSXElementConstructor<any>>;
|
|
29
29
|
tbody: (props: any) => React.ReactElement<any, string | React.JSXElementConstructor<any>>;
|
|
30
30
|
tr: (props: any) => React.ReactElement<any, string | React.JSXElementConstructor<any>>;
|
|
31
31
|
th: (props: any) => React.ReactElement<any, string | React.JSXElementConstructor<any>>;
|
|
32
32
|
td: (props: any) => React.ReactElement<any, string | React.JSXElementConstructor<any>>;
|
|
33
33
|
input: (props: any) => React.ReactElement<any, string | React.JSXElementConstructor<any>>;
|
|
34
|
-
a: (props: any) => React.
|
|
35
|
-
strong: (props: any) => React.
|
|
36
|
-
em: (props: any) => React.
|
|
37
|
-
del: (props: any) => React.
|
|
34
|
+
a: (props: any) => React.ReactNode;
|
|
35
|
+
strong: (props: any) => React.ReactNode;
|
|
36
|
+
em: (props: any) => React.ReactNode;
|
|
37
|
+
del: (props: any) => React.ReactNode;
|
|
38
38
|
code: (props: any) => React.ReactElement<any, string | React.JSXElementConstructor<any>>;
|
|
39
|
-
mark: (props: any) => React.
|
|
40
|
-
kbd: (props: any) => React.
|
|
41
|
-
sub: (props: any) => React.
|
|
42
|
-
pre: (props: any) => React.
|
|
43
|
-
img: (props: any) => React.
|
|
44
|
-
video: (props: any) => React.
|
|
45
|
-
audio: (props: any) => React.
|
|
46
|
-
iframe: (props: any) => React.
|
|
47
|
-
hr: (props: any) => React.
|
|
48
|
-
sup: (props: any) => React.
|
|
39
|
+
mark: (props: any) => React.ReactNode;
|
|
40
|
+
kbd: (props: any) => React.ReactNode;
|
|
41
|
+
sub: (props: any) => React.ReactNode;
|
|
42
|
+
pre: (props: any) => React.ReactNode;
|
|
43
|
+
img: (props: any) => React.ReactNode;
|
|
44
|
+
video: (props: any) => React.ReactNode;
|
|
45
|
+
audio: (props: any) => React.ReactNode;
|
|
46
|
+
iframe: (props: any) => React.ReactNode;
|
|
47
|
+
hr: (props: any) => React.ReactNode;
|
|
48
|
+
sup: (props: any) => React.ReactNode;
|
|
49
49
|
span: (props: any) => React.ReactElement<any, string | React.JSXElementConstructor<any>>;
|
|
50
50
|
section: (props: any) => React.ReactElement<any, string | React.JSXElementConstructor<any>>;
|
|
51
51
|
think: (props: any) => React.FunctionComponentElement<import("../ToolUseBarThink").ToolUseBarThinkProps>;
|
|
@@ -89,5 +89,12 @@ export interface UseMarkdownToReactOptions {
|
|
|
89
89
|
* 与 `content`(常为 useStreaming 输出的可解析串)分离,避免占位符与正文切换时误判为非前缀修订。
|
|
90
90
|
*/
|
|
91
91
|
contentRevisionSource?: string;
|
|
92
|
+
/**
|
|
93
|
+
* 自定义元素渲染拦截函数(markdown 渲染模式)。
|
|
94
|
+
* 允许在默认渲染结果基础上包装、替换任意元素。
|
|
95
|
+
* 返回 undefined 时回退到默认渲染。
|
|
96
|
+
*/
|
|
97
|
+
eleRender?: (props: MarkdownRendererEleProps, defaultDom: React.ReactNode) => React.ReactNode;
|
|
92
98
|
}
|
|
93
99
|
export { buildEditorAlignedComponents, createHastProcessor, markLastParagraphStreamingTail, renderMarkdownBlock, splitMarkdownBlocks, };
|
|
100
|
+
export type { MarkdownRendererEleProps };
|