@ant-design/agentic-ui 2.29.59 → 2.30.1
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 +11 -0
- package/dist/Bubble/List/index.js +13 -1
- package/dist/Bubble/MessagesContent/EXCEPTION.js +11 -2
- package/dist/Bubble/MessagesContent/MarkdownPreview.js +34 -4
- package/dist/Bubble/MessagesContent/index.js +39 -10
- package/dist/Bubble/MessagesContent/style.js +55 -22
- package/dist/Bubble/UserBubble.js +3 -1
- package/dist/Bubble/type.d.ts +11 -0
- package/dist/Hooks/useLanguage.d.ts +1 -0
- package/dist/I18n/locales.d.ts +1 -0
- package/dist/I18n/locales.js +5 -3
- package/dist/MarkdownEditor/BaseMarkdownEditor.js +37 -5
- package/dist/MarkdownEditor/editor/elements/AgenticUiBlocks/AgenticUiTaskBlock.d.ts +4 -0
- package/dist/MarkdownEditor/editor/elements/AgenticUiBlocks/AgenticUiTaskBlock.js +74 -0
- package/dist/MarkdownEditor/editor/elements/AgenticUiBlocks/AgenticUiToolUseBarBlock.d.ts +4 -0
- package/dist/MarkdownEditor/editor/elements/AgenticUiBlocks/AgenticUiToolUseBarBlock.js +114 -0
- package/dist/MarkdownEditor/editor/elements/AgenticUiBlocks/agenticUiEmbedUtils.d.ts +20 -0
- package/dist/MarkdownEditor/editor/elements/AgenticUiBlocks/agenticUiEmbedUtils.js +169 -0
- package/dist/MarkdownEditor/editor/elements/Table/EditableTable.d.ts +11 -0
- package/dist/MarkdownEditor/editor/elements/Table/EditableTable.js +207 -0
- package/dist/MarkdownEditor/editor/elements/Table/Table.js +10 -276
- package/dist/MarkdownEditor/editor/elements/Table/TableCellIndex/index.js +7 -227
- package/dist/MarkdownEditor/editor/elements/Table/TableCellIndexSpacer/index.js +20 -229
- package/dist/MarkdownEditor/editor/elements/Table/commands/tableCommands.d.ts +9 -0
- package/dist/MarkdownEditor/editor/elements/Table/commands/tableCommands.js +242 -0
- package/dist/MarkdownEditor/editor/elements/Table/utils/editableTableWidth.d.ts +20 -0
- package/dist/MarkdownEditor/editor/elements/Table/utils/editableTableWidth.js +60 -0
- package/dist/MarkdownEditor/editor/elements/Table/utils/useEditableTableColWidths.d.ts +6 -0
- package/dist/MarkdownEditor/editor/elements/Table/utils/useEditableTableColWidths.js +20 -0
- package/dist/MarkdownEditor/editor/elements/Table/utils/useEditableTableContentWidth.d.ts +10 -0
- package/dist/MarkdownEditor/editor/elements/Table/utils/useEditableTableContentWidth.js +103 -0
- package/dist/MarkdownEditor/editor/elements/index.js +7 -0
- package/dist/MarkdownEditor/editor/parser/parse/parseCode.js +33 -2
- package/dist/MarkdownEditor/editor/parser/parserSlateNodeToMarkdown.js +3 -0
- package/dist/MarkdownEditor/editor/plugins/handlePaste.js +4 -1
- package/dist/MarkdownEditor/plugin.d.ts +15 -0
- package/dist/MarkdownEditor/style.js +258 -326
- package/dist/MarkdownEditor/types.d.ts +14 -0
- package/dist/MarkdownInputField/AttachmentButton/AttachmentButtonPopover.js +1 -1
- package/dist/MarkdownInputField/AttachmentButton/AttachmentFileList/AttachmentFileIcon.js +2 -2
- package/dist/MarkdownInputField/AttachmentButton/AttachmentFileList/AttachmentFileListItem.js +11 -8
- package/dist/MarkdownInputField/AttachmentButton/index.js +7 -2
- package/dist/MarkdownInputField/AttachmentButton/types.d.ts +5 -1
- package/dist/MarkdownInputField/AttachmentButton/utils.d.ts +7 -0
- package/dist/MarkdownInputField/AttachmentButton/utils.js +9 -1
- package/dist/MarkdownInputField/FileMapView/FileMapViewItem.js +10 -5
- package/dist/MarkdownInputField/FileUploadManager/index.d.ts +9 -0
- package/dist/MarkdownInputField/FileUploadManager/index.js +20 -4
- package/dist/MarkdownInputField/MarkdownInputField.js +5 -3
- package/dist/MarkdownInputField/SendActions/index.d.ts +9 -0
- package/dist/MarkdownInputField/SendActions/index.js +3 -2
- package/dist/MarkdownInputField/hooks/useMarkdownInputFieldRefs.js +10 -3
- package/dist/MarkdownInputField/utils/renderHelpers.d.ts +8 -1
- package/dist/MarkdownInputField/utils/renderHelpers.js +5 -1
- package/dist/MarkdownRenderer/AnimationText.d.ts +19 -0
- package/dist/MarkdownRenderer/AnimationText.js +226 -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 +362 -0
- package/dist/MarkdownRenderer/index.d.ts +11 -0
- package/dist/MarkdownRenderer/index.js +9 -0
- package/dist/MarkdownRenderer/renderers/AgenticUiTaskBlockRenderer.d.ts +6 -0
- package/dist/MarkdownRenderer/renderers/AgenticUiTaskBlockRenderer.js +66 -0
- package/dist/MarkdownRenderer/renderers/AgenticUiToolUseBarBlockRenderer.d.ts +6 -0
- package/dist/MarkdownRenderer/renderers/AgenticUiToolUseBarBlockRenderer.js +134 -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 +47 -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 +1241 -0
- package/dist/MarkdownRenderer/useStreaming.d.ts +29 -0
- package/dist/MarkdownRenderer/useStreaming.js +399 -0
- package/dist/Plugins/chart/AreaChart/index.js +4 -2
- package/dist/Plugins/chart/ChartRender.js +1 -0
- 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/chart/index.js +3 -1
- 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
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 流式 token 缓存类型。
|
|
3
|
+
* 在流式场景中,部分 Markdown token(link、image、table 等)可能处于未闭合状态,
|
|
4
|
+
* 直接交给 parser 会产生错误结果。此 hook 将已完成的内容和未完成的 pending 分离,
|
|
5
|
+
* 仅将已完成的部分交给 parser。
|
|
6
|
+
*
|
|
7
|
+
* 移植自 @ant-design/x-markdown 的 useStreaming hook。
|
|
8
|
+
*/
|
|
9
|
+
export declare enum StreamCacheTokenType {
|
|
10
|
+
Text = "text",
|
|
11
|
+
Link = "link",
|
|
12
|
+
Image = "image",
|
|
13
|
+
Html = "html",
|
|
14
|
+
Emphasis = "emphasis",
|
|
15
|
+
List = "list",
|
|
16
|
+
Table = "table",
|
|
17
|
+
InlineCode = "inline-code"
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 流式 Markdown 缓存 hook。
|
|
21
|
+
*
|
|
22
|
+
* 逐字符扫描输入,识别不完整的 Markdown token(link、image、table、emphasis 等),
|
|
23
|
+
* 将已完成的内容输出,不完整的部分暂缓,避免 parser 错误解析。
|
|
24
|
+
*
|
|
25
|
+
* @param input - 完整的 markdown 内容(持续增长)
|
|
26
|
+
* @param enabled - 是否启用流式缓存(非流式直接透传)
|
|
27
|
+
* @returns 安全的可解析 markdown 字符串
|
|
28
|
+
*/
|
|
29
|
+
export declare const useStreaming: (input: string, enabled: boolean) => string;
|
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
function _array_like_to_array(arr, len) {
|
|
2
|
+
if (len == null || len > arr.length) len = arr.length;
|
|
3
|
+
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
|
|
4
|
+
return arr2;
|
|
5
|
+
}
|
|
6
|
+
function _array_with_holes(arr) {
|
|
7
|
+
if (Array.isArray(arr)) return arr;
|
|
8
|
+
}
|
|
9
|
+
function _define_property(obj, key, value) {
|
|
10
|
+
if (key in obj) {
|
|
11
|
+
Object.defineProperty(obj, key, {
|
|
12
|
+
value: value,
|
|
13
|
+
enumerable: true,
|
|
14
|
+
configurable: true,
|
|
15
|
+
writable: true
|
|
16
|
+
});
|
|
17
|
+
} else {
|
|
18
|
+
obj[key] = value;
|
|
19
|
+
}
|
|
20
|
+
return obj;
|
|
21
|
+
}
|
|
22
|
+
function _iterable_to_array_limit(arr, i) {
|
|
23
|
+
var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
|
|
24
|
+
if (_i == null) return;
|
|
25
|
+
var _arr = [];
|
|
26
|
+
var _n = true;
|
|
27
|
+
var _d = false;
|
|
28
|
+
var _s, _e;
|
|
29
|
+
try {
|
|
30
|
+
for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
|
|
31
|
+
_arr.push(_s.value);
|
|
32
|
+
if (i && _arr.length === i) break;
|
|
33
|
+
}
|
|
34
|
+
} catch (err) {
|
|
35
|
+
_d = true;
|
|
36
|
+
_e = err;
|
|
37
|
+
} finally{
|
|
38
|
+
try {
|
|
39
|
+
if (!_n && _i["return"] != null) _i["return"]();
|
|
40
|
+
} finally{
|
|
41
|
+
if (_d) throw _e;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return _arr;
|
|
45
|
+
}
|
|
46
|
+
function _non_iterable_rest() {
|
|
47
|
+
throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
48
|
+
}
|
|
49
|
+
function _sliced_to_array(arr, i) {
|
|
50
|
+
return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
|
|
51
|
+
}
|
|
52
|
+
function _unsupported_iterable_to_array(o, minLen) {
|
|
53
|
+
if (!o) return;
|
|
54
|
+
if (typeof o === "string") return _array_like_to_array(o, minLen);
|
|
55
|
+
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
56
|
+
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
57
|
+
if (n === "Map" || n === "Set") return Array.from(n);
|
|
58
|
+
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
|
|
59
|
+
}
|
|
60
|
+
import { useCallback, useEffect, useRef, useState } from "react";
|
|
61
|
+
/**
|
|
62
|
+
* 流式 token 缓存类型。
|
|
63
|
+
* 在流式场景中,部分 Markdown token(link、image、table 等)可能处于未闭合状态,
|
|
64
|
+
* 直接交给 parser 会产生错误结果。此 hook 将已完成的内容和未完成的 pending 分离,
|
|
65
|
+
* 仅将已完成的部分交给 parser。
|
|
66
|
+
*
|
|
67
|
+
* 移植自 @ant-design/x-markdown 的 useStreaming hook。
|
|
68
|
+
*/ export var StreamCacheTokenType = /*#__PURE__*/ function(StreamCacheTokenType) {
|
|
69
|
+
StreamCacheTokenType["Text"] = "text";
|
|
70
|
+
StreamCacheTokenType["Link"] = "link";
|
|
71
|
+
StreamCacheTokenType["Image"] = "image";
|
|
72
|
+
StreamCacheTokenType["Html"] = "html";
|
|
73
|
+
StreamCacheTokenType["Emphasis"] = "emphasis";
|
|
74
|
+
StreamCacheTokenType["List"] = "list";
|
|
75
|
+
StreamCacheTokenType["Table"] = "table";
|
|
76
|
+
StreamCacheTokenType["InlineCode"] = "inline-code";
|
|
77
|
+
return StreamCacheTokenType;
|
|
78
|
+
}({});
|
|
79
|
+
var STREAM_INCOMPLETE_REGEX = {
|
|
80
|
+
image: [
|
|
81
|
+
/^!\[[^\]\r\n]{0,1000}$/,
|
|
82
|
+
/^!\[[^\r\n]{0,1000}\]\(*[^)\r\n]{0,1000}$/
|
|
83
|
+
],
|
|
84
|
+
link: [
|
|
85
|
+
/^\[(?!\^)[^\]\r\n]{0,1000}$/,
|
|
86
|
+
/^\[(?!\^)[^\r\n]{0,1000}\]\(+[^)\r\n]{0,1000}$/
|
|
87
|
+
],
|
|
88
|
+
html: [
|
|
89
|
+
/^<\/$/,
|
|
90
|
+
/^<\/?[a-zA-Z][a-zA-Z0-9-]{0,100}[^>\r\n]{0,1000}$/
|
|
91
|
+
],
|
|
92
|
+
commonEmphasis: [
|
|
93
|
+
/^(\*{1,3}|_{1,3})(?!\s)(?!.*\1$)[^\r\n]{0,1000}$/
|
|
94
|
+
],
|
|
95
|
+
list: [
|
|
96
|
+
/^[-+*]\s{0,3}$/,
|
|
97
|
+
/^[-+*]\s{1,3}(\*{1,3}|_{1,3})(?!\s)(?!.*\1$)[^\r\n]{0,1000}$/
|
|
98
|
+
],
|
|
99
|
+
'inline-code': [
|
|
100
|
+
/^`[^`\r\n]{0,300}$/
|
|
101
|
+
]
|
|
102
|
+
};
|
|
103
|
+
var STREAMING_LOADING_PLACEHOLDER = '...';
|
|
104
|
+
/**
|
|
105
|
+
* 判断表格是否仍不完整。
|
|
106
|
+
* 等待 header + separator + 至少一行数据(3 行)后提交。
|
|
107
|
+
*/ var isTableIncomplete = function isTableIncomplete(markdown) {
|
|
108
|
+
if (markdown.includes('\n\n')) return false;
|
|
109
|
+
var lines = markdown.split('\n');
|
|
110
|
+
// 需要至少 3 行:header | separator | 第一行数据
|
|
111
|
+
if (lines.length < 3) return true;
|
|
112
|
+
var _lines = _sliced_to_array(lines, 2), header = _lines[0], separator = _lines[1];
|
|
113
|
+
if (!/^\|.*\|$/.test(header.trim())) return false;
|
|
114
|
+
var columns = separator.trim().split('|').map(function(c) {
|
|
115
|
+
return c.trim();
|
|
116
|
+
}).filter(Boolean);
|
|
117
|
+
var isSeparatorValid = columns.every(function(col, i) {
|
|
118
|
+
return i === columns.length - 1 ? col === ':' || /^:?-+:?$/.test(col) : /^:?-+:?$/.test(col);
|
|
119
|
+
});
|
|
120
|
+
if (!isSeparatorValid) return false;
|
|
121
|
+
// separator 完整但还没有数据行
|
|
122
|
+
if (lines.length <= 2) return true;
|
|
123
|
+
// 有数据行了,不再缓存
|
|
124
|
+
return false;
|
|
125
|
+
};
|
|
126
|
+
var _obj;
|
|
127
|
+
var tokenRecognizerMap = (_obj = {}, _define_property(_obj, "link", {
|
|
128
|
+
tokenType: "link",
|
|
129
|
+
isStartOfToken: function isStartOfToken(md) {
|
|
130
|
+
return md.startsWith('[');
|
|
131
|
+
},
|
|
132
|
+
isStreamingValid: function isStreamingValid(md) {
|
|
133
|
+
return STREAM_INCOMPLETE_REGEX.link.some(function(re) {
|
|
134
|
+
return re.test(md);
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
}), _define_property(_obj, "image", {
|
|
138
|
+
tokenType: "image",
|
|
139
|
+
isStartOfToken: function isStartOfToken(md) {
|
|
140
|
+
return md.startsWith('!');
|
|
141
|
+
},
|
|
142
|
+
isStreamingValid: function isStreamingValid(md) {
|
|
143
|
+
return STREAM_INCOMPLETE_REGEX.image.some(function(re) {
|
|
144
|
+
return re.test(md);
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
}), _define_property(_obj, "html", {
|
|
148
|
+
tokenType: "html",
|
|
149
|
+
isStartOfToken: function isStartOfToken(md) {
|
|
150
|
+
return md.startsWith('<');
|
|
151
|
+
},
|
|
152
|
+
isStreamingValid: function isStreamingValid(md) {
|
|
153
|
+
return STREAM_INCOMPLETE_REGEX.html.some(function(re) {
|
|
154
|
+
return re.test(md);
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
}), _define_property(_obj, "emphasis", {
|
|
158
|
+
tokenType: "emphasis",
|
|
159
|
+
isStartOfToken: function isStartOfToken(md) {
|
|
160
|
+
return md.startsWith('*') || md.startsWith('_');
|
|
161
|
+
},
|
|
162
|
+
isStreamingValid: function isStreamingValid(md) {
|
|
163
|
+
return STREAM_INCOMPLETE_REGEX.commonEmphasis.some(function(re) {
|
|
164
|
+
return re.test(md);
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
}), _define_property(_obj, "list", {
|
|
168
|
+
tokenType: "list",
|
|
169
|
+
isStartOfToken: function isStartOfToken(md) {
|
|
170
|
+
return /^[-+*]/.test(md);
|
|
171
|
+
},
|
|
172
|
+
isStreamingValid: function isStreamingValid(md) {
|
|
173
|
+
return STREAM_INCOMPLETE_REGEX.list.some(function(re) {
|
|
174
|
+
return re.test(md);
|
|
175
|
+
});
|
|
176
|
+
},
|
|
177
|
+
getCommitPrefix: function getCommitPrefix(pending) {
|
|
178
|
+
var _pending_match;
|
|
179
|
+
var listPrefix = (_pending_match = pending.match(/^([-+*]\s{0,3})/)) === null || _pending_match === void 0 ? void 0 : _pending_match[1];
|
|
180
|
+
var rest = listPrefix ? pending.slice(listPrefix.length) : '';
|
|
181
|
+
return listPrefix && rest.startsWith('`') ? listPrefix : null;
|
|
182
|
+
}
|
|
183
|
+
}), _define_property(_obj, "table", {
|
|
184
|
+
tokenType: "table",
|
|
185
|
+
isStartOfToken: function isStartOfToken(md) {
|
|
186
|
+
return md.startsWith('|');
|
|
187
|
+
},
|
|
188
|
+
isStreamingValid: isTableIncomplete
|
|
189
|
+
}), _define_property(_obj, "inline-code", {
|
|
190
|
+
tokenType: "inline-code",
|
|
191
|
+
isStartOfToken: function isStartOfToken(md) {
|
|
192
|
+
return md.startsWith('`');
|
|
193
|
+
},
|
|
194
|
+
isStreamingValid: function isStreamingValid(md) {
|
|
195
|
+
return STREAM_INCOMPLETE_REGEX['inline-code'].some(function(re) {
|
|
196
|
+
return re.test(md);
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
}), _obj);
|
|
200
|
+
var commitCache = function commitCache(cache) {
|
|
201
|
+
if (cache.pending) {
|
|
202
|
+
cache.completeMarkdown += cache.pending;
|
|
203
|
+
cache.pending = '';
|
|
204
|
+
}
|
|
205
|
+
cache.token = "text";
|
|
206
|
+
};
|
|
207
|
+
var recognize = function recognize(cache, tokenType) {
|
|
208
|
+
var recognizer = tokenRecognizerMap[tokenType];
|
|
209
|
+
if (!recognizer) return;
|
|
210
|
+
var token = cache.token, pending = cache.pending;
|
|
211
|
+
if (token === "text" && recognizer.isStartOfToken(pending)) {
|
|
212
|
+
cache.token = tokenType;
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
if (token === tokenType && !recognizer.isStreamingValid(pending)) {
|
|
216
|
+
var _recognizer_getCommitPrefix;
|
|
217
|
+
var prefix = (_recognizer_getCommitPrefix = recognizer.getCommitPrefix) === null || _recognizer_getCommitPrefix === void 0 ? void 0 : _recognizer_getCommitPrefix.call(recognizer, pending);
|
|
218
|
+
if (prefix) {
|
|
219
|
+
cache.completeMarkdown += prefix;
|
|
220
|
+
cache.pending = pending.slice(prefix.length);
|
|
221
|
+
cache.token = "text";
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
commitCache(cache);
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
var recognizeHandlers = Object.values(tokenRecognizerMap).map(function(rec) {
|
|
228
|
+
return {
|
|
229
|
+
tokenType: rec.tokenType,
|
|
230
|
+
recognize: function recognize1(cache) {
|
|
231
|
+
return recognize(cache, rec.tokenType);
|
|
232
|
+
}
|
|
233
|
+
};
|
|
234
|
+
});
|
|
235
|
+
var getInitialCache = function getInitialCache() {
|
|
236
|
+
return {
|
|
237
|
+
pending: '',
|
|
238
|
+
token: "text",
|
|
239
|
+
processedLength: 0,
|
|
240
|
+
completeMarkdown: ''
|
|
241
|
+
};
|
|
242
|
+
};
|
|
243
|
+
var getStreamingOutput = function getStreamingOutput(cache) {
|
|
244
|
+
if (cache.completeMarkdown) return cache.completeMarkdown;
|
|
245
|
+
if (cache.pending) return STREAMING_LOADING_PLACEHOLDER;
|
|
246
|
+
return '';
|
|
247
|
+
};
|
|
248
|
+
var isInCodeBlock = function isInCodeBlock(text) {
|
|
249
|
+
var isFinalChunk = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;
|
|
250
|
+
var lines = text.split('\n');
|
|
251
|
+
var inFenced = false;
|
|
252
|
+
var fenceChar = '';
|
|
253
|
+
var fenceLen = 0;
|
|
254
|
+
for(var i = 0; i < lines.length; i++){
|
|
255
|
+
var line = lines[i].endsWith('\r') ? lines[i].slice(0, -1) : lines[i];
|
|
256
|
+
var match = line.match(/^(`{3,}|~{3,})(.*)$/);
|
|
257
|
+
if (match) {
|
|
258
|
+
var fence = match[1];
|
|
259
|
+
var after = match[2];
|
|
260
|
+
var char = fence[0];
|
|
261
|
+
var len = fence.length;
|
|
262
|
+
if (!inFenced) {
|
|
263
|
+
inFenced = true;
|
|
264
|
+
fenceChar = char;
|
|
265
|
+
fenceLen = len;
|
|
266
|
+
} else {
|
|
267
|
+
var isValidEnd = char === fenceChar && len >= fenceLen && /^\s*$/.test(after);
|
|
268
|
+
if (isValidEnd && (isFinalChunk || i < lines.length - 1)) {
|
|
269
|
+
inFenced = false;
|
|
270
|
+
fenceChar = '';
|
|
271
|
+
fenceLen = 0;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
return inFenced;
|
|
277
|
+
};
|
|
278
|
+
/**
|
|
279
|
+
* 流式 Markdown 缓存 hook。
|
|
280
|
+
*
|
|
281
|
+
* 逐字符扫描输入,识别不完整的 Markdown token(link、image、table、emphasis 等),
|
|
282
|
+
* 将已完成的内容输出,不完整的部分暂缓,避免 parser 错误解析。
|
|
283
|
+
*
|
|
284
|
+
* @param input - 完整的 markdown 内容(持续增长)
|
|
285
|
+
* @param enabled - 是否启用流式缓存(非流式直接透传)
|
|
286
|
+
* @returns 安全的可解析 markdown 字符串
|
|
287
|
+
*/ export var useStreaming = function useStreaming(input, enabled) {
|
|
288
|
+
var _useState = _sliced_to_array(useState(''), 2), output = _useState[0], setOutput = _useState[1];
|
|
289
|
+
var cacheRef = useRef(getInitialCache());
|
|
290
|
+
var processStreaming = useCallback(function(text) {
|
|
291
|
+
if (!text) {
|
|
292
|
+
setOutput('');
|
|
293
|
+
cacheRef.current = getInitialCache();
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
var expectedPrefix = cacheRef.current.completeMarkdown + cacheRef.current.pending;
|
|
297
|
+
if (!text.startsWith(expectedPrefix)) {
|
|
298
|
+
cacheRef.current = getInitialCache();
|
|
299
|
+
}
|
|
300
|
+
var cache = cacheRef.current;
|
|
301
|
+
var chunk = text.slice(cache.processedLength);
|
|
302
|
+
if (!chunk) return;
|
|
303
|
+
cache.processedLength += chunk.length;
|
|
304
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
305
|
+
try {
|
|
306
|
+
for(var _iterator = chunk[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
307
|
+
var char = _step.value;
|
|
308
|
+
cache.pending += char;
|
|
309
|
+
if (isInCodeBlock(cache.completeMarkdown + cache.pending)) {
|
|
310
|
+
commitCache(cache);
|
|
311
|
+
continue;
|
|
312
|
+
}
|
|
313
|
+
if (cache.token === "text") {
|
|
314
|
+
var _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
|
|
315
|
+
try {
|
|
316
|
+
for(var _iterator1 = recognizeHandlers[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true){
|
|
317
|
+
var handler = _step1.value;
|
|
318
|
+
handler.recognize(cache);
|
|
319
|
+
}
|
|
320
|
+
} catch (err) {
|
|
321
|
+
_didIteratorError1 = true;
|
|
322
|
+
_iteratorError1 = err;
|
|
323
|
+
} finally{
|
|
324
|
+
try {
|
|
325
|
+
if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
|
|
326
|
+
_iterator1.return();
|
|
327
|
+
}
|
|
328
|
+
} finally{
|
|
329
|
+
if (_didIteratorError1) {
|
|
330
|
+
throw _iteratorError1;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
} else {
|
|
335
|
+
var handler1 = recognizeHandlers.find(function(h) {
|
|
336
|
+
return h.tokenType === cache.token;
|
|
337
|
+
});
|
|
338
|
+
handler1 === null || handler1 === void 0 ? void 0 : handler1.recognize(cache);
|
|
339
|
+
if (cache.token === "text") {
|
|
340
|
+
var _iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = undefined;
|
|
341
|
+
try {
|
|
342
|
+
for(var _iterator2 = recognizeHandlers[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true){
|
|
343
|
+
var h = _step2.value;
|
|
344
|
+
h.recognize(cache);
|
|
345
|
+
}
|
|
346
|
+
} catch (err) {
|
|
347
|
+
_didIteratorError2 = true;
|
|
348
|
+
_iteratorError2 = err;
|
|
349
|
+
} finally{
|
|
350
|
+
try {
|
|
351
|
+
if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
|
|
352
|
+
_iterator2.return();
|
|
353
|
+
}
|
|
354
|
+
} finally{
|
|
355
|
+
if (_didIteratorError2) {
|
|
356
|
+
throw _iteratorError2;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
if (cache.token === "text") {
|
|
363
|
+
commitCache(cache);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
} catch (err) {
|
|
367
|
+
_didIteratorError = true;
|
|
368
|
+
_iteratorError = err;
|
|
369
|
+
} finally{
|
|
370
|
+
try {
|
|
371
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
372
|
+
_iterator.return();
|
|
373
|
+
}
|
|
374
|
+
} finally{
|
|
375
|
+
if (_didIteratorError) {
|
|
376
|
+
throw _iteratorError;
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
setOutput(getStreamingOutput(cache));
|
|
381
|
+
}, []);
|
|
382
|
+
useEffect(function() {
|
|
383
|
+
if (typeof input !== 'string') {
|
|
384
|
+
setOutput('');
|
|
385
|
+
cacheRef.current = getInitialCache();
|
|
386
|
+
return;
|
|
387
|
+
}
|
|
388
|
+
if (enabled) {
|
|
389
|
+
processStreaming(input);
|
|
390
|
+
} else {
|
|
391
|
+
setOutput(input);
|
|
392
|
+
}
|
|
393
|
+
}, [
|
|
394
|
+
input,
|
|
395
|
+
enabled,
|
|
396
|
+
processStreaming
|
|
397
|
+
]);
|
|
398
|
+
return output;
|
|
399
|
+
};
|
|
@@ -77,7 +77,7 @@ function _unsupported_iterable_to_array(o, minLen) {
|
|
|
77
77
|
}
|
|
78
78
|
import { ConfigProvider } from "antd";
|
|
79
79
|
import classNames from "clsx";
|
|
80
|
-
import React, { useContext, useMemo, useRef } from "react";
|
|
80
|
+
import React, { useContext, useLayoutEffect, useMemo, useRef } from "react";
|
|
81
81
|
import { Line } from "react-chartjs-2";
|
|
82
82
|
import { ChartContainer, ChartFilter, ChartStatistic, ChartToolBar, downloadChart } from "../components";
|
|
83
83
|
import { defaultColorList } from "../const";
|
|
@@ -112,8 +112,10 @@ import { useStyle } from "./style";
|
|
|
112
112
|
* @since 1.0.0
|
|
113
113
|
*/ var AreaChart = function AreaChart(param) {
|
|
114
114
|
var title = param.title, data = param.data, _param_width = param.width, width = _param_width === void 0 ? 600 : _param_width, _param_height = param.height, height = _param_height === void 0 ? 400 : _param_height, className = param.className, classNamesProp = param.classNames, style = param.style, stylesProp = param.styles, dataTime = param.dataTime, _param_theme = param.theme, theme = _param_theme === void 0 ? 'light' : _param_theme, color = param.color, _param_showLegend = param.showLegend, showLegend = _param_showLegend === void 0 ? true : _param_showLegend, _param_legendPosition = param.legendPosition, legendPosition = _param_legendPosition === void 0 ? 'bottom' : _param_legendPosition, _param_legendAlign = param.legendAlign, legendAlign = _param_legendAlign === void 0 ? 'start' : _param_legendAlign, _param_showGrid = param.showGrid, showGrid = _param_showGrid === void 0 ? true : _param_showGrid, _param_xPosition = param.xPosition, xPosition = _param_xPosition === void 0 ? 'bottom' : _param_xPosition, _param_yPosition = param.yPosition, yPosition = _param_yPosition === void 0 ? 'left' : _param_yPosition, _param_hiddenX = param.hiddenX, hiddenX = _param_hiddenX === void 0 ? false : _param_hiddenX, _param_hiddenY = param.hiddenY, hiddenY = _param_hiddenY === void 0 ? false : _param_hiddenY, toolbarExtra = param.toolbarExtra, _param_renderFilterInToolbar = param.renderFilterInToolbar, renderFilterInToolbar = _param_renderFilterInToolbar === void 0 ? false : _param_renderFilterInToolbar, statisticConfig = param.statistic, variant = param.variant, _param_loading = param.loading, loading = _param_loading === void 0 ? false : _param_loading;
|
|
115
|
+
useLayoutEffect(function() {
|
|
116
|
+
registerLineChartComponents();
|
|
117
|
+
}, []);
|
|
115
118
|
// 注册 Chart.js 组件
|
|
116
|
-
registerLineChartComponents();
|
|
117
119
|
// 响应式尺寸
|
|
118
120
|
var _useResponsiveSize = useResponsiveSize(width, height), responsiveWidth = _useResponsiveSize.responsiveWidth, responsiveHeight = _useResponsiveSize.responsiveHeight, isMobile = _useResponsiveSize.isMobile;
|
|
119
121
|
// 样式注册
|
|
@@ -1195,6 +1195,7 @@ import { debounce, getDataHash, isConfigEqual, isNotEmpty, toNumber } from "./ut
|
|
|
1195
1195
|
config === null || config === void 0 ? void 0 : config.y,
|
|
1196
1196
|
config === null || config === void 0 ? void 0 : config.height,
|
|
1197
1197
|
config === null || config === void 0 ? void 0 : config.index,
|
|
1198
|
+
renderKey,
|
|
1198
1199
|
toolBar,
|
|
1199
1200
|
convertDonutData,
|
|
1200
1201
|
convertFlatData,
|
|
@@ -113,7 +113,7 @@ function _unsupported_iterable_to_array(o, minLen) {
|
|
|
113
113
|
}
|
|
114
114
|
import { ConfigProvider } from "antd";
|
|
115
115
|
import classNames from "clsx";
|
|
116
|
-
import React, { useContext, useMemo, useRef } from "react";
|
|
116
|
+
import React, { useContext, useLayoutEffect, useMemo, useRef } from "react";
|
|
117
117
|
import { Line } from "react-chartjs-2";
|
|
118
118
|
import { ChartContainer, ChartFilter, ChartStatistic, ChartToolBar, downloadChart } from "../components";
|
|
119
119
|
import { defaultColorList } from "../const";
|
|
@@ -146,7 +146,9 @@ var LineChart = function LineChart(_0) {
|
|
|
146
146
|
]);
|
|
147
147
|
var _props_styles, _props_styles1;
|
|
148
148
|
// 注册 Chart.js 组件
|
|
149
|
-
|
|
149
|
+
useLayoutEffect(function() {
|
|
150
|
+
registerLineChartComponents();
|
|
151
|
+
}, []);
|
|
150
152
|
// 响应式尺寸
|
|
151
153
|
var _useResponsiveSize = useResponsiveSize(width, height), responsiveWidth = _useResponsiveSize.responsiveWidth, responsiveHeight = _useResponsiveSize.responsiveHeight, isMobile = _useResponsiveSize.isMobile;
|
|
152
154
|
// 样式注册
|
|
@@ -10,6 +10,8 @@ export interface ChartErrorBoundaryProps {
|
|
|
10
10
|
}
|
|
11
11
|
export interface ChartErrorBoundaryState {
|
|
12
12
|
hasError: boolean;
|
|
13
|
+
/** 用于重试时销毁并重建 children */
|
|
14
|
+
retryKey: number;
|
|
13
15
|
}
|
|
14
16
|
/**
|
|
15
17
|
* ChartErrorBoundary 组件 - 图表错误边界组件
|
|
@@ -405,6 +407,7 @@ declare class ChartErrorBoundary extends React.Component<ChartErrorBoundaryProps
|
|
|
405
407
|
'comment.jumpTo': string;
|
|
406
408
|
'chart.renderFailed': string;
|
|
407
409
|
'chart.renderFailedSubTitle': string;
|
|
410
|
+
'chart.retry': string;
|
|
408
411
|
'chart.legend.show': string;
|
|
409
412
|
'chart.legend.hide': string;
|
|
410
413
|
'chart.legend.prevPage': string;
|
|
@@ -794,6 +797,7 @@ declare class ChartErrorBoundary extends React.Component<ChartErrorBoundaryProps
|
|
|
794
797
|
'comment.jumpTo': string;
|
|
795
798
|
'chart.renderFailed': string;
|
|
796
799
|
'chart.renderFailedSubTitle': string;
|
|
800
|
+
'chart.retry': string;
|
|
797
801
|
'chart.legend.show': string;
|
|
798
802
|
'chart.legend.hide': string;
|
|
799
803
|
'chart.legend.prevPage': string;
|
|
@@ -819,7 +823,11 @@ declare class ChartErrorBoundary extends React.Component<ChartErrorBoundaryProps
|
|
|
819
823
|
}) => void) | undefined;
|
|
820
824
|
}>;
|
|
821
825
|
context: React.ContextType<typeof I18nContext>;
|
|
826
|
+
/** 本轮错误是否已自动重试过,用于“自动重试一次” */
|
|
827
|
+
private _hasAutoRetried;
|
|
822
828
|
constructor(props: ChartErrorBoundaryProps);
|
|
829
|
+
/** 重试:清除错误状态并递增 key,使 children 销毁后重建 */
|
|
830
|
+
handleRetry: () => void;
|
|
823
831
|
static getDerivedStateFromError(_error: Error): Partial<ChartErrorBoundaryState>;
|
|
824
832
|
componentDidCatch(error: Error, errorInfo: ErrorInfo): void;
|
|
825
833
|
render(): ReactNode;
|
|
@@ -84,7 +84,7 @@ function _is_native_reflect_construct() {
|
|
|
84
84
|
return !!result;
|
|
85
85
|
})();
|
|
86
86
|
}
|
|
87
|
-
import { Result } from "antd";
|
|
87
|
+
import { Button, Result } from "antd";
|
|
88
88
|
import React from "react";
|
|
89
89
|
import { I18nContext } from "../../../../I18n";
|
|
90
90
|
var _React_Component;
|
|
@@ -123,9 +123,18 @@ var _React_Component;
|
|
|
123
123
|
var _this;
|
|
124
124
|
_this = _call_super(this, ChartErrorBoundary, [
|
|
125
125
|
props
|
|
126
|
-
])
|
|
126
|
+
]), /** 本轮错误是否已自动重试过,用于“自动重试一次” */ _define_property(_this, "_hasAutoRetried", false), /** 重试:清除错误状态并递增 key,使 children 销毁后重建 */ _define_property(_this, "handleRetry", function() {
|
|
127
|
+
_this._hasAutoRetried = false;
|
|
128
|
+
_this.setState(function(prev) {
|
|
129
|
+
return {
|
|
130
|
+
hasError: false,
|
|
131
|
+
retryKey: prev.retryKey + 1
|
|
132
|
+
};
|
|
133
|
+
});
|
|
134
|
+
});
|
|
127
135
|
_this.state = {
|
|
128
|
-
hasError: false
|
|
136
|
+
hasError: false,
|
|
137
|
+
retryKey: 0
|
|
129
138
|
};
|
|
130
139
|
return _this;
|
|
131
140
|
}
|
|
@@ -141,6 +150,16 @@ var _React_Component;
|
|
|
141
150
|
if (process.env.NODE_ENV === 'development') {
|
|
142
151
|
console.error('ChartErrorBoundary caught an error:', error, errorInfo);
|
|
143
152
|
}
|
|
153
|
+
// 自动重试一次:清除错误并递增 key,使 children 销毁后重建
|
|
154
|
+
if (!this._hasAutoRetried) {
|
|
155
|
+
this._hasAutoRetried = true;
|
|
156
|
+
this.setState(function(prev) {
|
|
157
|
+
return {
|
|
158
|
+
hasError: false,
|
|
159
|
+
retryKey: prev.retryKey + 1
|
|
160
|
+
};
|
|
161
|
+
});
|
|
162
|
+
}
|
|
144
163
|
}
|
|
145
164
|
},
|
|
146
165
|
{
|
|
@@ -154,15 +173,21 @@ var _React_Component;
|
|
|
154
173
|
if (fallback) {
|
|
155
174
|
return fallback;
|
|
156
175
|
}
|
|
157
|
-
// 使用 antd Result 组件的简洁错误UI
|
|
176
|
+
// 使用 antd Result 组件的简洁错误 UI,带重试按钮
|
|
158
177
|
var locale = (_this_context = this.context) === null || _this_context === void 0 ? void 0 : _this_context.locale;
|
|
159
178
|
return /*#__PURE__*/ React.createElement(Result, {
|
|
160
179
|
status: "error",
|
|
161
180
|
title: (locale === null || locale === void 0 ? void 0 : locale['chart.renderFailed']) || '图表渲染失败',
|
|
162
|
-
subTitle: (locale === null || locale === void 0 ? void 0 : locale['chart.renderFailedSubTitle']) || '图表组件遇到了一个错误,请稍后重试'
|
|
181
|
+
subTitle: (locale === null || locale === void 0 ? void 0 : locale['chart.renderFailedSubTitle']) || '图表组件遇到了一个错误,请稍后重试',
|
|
182
|
+
extra: /*#__PURE__*/ React.createElement(Button, {
|
|
183
|
+
type: "primary",
|
|
184
|
+
onClick: this.handleRetry
|
|
185
|
+
}, (locale === null || locale === void 0 ? void 0 : locale['chart.retry']) || '重新渲染')
|
|
163
186
|
});
|
|
164
187
|
}
|
|
165
|
-
return
|
|
188
|
+
return /*#__PURE__*/ React.createElement(React.Fragment, {
|
|
189
|
+
key: this.state.retryKey
|
|
190
|
+
}, children);
|
|
166
191
|
}
|
|
167
192
|
}
|
|
168
193
|
], [
|
|
@@ -448,7 +448,7 @@ export { ChartFilter, ChartToolBar, downloadChart } from "./components";
|
|
|
448
448
|
left: 0,
|
|
449
449
|
right: 0,
|
|
450
450
|
bottom: 0,
|
|
451
|
-
zIndex:
|
|
451
|
+
zIndex: 0,
|
|
452
452
|
width: '100%',
|
|
453
453
|
opacity: 0,
|
|
454
454
|
height: '100%',
|
|
@@ -457,6 +457,8 @@ export { ChartFilter, ChartToolBar, downloadChart } from "./components";
|
|
|
457
457
|
}
|
|
458
458
|
}, children), /*#__PURE__*/ React.createElement("div", {
|
|
459
459
|
style: {
|
|
460
|
+
position: 'relative',
|
|
461
|
+
zIndex: 1,
|
|
460
462
|
display: 'flex',
|
|
461
463
|
flexWrap: 'wrap',
|
|
462
464
|
flexDirection: minWidth < 400 ? 'column' : 'row',
|
|
@@ -147,9 +147,6 @@ var genStyle = function genStyle(token) {
|
|
|
147
147
|
'&-empty': {
|
|
148
148
|
textAlign: 'center',
|
|
149
149
|
color: '#6B7280',
|
|
150
|
-
backgroundColor: '#fff',
|
|
151
|
-
borderRadius: '12px',
|
|
152
|
-
border: '1px solid #e1e5e9',
|
|
153
150
|
padding: '0.5rem',
|
|
154
151
|
position: 'relative',
|
|
155
152
|
zIndex: 1,
|
|
@@ -59,7 +59,6 @@ function _unsupported_iterable_to_array(o, minLen) {
|
|
|
59
59
|
import { ChevronUp } from "@sofa-design/icons";
|
|
60
60
|
import { ConfigProvider } from "antd";
|
|
61
61
|
import classNames from "clsx";
|
|
62
|
-
import { AnimatePresence, motion } from "framer-motion";
|
|
63
62
|
import { useMergedState } from "rc-util";
|
|
64
63
|
import React, { memo, useContext, useMemo } from "react";
|
|
65
64
|
import { ActionIconBox } from "../Components/ActionIconBox";
|
|
@@ -67,7 +66,7 @@ import { useRefFunction } from "../Hooks/useRefFunction";
|
|
|
67
66
|
import { I18nContext } from "../I18n";
|
|
68
67
|
import { StatusIcon } from "./components/StatusIcon";
|
|
69
68
|
import { TaskListItem } from "./components/TaskListItem";
|
|
70
|
-
import {
|
|
69
|
+
import { getArrowRotation } from "./constants";
|
|
71
70
|
import { useStyle } from "./style";
|
|
72
71
|
var getDefaultExpandedKeys = function getDefaultExpandedKeys(items, isControlled) {
|
|
73
72
|
return isControlled ? [] : items.map(function(item) {
|
|
@@ -193,18 +192,10 @@ export var TaskList = /*#__PURE__*/ memo(function(param) {
|
|
|
193
192
|
}
|
|
194
193
|
}, /*#__PURE__*/ React.createElement(ChevronUp, {
|
|
195
194
|
"data-testid": "task-list-simple-arrow"
|
|
196
|
-
})))), /*#__PURE__*/ React.createElement(
|
|
197
|
-
initial: false
|
|
198
|
-
}, simpleExpanded && /*#__PURE__*/ React.createElement(motion.div, {
|
|
199
|
-
key: "simple-task-list-content",
|
|
200
|
-
variants: COLLAPSE_VARIANTS,
|
|
201
|
-
initial: "collapsed",
|
|
202
|
-
animate: "expanded",
|
|
203
|
-
exit: "collapsed",
|
|
204
|
-
transition: COLLAPSE_TRANSITION,
|
|
195
|
+
})))), simpleExpanded && /*#__PURE__*/ React.createElement("div", {
|
|
205
196
|
className: classNames("".concat(simpleCls, "-content"), hashId)
|
|
206
197
|
}, /*#__PURE__*/ React.createElement("div", {
|
|
207
198
|
className: classNames("".concat(simpleCls, "-list"), hashId)
|
|
208
|
-
}, renderItems()))))
|
|
199
|
+
}, renderItems()))));
|
|
209
200
|
});
|
|
210
201
|
TaskList.displayName = 'TaskList';
|