@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.
Files changed (52) hide show
  1. package/dist/MarkdownEditor/BaseMarkdownEditor.js +1 -1
  2. package/dist/MarkdownEditor/editor/elements/Code.js +1 -1
  3. package/dist/MarkdownEditor/editor/elements/Image/index.js +37 -9
  4. package/dist/MarkdownEditor/editor/elements/LinkCard/index.js +87 -2
  5. package/dist/MarkdownEditor/editor/elements/List/List.js +10 -2
  6. package/dist/MarkdownEditor/editor/elements/Media.js +75 -23
  7. package/dist/MarkdownEditor/editor/elements/Table/ReadonlyTableComponent.js +2 -13
  8. package/dist/MarkdownEditor/editor/elements/Table/SimpleTable.js +89 -15
  9. package/dist/MarkdownEditor/editor/elements/Table/Table.js +3 -75
  10. package/dist/MarkdownEditor/editor/elements/TagPopup/index.js +4 -4
  11. package/dist/MarkdownEditor/editor/elements/TagPopup/style.js +14 -12
  12. package/dist/MarkdownEditor/editor/elements/index.js +1 -32
  13. package/dist/MarkdownEditor/editor/parser/parse/applyContextPropsAndConfig.d.ts +8 -0
  14. package/dist/MarkdownEditor/editor/parser/parse/applyContextPropsAndConfig.js +58 -0
  15. package/dist/MarkdownEditor/editor/parser/parse/parseBlockElements.d.ts +67 -0
  16. package/dist/MarkdownEditor/editor/parser/parse/parseBlockElements.js +289 -0
  17. package/dist/MarkdownEditor/editor/parser/parse/parseCode.d.ts +32 -0
  18. package/dist/MarkdownEditor/editor/parser/parse/parseCode.js +186 -0
  19. package/dist/MarkdownEditor/editor/parser/parse/parseElements.d.ts +27 -0
  20. package/dist/MarkdownEditor/editor/parser/parse/parseElements.js +83 -0
  21. package/dist/MarkdownEditor/editor/parser/parse/parseEmptyLines.d.ts +9 -0
  22. package/dist/MarkdownEditor/editor/parser/parse/parseEmptyLines.js +60 -0
  23. package/dist/MarkdownEditor/editor/parser/parse/parseFootnote.d.ts +10 -0
  24. package/dist/MarkdownEditor/editor/parser/parse/parseFootnote.js +12 -0
  25. package/dist/MarkdownEditor/editor/parser/parse/parseHtml.d.ts +63 -0
  26. package/dist/MarkdownEditor/editor/parser/parse/parseHtml.js +759 -0
  27. package/dist/MarkdownEditor/editor/parser/parse/parseMath.d.ts +24 -0
  28. package/dist/MarkdownEditor/editor/parser/parse/parseMath.js +58 -0
  29. package/dist/MarkdownEditor/editor/parser/parse/parseMedia.d.ts +27 -0
  30. package/dist/MarkdownEditor/editor/parser/parse/parseMedia.js +127 -0
  31. package/dist/MarkdownEditor/editor/parser/parse/parseTable.d.ts +39 -0
  32. package/dist/MarkdownEditor/editor/parser/parse/parseTable.js +348 -0
  33. package/dist/MarkdownEditor/editor/parser/parse/parseText.d.ts +26 -0
  34. package/dist/MarkdownEditor/editor/parser/parse/parseText.js +304 -0
  35. package/dist/MarkdownEditor/editor/parser/parserMarkdownToSlateNode.d.ts +3 -44
  36. package/dist/MarkdownEditor/editor/parser/parserMarkdownToSlateNode.js +141 -2282
  37. package/dist/MarkdownEditor/editor/parser/parserSlateNodeToMarkdown.js +137 -12
  38. package/dist/MarkdownEditor/editor/parser/remarkParse.d.ts +11 -1
  39. package/dist/MarkdownEditor/editor/parser/remarkParse.js +225 -39
  40. package/dist/MarkdownEditor/editor/plugins/elements.js +1 -1
  41. package/dist/MarkdownEditor/editor/types/Table.d.ts +2 -1
  42. package/dist/MarkdownEditor/editor/utils/markdownToHtml.js +2 -1
  43. package/dist/MarkdownEditor/el.d.ts +3 -0
  44. package/dist/MarkdownEditor/style.js +2 -0
  45. package/dist/Plugins/chart/index.js +7 -7
  46. package/dist/Plugins/code/components/CodeRenderer.js +27 -10
  47. package/dist/Plugins/code/components/CodeToolbar.js +3 -16
  48. package/dist/Workspace/Task/index.d.ts +13 -8
  49. package/dist/Workspace/Task/index.js +19 -2
  50. package/dist/Workspace/index.js +3 -2
  51. package/dist/Workspace/types.d.ts +3 -1
  52. 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.finish) === false;
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
- // 检查 finish 是否仍然是 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.finish) === false) {
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
- finish: true
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.finish,
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
- // 隐藏配置型 HTML 代码块
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, _props_element, _props_element1;
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: (_props_element = props.element) === null || _props_element === void 0 ? void 0 : _props_element.value
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: (_props_element1 = props.element) === null || _props_element1 === void 0 ? void 0 : _props_element1.value
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, useMemo } from "react";
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 _element_otherProps, _element_language, _element_language1, _i18n_locale, _i18n_locale1;
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), isUnclosed && /*#__PURE__*/ React.createElement(Loading, {
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 declare const TaskList: FC<{
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, {
@@ -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",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ant-design/agentic-ui",
3
- "version": "2.20.2",
3
+ "version": "2.22.0",
4
4
  "description": "面向智能体的 UI 组件库,提供多步推理可视化、工具调用展示、任务执行协同等 Agentic UI 能力",
5
5
  "repository": "git@github.com:ant-design/agentic-ui.git",
6
6
  "license": "MIT",