@ant-design/agentic-ui 2.20.2 → 2.22.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/MarkdownEditor/BaseMarkdownEditor.js +1 -1
- package/dist/MarkdownEditor/editor/elements/Code.js +1 -1
- package/dist/MarkdownEditor/editor/elements/Image/index.js +37 -9
- package/dist/MarkdownEditor/editor/elements/LinkCard/index.js +87 -2
- package/dist/MarkdownEditor/editor/elements/List/List.js +10 -2
- package/dist/MarkdownEditor/editor/elements/Media.js +75 -23
- package/dist/MarkdownEditor/editor/elements/Table/ReadonlyTableComponent.js +2 -13
- package/dist/MarkdownEditor/editor/elements/Table/SimpleTable.js +89 -15
- package/dist/MarkdownEditor/editor/elements/Table/Table.js +3 -75
- package/dist/MarkdownEditor/editor/elements/TagPopup/index.js +4 -4
- package/dist/MarkdownEditor/editor/elements/TagPopup/style.js +14 -12
- package/dist/MarkdownEditor/editor/elements/index.js +1 -32
- package/dist/MarkdownEditor/editor/parser/parse/applyContextPropsAndConfig.d.ts +8 -0
- package/dist/MarkdownEditor/editor/parser/parse/applyContextPropsAndConfig.js +58 -0
- package/dist/MarkdownEditor/editor/parser/parse/parseBlockElements.d.ts +67 -0
- package/dist/MarkdownEditor/editor/parser/parse/parseBlockElements.js +289 -0
- package/dist/MarkdownEditor/editor/parser/parse/parseCode.d.ts +32 -0
- package/dist/MarkdownEditor/editor/parser/parse/parseCode.js +186 -0
- package/dist/MarkdownEditor/editor/parser/parse/parseElements.d.ts +27 -0
- package/dist/MarkdownEditor/editor/parser/parse/parseElements.js +83 -0
- package/dist/MarkdownEditor/editor/parser/parse/parseEmptyLines.d.ts +9 -0
- package/dist/MarkdownEditor/editor/parser/parse/parseEmptyLines.js +60 -0
- package/dist/MarkdownEditor/editor/parser/parse/parseFootnote.d.ts +10 -0
- package/dist/MarkdownEditor/editor/parser/parse/parseFootnote.js +12 -0
- package/dist/MarkdownEditor/editor/parser/parse/parseHtml.d.ts +63 -0
- package/dist/MarkdownEditor/editor/parser/parse/parseHtml.js +759 -0
- package/dist/MarkdownEditor/editor/parser/parse/parseMath.d.ts +24 -0
- package/dist/MarkdownEditor/editor/parser/parse/parseMath.js +58 -0
- package/dist/MarkdownEditor/editor/parser/parse/parseMedia.d.ts +27 -0
- package/dist/MarkdownEditor/editor/parser/parse/parseMedia.js +127 -0
- package/dist/MarkdownEditor/editor/parser/parse/parseTable.d.ts +39 -0
- package/dist/MarkdownEditor/editor/parser/parse/parseTable.js +348 -0
- package/dist/MarkdownEditor/editor/parser/parse/parseText.d.ts +26 -0
- package/dist/MarkdownEditor/editor/parser/parse/parseText.js +304 -0
- package/dist/MarkdownEditor/editor/parser/parserMarkdownToSlateNode.d.ts +3 -44
- package/dist/MarkdownEditor/editor/parser/parserMarkdownToSlateNode.js +141 -2282
- package/dist/MarkdownEditor/editor/parser/parserSlateNodeToMarkdown.js +137 -12
- package/dist/MarkdownEditor/editor/parser/remarkParse.d.ts +11 -1
- package/dist/MarkdownEditor/editor/parser/remarkParse.js +225 -39
- package/dist/MarkdownEditor/editor/plugins/elements.js +1 -1
- package/dist/MarkdownEditor/editor/types/Table.d.ts +2 -1
- package/dist/MarkdownEditor/editor/utils/markdownToHtml.js +2 -1
- package/dist/MarkdownEditor/el.d.ts +3 -0
- package/dist/MarkdownEditor/style.js +2 -0
- package/dist/Plugins/chart/index.js +7 -7
- package/dist/Plugins/code/components/CodeRenderer.js +27 -10
- package/dist/Plugins/code/components/CodeToolbar.js +3 -16
- package/dist/Workspace/Task/index.d.ts +13 -8
- package/dist/Workspace/Task/index.js +19 -2
- package/dist/Workspace/index.js +3 -2
- package/dist/Workspace/types.d.ts +3 -1
- package/package.json +1 -1
|
@@ -99,7 +99,7 @@ function _unsupported_iterable_to_array(o, minLen) {
|
|
|
99
99
|
if (n === "Map" || n === "Set") return Array.from(n);
|
|
100
100
|
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
|
|
101
101
|
}
|
|
102
|
-
import { ConfigProvider, theme as antdTheme } from "antd";
|
|
102
|
+
import { ConfigProvider, Skeleton, theme as antdTheme } from "antd";
|
|
103
103
|
import React, { useEffect, useMemo, useState } from "react";
|
|
104
104
|
import { MarkdownEditor } from "../../../MarkdownEditor";
|
|
105
105
|
import { useEditorStore } from "../../../MarkdownEditor/editor/store";
|
|
@@ -163,18 +163,18 @@ import { AceEditor, AceEditorContainer, CodeContainer, CodeToolbar, HtmlPreview,
|
|
|
163
163
|
viewMode: viewMode
|
|
164
164
|
}).toolbarProps;
|
|
165
165
|
// 检查代码块是否未闭合
|
|
166
|
-
var isUnclosed = ((_props_element = props.element) === null || _props_element === void 0 ? void 0 : (_props_element_otherProps = _props_element.otherProps) === null || _props_element_otherProps === void 0 ? void 0 : _props_element_otherProps.
|
|
166
|
+
var isUnclosed = ((_props_element = props.element) === null || _props_element === void 0 ? void 0 : (_props_element_otherProps = _props_element.otherProps) === null || _props_element_otherProps === void 0 ? void 0 : _props_element_otherProps.finished) === false;
|
|
167
167
|
// 5 秒超时机制:如果代码块未闭合,5 秒后自动设置为完成
|
|
168
168
|
useEffect(function() {
|
|
169
169
|
if (isUnclosed && !readonly) {
|
|
170
170
|
var timer = setTimeout(function() {
|
|
171
171
|
var _props_element_otherProps, _props_element;
|
|
172
|
-
// 检查
|
|
173
|
-
if (((_props_element = props.element) === null || _props_element === void 0 ? void 0 : (_props_element_otherProps = _props_element.otherProps) === null || _props_element_otherProps === void 0 ? void 0 : _props_element_otherProps.
|
|
172
|
+
// 检查 finished 是否仍然是 false(可能已经被其他逻辑更新)
|
|
173
|
+
if (((_props_element = props.element) === null || _props_element === void 0 ? void 0 : (_props_element_otherProps = _props_element.otherProps) === null || _props_element_otherProps === void 0 ? void 0 : _props_element_otherProps.finished) === false) {
|
|
174
174
|
var _props_element1;
|
|
175
175
|
update({
|
|
176
176
|
otherProps: _object_spread_props(_object_spread({}, (_props_element1 = props.element) === null || _props_element1 === void 0 ? void 0 : _props_element1.otherProps), {
|
|
177
|
-
|
|
177
|
+
finished: true
|
|
178
178
|
})
|
|
179
179
|
});
|
|
180
180
|
}
|
|
@@ -186,13 +186,30 @@ import { AceEditor, AceEditorContainer, CodeContainer, CodeToolbar, HtmlPreview,
|
|
|
186
186
|
}, [
|
|
187
187
|
isUnclosed,
|
|
188
188
|
readonly,
|
|
189
|
-
(_props_element1 = props.element) === null || _props_element1 === void 0 ? void 0 : (_props_element_otherProps1 = _props_element1.otherProps) === null || _props_element_otherProps1 === void 0 ? void 0 : _props_element_otherProps1.
|
|
189
|
+
(_props_element1 = props.element) === null || _props_element1 === void 0 ? void 0 : (_props_element_otherProps1 = _props_element1.otherProps) === null || _props_element_otherProps1 === void 0 ? void 0 : _props_element_otherProps1.finished,
|
|
190
190
|
update
|
|
191
191
|
]);
|
|
192
192
|
// 渲染组件
|
|
193
193
|
return useMemo(function() {
|
|
194
|
-
//
|
|
194
|
+
// 配置型 HTML 代码块:如果未完成且内容较长,显示 skeleton
|
|
195
195
|
if (shouldHideConfigHtml) {
|
|
196
|
+
var _props_element_otherProps, _props_element, _props_element_value, _props_element1;
|
|
197
|
+
var isUnclosed = ((_props_element = props.element) === null || _props_element === void 0 ? void 0 : (_props_element_otherProps = _props_element.otherProps) === null || _props_element_otherProps === void 0 ? void 0 : _props_element_otherProps.finished) === false;
|
|
198
|
+
var contentLength = ((_props_element1 = props.element) === null || _props_element1 === void 0 ? void 0 : (_props_element_value = _props_element1.value) === null || _props_element_value === void 0 ? void 0 : _props_element_value.length) || 0;
|
|
199
|
+
var isLongContent = contentLength > 100; // 内容超过 100 字符视为较长
|
|
200
|
+
// 如果未完成且内容较长,显示 skeleton
|
|
201
|
+
if (isUnclosed && isLongContent) {
|
|
202
|
+
return /*#__PURE__*/ React.createElement("div", _object_spread_props(_object_spread({}, props.attributes), {
|
|
203
|
+
style: {
|
|
204
|
+
padding: '20px'
|
|
205
|
+
}
|
|
206
|
+
}), /*#__PURE__*/ React.createElement(Skeleton, {
|
|
207
|
+
active: true,
|
|
208
|
+
paragraph: {
|
|
209
|
+
rows: 3
|
|
210
|
+
}
|
|
211
|
+
}));
|
|
212
|
+
}
|
|
196
213
|
return null;
|
|
197
214
|
}
|
|
198
215
|
// 只读模式下的思考块特殊渲染
|
|
@@ -203,7 +220,7 @@ import { AceEditor, AceEditorContainer, CodeContainer, CodeToolbar, HtmlPreview,
|
|
|
203
220
|
}
|
|
204
221
|
// 主要的代码编辑器渲染
|
|
205
222
|
if (shouldRenderAsCodeEditor) {
|
|
206
|
-
var _editorProps_codeProps,
|
|
223
|
+
var _editorProps_codeProps, _props_element2, _props_element3;
|
|
207
224
|
return /*#__PURE__*/ React.createElement(ConfigProvider, {
|
|
208
225
|
theme: {
|
|
209
226
|
algorithm: theme === 'chaos' ? antdTheme.darkAlgorithm : antdTheme.defaultAlgorithm
|
|
@@ -229,9 +246,9 @@ import { AceEditor, AceEditorContainer, CodeContainer, CodeToolbar, HtmlPreview,
|
|
|
229
246
|
display: isExpanded ? 'block' : 'none'
|
|
230
247
|
}
|
|
231
248
|
}, viewMode === 'preview' && props.element.language === 'html' && /*#__PURE__*/ React.createElement(HtmlPreview, {
|
|
232
|
-
htmlStr: (
|
|
249
|
+
htmlStr: (_props_element2 = props.element) === null || _props_element2 === void 0 ? void 0 : _props_element2.value
|
|
233
250
|
}), viewMode === 'preview' && props.element.language && props.element.language === 'markdown' && /*#__PURE__*/ React.createElement(MarkdownEditor, {
|
|
234
|
-
initValue: (
|
|
251
|
+
initValue: (_props_element3 = props.element) === null || _props_element3 === void 0 ? void 0 : _props_element3.value
|
|
235
252
|
}), /*#__PURE__*/ React.createElement("div", {
|
|
236
253
|
style: {
|
|
237
254
|
height: '100%',
|
|
@@ -6,9 +6,8 @@
|
|
|
6
6
|
import { ChevronsUpDown, Copy, Moon } from "@sofa-design/icons";
|
|
7
7
|
import { message, Segmented } from "antd";
|
|
8
8
|
import copy from "copy-to-clipboard";
|
|
9
|
-
import React, { useContext
|
|
9
|
+
import React, { useContext } from "react";
|
|
10
10
|
import { ActionIconBox } from "../../../Components/ActionIconBox";
|
|
11
|
-
import { Loading } from "../../../Components/Loading";
|
|
12
11
|
import { I18nContext } from "../../../I18n";
|
|
13
12
|
import { langIconMap } from "../langIconMap";
|
|
14
13
|
import { LanguageSelector } from "./LanguageSelector";
|
|
@@ -41,17 +40,10 @@ import { LoadImage } from "./LoadImage";
|
|
|
41
40
|
* />
|
|
42
41
|
* ```
|
|
43
42
|
*/ export var CodeToolbar = function(props) {
|
|
44
|
-
var
|
|
43
|
+
var _element_language, _element_language1, _i18n_locale, _i18n_locale1;
|
|
45
44
|
// 获取国际化上下文
|
|
46
45
|
var i18n = useContext(I18nContext);
|
|
47
46
|
var element = props.element, readonly = props.readonly, onCloseClick = props.onCloseClick, languageSelectorProps = props.languageSelectorProps, onViewModeToggle = props.onViewModeToggle, theme = props.theme, isExpanded = props.isExpanded, onExpandToggle = props.onExpandToggle, setTheme = props.setTheme, _props_viewMode = props.viewMode, viewMode = _props_viewMode === void 0 ? 'code' : _props_viewMode;
|
|
48
|
-
// 检查代码块是否未闭合 - 使用 useMemo 确保正确响应变化
|
|
49
|
-
var isUnclosed = useMemo(function() {
|
|
50
|
-
var _element_otherProps;
|
|
51
|
-
return (element === null || element === void 0 ? void 0 : (_element_otherProps = element.otherProps) === null || _element_otherProps === void 0 ? void 0 : _element_otherProps.finish) === false;
|
|
52
|
-
}, [
|
|
53
|
-
element === null || element === void 0 ? void 0 : (_element_otherProps = element.otherProps) === null || _element_otherProps === void 0 ? void 0 : _element_otherProps.finish
|
|
54
|
-
]);
|
|
55
47
|
return /*#__PURE__*/ React.createElement("div", {
|
|
56
48
|
"data-testid": "code-toolbar",
|
|
57
49
|
contentEditable: false,
|
|
@@ -112,12 +104,7 @@ import { LoadImage } from "./LoadImage";
|
|
|
112
104
|
},
|
|
113
105
|
src: langIconMap.get(((_element_language1 = element.language) === null || _element_language1 === void 0 ? void 0 : _element_language1.toLowerCase()) || '')
|
|
114
106
|
})), /*#__PURE__*/ React.createElement("div", null, element.language ? /*#__PURE__*/ React.createElement("span", null, element.katex ? 'Formula' : element.language === 'html' && element.render ? 'Html Renderer' : element.language) : /*#__PURE__*/ React.createElement("span", null, 'plain text'))) : // 非只读模式:显示语言选择器
|
|
115
|
-
/*#__PURE__*/ React.createElement(LanguageSelector, languageSelectorProps),
|
|
116
|
-
style: {
|
|
117
|
-
fontSize: '14px',
|
|
118
|
-
flexShrink: 0
|
|
119
|
-
}
|
|
120
|
-
})), /*#__PURE__*/ React.createElement("div", {
|
|
107
|
+
/*#__PURE__*/ React.createElement(LanguageSelector, languageSelectorProps)), /*#__PURE__*/ React.createElement("div", {
|
|
121
108
|
style: {
|
|
122
109
|
display: 'flex',
|
|
123
110
|
gap: 5,
|
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
import React, { type FC } from 'react';
|
|
2
|
+
export interface TaskItem {
|
|
3
|
+
key: string;
|
|
4
|
+
title?: string;
|
|
5
|
+
content?: React.ReactNode | React.ReactNode[];
|
|
6
|
+
status: 'success' | 'pending' | 'loading' | 'error';
|
|
7
|
+
}
|
|
2
8
|
export interface TaskItemInput {
|
|
3
|
-
items:
|
|
4
|
-
key: string;
|
|
5
|
-
title?: string;
|
|
6
|
-
content?: React.ReactNode | React.ReactNode[];
|
|
7
|
-
status: 'success' | 'pending' | 'loading' | 'error';
|
|
8
|
-
}[];
|
|
9
|
+
items: TaskItem[];
|
|
9
10
|
}
|
|
10
|
-
export
|
|
11
|
+
export interface TaskListProps {
|
|
12
|
+
/** 任务列表数据 */
|
|
11
13
|
data: TaskItemInput;
|
|
12
|
-
|
|
14
|
+
/** 点击任务项时的回调 */
|
|
15
|
+
onItemClick?: (item: TaskItem) => void;
|
|
16
|
+
}
|
|
17
|
+
export declare const TaskList: FC<TaskListProps>;
|
|
@@ -35,17 +35,34 @@ var StatusIcon = function(param) {
|
|
|
35
35
|
}
|
|
36
36
|
};
|
|
37
37
|
export var TaskList = function(param) {
|
|
38
|
-
var data = param.data;
|
|
38
|
+
var data = param.data, onItemClick = param.onItemClick;
|
|
39
39
|
var getPrefixCls = useContext(ConfigProvider.ConfigContext).getPrefixCls;
|
|
40
40
|
var prefixCls = getPrefixCls('agentic-workspace-task');
|
|
41
41
|
var _useTaskStyle = useTaskStyle(prefixCls), wrapSSR = _useTaskStyle.wrapSSR, hashId = _useTaskStyle.hashId;
|
|
42
|
+
var handleItemClick = function(item) {
|
|
43
|
+
onItemClick === null || onItemClick === void 0 ? void 0 : onItemClick(item);
|
|
44
|
+
};
|
|
42
45
|
return wrapSSR(/*#__PURE__*/ React.createElement("div", {
|
|
43
46
|
className: classNames(prefixCls, hashId),
|
|
44
47
|
"data-testid": "task-list"
|
|
45
48
|
}, data.items.map(function(item) {
|
|
46
49
|
return /*#__PURE__*/ React.createElement("div", {
|
|
47
50
|
key: item.key,
|
|
48
|
-
className: classNames("".concat(prefixCls, "-item"), "".concat(prefixCls, "-item-").concat(item.status), hashId)
|
|
51
|
+
className: classNames("".concat(prefixCls, "-item"), "".concat(prefixCls, "-item-").concat(item.status), hashId),
|
|
52
|
+
role: onItemClick ? 'button' : undefined,
|
|
53
|
+
tabIndex: onItemClick ? 0 : undefined,
|
|
54
|
+
onClick: onItemClick ? function() {
|
|
55
|
+
return handleItemClick(item);
|
|
56
|
+
} : undefined,
|
|
57
|
+
onKeyDown: onItemClick ? function(e) {
|
|
58
|
+
if (e.key === 'Enter' || e.key === ' ') {
|
|
59
|
+
e.preventDefault();
|
|
60
|
+
handleItemClick(item);
|
|
61
|
+
}
|
|
62
|
+
} : undefined,
|
|
63
|
+
style: {
|
|
64
|
+
cursor: onItemClick ? 'pointer' : undefined
|
|
65
|
+
}
|
|
49
66
|
}, /*#__PURE__*/ React.createElement("div", {
|
|
50
67
|
className: classNames("".concat(prefixCls, "-status"), hashId)
|
|
51
68
|
}, /*#__PURE__*/ React.createElement(StatusIcon, {
|
package/dist/Workspace/index.js
CHANGED
|
@@ -142,9 +142,10 @@ var BrowserComponent = function(param) {
|
|
|
142
142
|
}) : null;
|
|
143
143
|
};
|
|
144
144
|
var TaskComponent = function(param) {
|
|
145
|
-
var data = param.data;
|
|
145
|
+
var data = param.data, onItemClick = param.onItemClick;
|
|
146
146
|
return data ? /*#__PURE__*/ React.createElement(TaskList, {
|
|
147
|
-
data: data
|
|
147
|
+
data: data,
|
|
148
|
+
onItemClick: onItemClick
|
|
148
149
|
}) : null;
|
|
149
150
|
};
|
|
150
151
|
var FileComponent = function(props) {
|
|
@@ -2,7 +2,7 @@ import React, { type ReactNode } from 'react';
|
|
|
2
2
|
import type { MarkdownEditorProps } from '../MarkdownEditor';
|
|
3
3
|
import type { BrowserItemInput } from './Browser';
|
|
4
4
|
import type { RealtimeFollowData } from './RealtimeFollow';
|
|
5
|
-
import type { TaskItemInput } from './Task';
|
|
5
|
+
import type { TaskItem, TaskItemInput } from './Task';
|
|
6
6
|
export interface TabConfiguration {
|
|
7
7
|
key?: string;
|
|
8
8
|
icon?: ReactNode;
|
|
@@ -39,6 +39,8 @@ export interface BrowserProps extends BaseChildProps {
|
|
|
39
39
|
}
|
|
40
40
|
export interface TaskProps extends BaseChildProps {
|
|
41
41
|
data?: TaskItemInput;
|
|
42
|
+
/** 点击任务项时的回调 */
|
|
43
|
+
onItemClick?: (item: TaskItem) => void;
|
|
42
44
|
}
|
|
43
45
|
export declare enum FileCategory {
|
|
44
46
|
Text = "text",
|