@ant-design/agentic-ui 2.30.25 → 2.30.27
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/AIBubble.js +2 -3
- package/dist/Bubble/Bubble.js +3 -2
- package/dist/Bubble/List/index.js +130 -23
- package/dist/Bubble/MessagesContent/index.js +94 -74
- package/dist/Bubble/OpenAIMessageBubble/index.d.ts +6 -6
- package/dist/Bubble/OpenAIMessageBubble/index.js +3 -3
- package/dist/Bubble/OpenAIMessageBubble/mapOllamaMessages.d.ts +1 -1
- package/dist/Bubble/OpenAIMessageBubble/mapOpenClawMessages.d.ts +1 -1
- package/dist/Bubble/OpenAIMessageBubble/normalizeOllamaMessages.d.ts +1 -1
- package/dist/Bubble/OpenAIMessageBubble/normalizeOpenClawMessages.d.ts +1 -1
- package/dist/Bubble/OpenAIMessageBubble/types.d.ts +1 -1
- package/dist/Bubble/OpenAIMessageBubble/useOllamaMessageBubbleData.d.ts +1 -1
- package/dist/Bubble/OpenAIMessageBubble/useOpenClawMessageBubbleData.d.ts +1 -1
- package/dist/Bubble/bubblePropsAreEqual.d.ts +23 -0
- package/dist/Bubble/bubblePropsAreEqual.js +272 -0
- package/dist/Components/TypingAnimation/index.d.ts +4 -1
- package/dist/Components/TypingAnimation/index.js +5 -3
- package/dist/MarkdownEditor/BaseMarkdownEditor.js +20 -6
- package/dist/MarkdownEditor/editor/elements/FootnoteDefinition/index.js +1 -2
- package/dist/MarkdownEditor/editor/elements/FootnoteReference/index.js +1 -2
- package/dist/MarkdownEditor/editor/elements/Head/index.js +1 -2
- package/dist/MarkdownEditor/editor/elements/LinkCard/index.js +1 -2
- package/dist/MarkdownEditor/editor/elements/Paragraph/ReadonlyParagraph.d.ts +2 -2
- package/dist/MarkdownEditor/editor/elements/Paragraph/ReadonlyParagraph.js +3 -6
- package/dist/MarkdownEditor/editor/elements/Paragraph/index.js +1 -10
- package/dist/MarkdownEditor/editor/elements/Table/EditableTable.js +1 -1
- package/dist/MarkdownEditor/editor/elements/index.js +1 -1
- package/dist/MarkdownEditor/editor/parser/parserMarkdownToSlateNode.js +1 -1
- package/dist/MarkdownEditor/editor/plugins/withMarkdown.js +1 -1
- package/dist/MarkdownEditor/editor/plugins/withSanitizeInvalidChildren.js +80 -38
- package/dist/MarkdownEditor/editor/store.js +1 -0
- package/dist/MarkdownEditor/editor/tools/InsertAutocomplete.js +1 -0
- package/dist/MarkdownEditor/editor/utils/editorUtils.d.ts +6 -0
- package/dist/MarkdownEditor/editor/utils/editorUtils.js +28 -1
- package/dist/MarkdownEditor/style.js +0 -6
- package/dist/MarkdownInputField/hooks/useMarkdownInputFieldRefs.js +0 -3
- package/dist/MarkdownRenderer/MarkdownRenderer.js +2 -2
- package/dist/MarkdownRenderer/index.d.ts +2 -2
- package/dist/MarkdownRenderer/index.js +1 -1
- package/dist/MarkdownRenderer/streaming/MarkdownBlockPiece.d.ts +1 -1
- package/dist/MarkdownRenderer/streaming/MarkdownBlockPiece.js +15 -3
- package/dist/MarkdownRenderer/streaming/useStreamingMarkdownReact.d.ts +2 -1
- package/dist/MarkdownRenderer/streaming/useStreamingMarkdownReact.js +4 -4
- package/dist/Plugins/chart/BarChart/index.js +1 -1
- package/dist/Plugins/chart/ChartAttrToolBar/index.js +1 -1
- package/dist/Plugins/chart/index.d.ts +1 -1
- package/dist/Plugins/code/utils/index.d.ts +1 -1
- package/dist/Plugins/mermaid/MermaidRendererImpl.js +53 -419
- package/dist/Plugins/mermaid/index.js +1 -2
- package/dist/Plugins/mermaid/style.js +57 -59
- package/dist/Plugins/mermaid/utils.js +67 -8
- package/dist/Schema/SchemaForm/index.js +1 -1
- package/dist/Workspace/File/FileComponent.js +1 -1
- package/dist/Workspace/File/PreviewComponent.js +16 -2
- package/dist/Workspace/File/index.d.ts +1 -1
- package/dist/Workspace/File/index.js +2 -1
- package/package.json +1 -1
|
@@ -136,12 +136,23 @@ function _unsupported_iterable_to_array(o, minLen) {
|
|
|
136
136
|
if (n === "Map" || n === "Set") return Array.from(n);
|
|
137
137
|
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
|
|
138
138
|
}
|
|
139
|
-
import { Editor, Node, Transforms } from "slate";
|
|
139
|
+
import { Editor, Element, Node, Text, Transforms } from "slate";
|
|
140
140
|
import { HistoryEditor } from "slate-history";
|
|
141
141
|
import { EditorUtils } from "../utils/editorUtils";
|
|
142
142
|
var isValidChild = function isValidChild(child) {
|
|
143
143
|
return child !== undefined && child !== null && Node.isNode(child);
|
|
144
144
|
};
|
|
145
|
+
/**
|
|
146
|
+
* `Array.prototype.some` skips sparse holes; Slate still sees missing indices and
|
|
147
|
+
* can pass `undefined` as `leaf` into `renderLeaf`, which then throws in `Text.isText`.
|
|
148
|
+
*/ var childArrayHasInvalidEntries = function childArrayHasInvalidEntries(rawChildren) {
|
|
149
|
+
for(var i = 0; i < rawChildren.length; i += 1){
|
|
150
|
+
if (!(i in rawChildren) || !isValidChild(rawChildren[i])) {
|
|
151
|
+
return true;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return false;
|
|
155
|
+
};
|
|
145
156
|
var getChildList = function getChildList(node) {
|
|
146
157
|
if (!('children' in node)) {
|
|
147
158
|
return [];
|
|
@@ -186,12 +197,29 @@ var runWithoutHistory = function runWithoutHistory(editor, fn) {
|
|
|
186
197
|
* Slate 的 `Node.nodes` / `Editor.normalize` 在遍历时假定非文本节点必有数组型 `children`。
|
|
187
198
|
* 若仅有 `type` 而缺少 `children`,会在进入自定义 `normalizeNode` 之前就抛错,必须先修树。
|
|
188
199
|
*/ var rebuildOrDefaultBlock = function rebuildOrDefaultBlock(raw) {
|
|
189
|
-
if (raw && (typeof raw === "undefined" ? "undefined" : _type_of(raw)) === 'object' &&
|
|
190
|
-
!(Node === null || Node === void 0 ? void 0 : Node.isText(raw)) && typeof raw.type === 'string') {
|
|
200
|
+
if (raw && (typeof raw === "undefined" ? "undefined" : _type_of(raw)) === 'object' && !Text.isText(raw) && typeof raw.type === 'string') {
|
|
191
201
|
return rebuildElement(raw);
|
|
192
202
|
}
|
|
193
203
|
return createDefaultBlock();
|
|
194
204
|
};
|
|
205
|
+
/** 压缩根级子节点:去掉空洞与 null/undefined;残缺元素对象则 rebuild,不凭空多插空段落。 */ var compactEditorRootChildren = function compactEditorRootChildren(raw) {
|
|
206
|
+
var out = [];
|
|
207
|
+
for(var i = 0; i < raw.length; i += 1){
|
|
208
|
+
if (!(i in raw)) {
|
|
209
|
+
continue;
|
|
210
|
+
}
|
|
211
|
+
var c = raw[i];
|
|
212
|
+
if (isValidChild(c)) {
|
|
213
|
+
out.push(c);
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
216
|
+
if (c === undefined || c === null) {
|
|
217
|
+
continue;
|
|
218
|
+
}
|
|
219
|
+
out.push(rebuildOrDefaultBlock(c));
|
|
220
|
+
}
|
|
221
|
+
return out;
|
|
222
|
+
};
|
|
195
223
|
var repairBrokenChildArrays = function repairBrokenChildArrays(editor) {
|
|
196
224
|
if (!Array.isArray(editor.children)) {
|
|
197
225
|
/* eslint-disable no-param-reassign */ editor.children = [
|
|
@@ -205,20 +233,26 @@ var repairBrokenChildArrays = function repairBrokenChildArrays(editor) {
|
|
|
205
233
|
]);
|
|
206
234
|
return true;
|
|
207
235
|
}
|
|
208
|
-
|
|
209
|
-
var
|
|
210
|
-
if (
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
236
|
+
if (childArrayHasInvalidEntries(editor.children)) {
|
|
237
|
+
var fixedRoot = compactEditorRootChildren(editor.children);
|
|
238
|
+
if (fixedRoot.length === 0) {
|
|
239
|
+
EditorUtils.replaceEditorContent(editor, [
|
|
240
|
+
createDefaultBlock()
|
|
241
|
+
]);
|
|
242
|
+
} else {
|
|
243
|
+
/* eslint-disable no-param-reassign */ editor.children = fixedRoot;
|
|
244
|
+
/* eslint-enable no-param-reassign */ }
|
|
245
|
+
return true;
|
|
214
246
|
}
|
|
215
247
|
var fixBranch = function fixBranch1(node) {
|
|
216
|
-
var _Node_isText;
|
|
217
248
|
if (!node || (typeof node === "undefined" ? "undefined" : _type_of(node)) !== 'object') {
|
|
218
249
|
return false;
|
|
219
250
|
}
|
|
220
|
-
|
|
221
|
-
|
|
251
|
+
if (Text.isText(node)) {
|
|
252
|
+
if ('children' in node) {
|
|
253
|
+
delete node.children;
|
|
254
|
+
return true;
|
|
255
|
+
}
|
|
222
256
|
return false;
|
|
223
257
|
}
|
|
224
258
|
var rawChildren = node.children;
|
|
@@ -226,9 +260,7 @@ var repairBrokenChildArrays = function repairBrokenChildArrays(editor) {
|
|
|
226
260
|
Object.assign(node, rebuildElement(node));
|
|
227
261
|
return true;
|
|
228
262
|
}
|
|
229
|
-
if (rawChildren
|
|
230
|
-
return !isValidChild(c);
|
|
231
|
-
})) {
|
|
263
|
+
if (childArrayHasInvalidEntries(rawChildren)) {
|
|
232
264
|
var fixedChildren = rawChildren.filter(isValidChild);
|
|
233
265
|
node.children = fixedChildren.length === 0 ? [
|
|
234
266
|
{
|
|
@@ -244,8 +276,8 @@ var repairBrokenChildArrays = function repairBrokenChildArrays(editor) {
|
|
|
244
276
|
}
|
|
245
277
|
return false;
|
|
246
278
|
};
|
|
247
|
-
for(var
|
|
248
|
-
if (fixBranch(editor.children[
|
|
279
|
+
for(var i = 0; i < editor.children.length; i++){
|
|
280
|
+
if (fixBranch(editor.children[i])) {
|
|
249
281
|
return true;
|
|
250
282
|
}
|
|
251
283
|
}
|
|
@@ -258,41 +290,54 @@ var repairBrokenChildArrays = function repairBrokenChildArrays(editor) {
|
|
|
258
290
|
*/ export var withSanitizeInvalidChildren = function withSanitizeInvalidChildren(editor) {
|
|
259
291
|
var normalizeNode = editor.normalizeNode, normalize = editor.normalize;
|
|
260
292
|
editor.normalize = function(options) {
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
293
|
+
// 与 Slate 默认 `normalize` 一致:在 `withoutNormalizing` 嵌套批次末尾仍会调用
|
|
294
|
+
// `Editor.normalize`,此时 `isNormalizing` 为 false,文档可能短暂为空(合法中间态)。
|
|
295
|
+
// 若在此处 `repairBrokenChildArrays` 强行插入默认块,会与后续 `insertNodes` 叠成双段落。
|
|
296
|
+
if (Editor.isNormalizing(editor)) {
|
|
297
|
+
var guard = 0;
|
|
298
|
+
while(guard < 100 && repairBrokenChildArrays(editor)){
|
|
299
|
+
guard += 1;
|
|
300
|
+
}
|
|
264
301
|
}
|
|
265
302
|
return normalize.call(editor, options);
|
|
266
303
|
};
|
|
267
304
|
editor.normalizeNode = function(entry) {
|
|
268
|
-
var _Node_isText;
|
|
269
305
|
var _entry = _sliced_to_array(entry, 2), node = _entry[0], path = _entry[1];
|
|
270
|
-
//
|
|
271
|
-
|
|
272
|
-
|
|
306
|
+
// Text leaves have no `children`; also strip invalid `children` on text (Slate may treat as element).
|
|
307
|
+
if (Text.isText(node)) {
|
|
308
|
+
if ('children' in node) {
|
|
309
|
+
delete node.children;
|
|
310
|
+
}
|
|
273
311
|
normalizeNode(entry);
|
|
274
312
|
return;
|
|
275
313
|
}
|
|
276
314
|
if (Editor.isEditor(node) && path.length === 0) {
|
|
277
315
|
var childList = getChildList(node);
|
|
278
|
-
var hasInvalid = childList
|
|
279
|
-
return !isValidChild(c);
|
|
280
|
-
});
|
|
316
|
+
var hasInvalid = childArrayHasInvalidEntries(childList);
|
|
281
317
|
if (hasInvalid || childList.length === 0) {
|
|
282
|
-
var
|
|
318
|
+
var fixedTop = compactEditorRootChildren(childList);
|
|
319
|
+
var nextNodes = fixedTop.length === 0 ? [
|
|
283
320
|
createDefaultBlock()
|
|
284
|
-
] :
|
|
285
|
-
return isValidChild(c) ? c : rebuildOrDefaultBlock(c);
|
|
286
|
-
});
|
|
321
|
+
] : fixedTop;
|
|
287
322
|
EditorUtils.replaceEditorContent(editor, nextNodes);
|
|
288
323
|
normalizeNode(entry);
|
|
289
324
|
return;
|
|
290
325
|
}
|
|
326
|
+
// 清空后 Slate 规范化可能再插一个空段,根上出现多个仅空文本的 paragraph;
|
|
327
|
+
// 与 replaceEditorContent 已插入的一块叠成双 DOM(见 debug H6)。
|
|
328
|
+
var validTop = childList.filter(isValidChild);
|
|
329
|
+
if (validTop.length > 1) {
|
|
330
|
+
var collapsed = EditorUtils.coalesceRootAllEmptyParagraphs(validTop);
|
|
331
|
+
if (collapsed.length < validTop.length) {
|
|
332
|
+
EditorUtils.replaceEditorContent(editor, collapsed);
|
|
333
|
+
normalizeNode(entry);
|
|
334
|
+
return;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
291
337
|
normalizeNode(entry);
|
|
292
338
|
return;
|
|
293
339
|
}
|
|
294
|
-
|
|
295
|
-
if (!Editor.isEditor(node) && !Node.isText(node)) {
|
|
340
|
+
if (!Editor.isEditor(node) && !Text.isText(node)) {
|
|
296
341
|
var rawChildren = node.children;
|
|
297
342
|
if (!Array.isArray(rawChildren)) {
|
|
298
343
|
Object.assign(node, rebuildElement(node));
|
|
@@ -300,12 +345,9 @@ var repairBrokenChildArrays = function repairBrokenChildArrays(editor) {
|
|
|
300
345
|
return;
|
|
301
346
|
}
|
|
302
347
|
}
|
|
303
|
-
|
|
304
|
-
if (Node.isElement(node)) {
|
|
348
|
+
if (Element.isElement(node)) {
|
|
305
349
|
var childList1 = getChildList(node);
|
|
306
|
-
var hasInvalid1 = childList1
|
|
307
|
-
return !isValidChild(c);
|
|
308
|
-
});
|
|
350
|
+
var hasInvalid1 = childArrayHasInvalidEntries(childList1);
|
|
309
351
|
if (hasInvalid1) {
|
|
310
352
|
var applyRebuild = function applyRebuild() {
|
|
311
353
|
Editor.withoutNormalizing(editor, function() {
|
|
@@ -994,6 +994,7 @@ export var InsertAutocomplete = function InsertAutocomplete(props) {
|
|
|
994
994
|
e.preventDefault();
|
|
995
995
|
}
|
|
996
996
|
}, !state.insertLink && !state.insertAttachment && /*#__PURE__*/ React.createElement(React.Fragment, null, /*#__PURE__*/ React.createElement(Menu, {
|
|
997
|
+
_internalDisableMenuItemTitleTooltip: true,
|
|
997
998
|
items: (_props_optionsRender = props.optionsRender) === null || _props_optionsRender === void 0 ? void 0 : _props_optionsRender.call(props, state.filterOptions.map(function(l) {
|
|
998
999
|
var _l_label, _l_children_, _l_children, _l_children1;
|
|
999
1000
|
return {
|
|
@@ -11,6 +11,12 @@ export declare class EditorUtils {
|
|
|
11
11
|
readonly text: "";
|
|
12
12
|
}];
|
|
13
13
|
};
|
|
14
|
+
/**
|
|
15
|
+
* 当根节点全部为「仅空白」的段落时,合并为单个空段。
|
|
16
|
+
* 避免解析 `\\n\\n` 或外部 schema 产生多个空段,导致 Slate/占位与双 DOM。
|
|
17
|
+
* 仅一个根块时原样返回,以保留单空段上的 align 等段落级字段。
|
|
18
|
+
*/
|
|
19
|
+
static coalesceRootAllEmptyParagraphs(nodes: Node[]): Node[];
|
|
14
20
|
/**
|
|
15
21
|
* 通过 Slate Transforms API 安全替换编辑器全部内容。
|
|
16
22
|
* 避免直接赋值 editor.children,确保 Operation/History/Normalizer 管线正常运行。
|
|
@@ -157,6 +157,32 @@ export var EditorUtils = /*#__PURE__*/ function() {
|
|
|
157
157
|
};
|
|
158
158
|
}
|
|
159
159
|
},
|
|
160
|
+
{
|
|
161
|
+
key: "coalesceRootAllEmptyParagraphs",
|
|
162
|
+
value: /**
|
|
163
|
+
* 当根节点全部为「仅空白」的段落时,合并为单个空段。
|
|
164
|
+
* 避免解析 `\\n\\n` 或外部 schema 产生多个空段,导致 Slate/占位与双 DOM。
|
|
165
|
+
* 仅一个根块时原样返回,以保留单空段上的 align 等段落级字段。
|
|
166
|
+
*/ function coalesceRootAllEmptyParagraphs(nodes) {
|
|
167
|
+
if (!(nodes === null || nodes === void 0 ? void 0 : nodes.length)) {
|
|
168
|
+
return [
|
|
169
|
+
JSON.parse(JSON.stringify(EditorUtils.p))
|
|
170
|
+
];
|
|
171
|
+
}
|
|
172
|
+
if (nodes.length === 1) {
|
|
173
|
+
return nodes;
|
|
174
|
+
}
|
|
175
|
+
var onlyEmptyParagraphs = nodes.every(function(n) {
|
|
176
|
+
return Element.isElement(n) && n.type === 'paragraph' && Node.string(n).trim() === '';
|
|
177
|
+
});
|
|
178
|
+
if (onlyEmptyParagraphs) {
|
|
179
|
+
return [
|
|
180
|
+
JSON.parse(JSON.stringify(EditorUtils.p))
|
|
181
|
+
];
|
|
182
|
+
}
|
|
183
|
+
return nodes;
|
|
184
|
+
}
|
|
185
|
+
},
|
|
160
186
|
{
|
|
161
187
|
key: "replaceEditorContent",
|
|
162
188
|
value: /**
|
|
@@ -169,6 +195,7 @@ export var EditorUtils = /*#__PURE__*/ function() {
|
|
|
169
195
|
*/ function replaceEditorContent(editor, nodes, options) {
|
|
170
196
|
var _ref = options || {}, _ref_withoutHistory = _ref.withoutHistory, withoutHistory = _ref_withoutHistory === void 0 ? true : _ref_withoutHistory;
|
|
171
197
|
var doReplace = function doReplace() {
|
|
198
|
+
var normalized = EditorUtils.coalesceRootAllEmptyParagraphs(nodes);
|
|
172
199
|
Editor.withoutNormalizing(editor, function() {
|
|
173
200
|
if (editor.selection) {
|
|
174
201
|
Transforms.deselect(editor);
|
|
@@ -181,7 +208,7 @@ export var EditorUtils = /*#__PURE__*/ function() {
|
|
|
181
208
|
]
|
|
182
209
|
});
|
|
183
210
|
}
|
|
184
|
-
Transforms.insertNodes(editor,
|
|
211
|
+
Transforms.insertNodes(editor, normalized, {
|
|
185
212
|
at: [
|
|
186
213
|
0
|
|
187
214
|
]
|
|
@@ -580,12 +580,6 @@ var genStyle = function genStyle(token) {
|
|
|
580
580
|
fill: '#fff'
|
|
581
581
|
}
|
|
582
582
|
},
|
|
583
|
-
// 强制设置所有文字样式
|
|
584
|
-
'& text': {
|
|
585
|
-
// 确保文字不会被裁剪
|
|
586
|
-
dominantBaseline: 'middle',
|
|
587
|
-
textAnchor: 'middle'
|
|
588
|
-
},
|
|
589
583
|
// 节点标签 - 更大的字体
|
|
590
584
|
'& .nodeLabel': {
|
|
591
585
|
fontWeight: 500,
|
|
@@ -94,9 +94,6 @@ import { ReactEditor } from "slate-react";
|
|
|
94
94
|
// ReactEditor.isFocused can throw if the editor is being torn down
|
|
95
95
|
}
|
|
96
96
|
}
|
|
97
|
-
if (props.value === undefined || props.value === '') {
|
|
98
|
-
return;
|
|
99
|
-
}
|
|
100
97
|
(_markdownEditorRef_current1 = markdownEditorRef.current) === null || _markdownEditorRef_current1 === void 0 ? void 0 : (_markdownEditorRef_current_store = _markdownEditorRef_current1.store) === null || _markdownEditorRef_current_store === void 0 ? void 0 : _markdownEditorRef_current_store.setMDContent((_props_value = props.value) !== null && _props_value !== void 0 ? _props_value : '');
|
|
101
98
|
}, [
|
|
102
99
|
props.value
|
|
@@ -138,15 +138,15 @@ import React, { forwardRef, useContext, useEffect, useImperativeHandle, useMemo,
|
|
|
138
138
|
import { useStyle as useContentStyle } from "../MarkdownEditor/editor/style";
|
|
139
139
|
import { useStyle as useEditorStyle } from "../MarkdownEditor/style";
|
|
140
140
|
import { CharacterQueue } from "./CharacterQueue";
|
|
141
|
+
import { extractFootnoteDefinitionsFromMarkdown } from "./extractFootnoteDefinitions";
|
|
142
|
+
import { AgenticUiFileMapBlockRenderer } from "./renderers/AgenticUiFileMapBlockRenderer";
|
|
141
143
|
import { AgenticUiTaskBlockRenderer } from "./renderers/AgenticUiTaskBlockRenderer";
|
|
142
144
|
import { AgenticUiToolUseBarBlockRenderer } from "./renderers/AgenticUiToolUseBarBlockRenderer";
|
|
143
|
-
import { AgenticUiFileMapBlockRenderer } from "./renderers/AgenticUiFileMapBlockRenderer";
|
|
144
145
|
import { ChartBlockRenderer } from "./renderers/ChartRenderer";
|
|
145
146
|
import { CodeBlockRenderer } from "./renderers/CodeRenderer";
|
|
146
147
|
import { MermaidBlockRenderer } from "./renderers/MermaidRenderer";
|
|
147
148
|
import { SchemaBlockRenderer } from "./renderers/SchemaRenderer";
|
|
148
149
|
import { useRendererVarStyle } from "./style";
|
|
149
|
-
import { extractFootnoteDefinitionsFromMarkdown } from "./extractFootnoteDefinitions";
|
|
150
150
|
import { useMarkdownToReact } from "./useMarkdownToReact";
|
|
151
151
|
import { useStreaming } from "./useStreaming";
|
|
152
152
|
var SCHEMA_LANGUAGES = new Set([
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { default as AnimationText } from './AnimationText';
|
|
2
2
|
export type { AnimationConfig, AnimationTextProps } from './AnimationText';
|
|
3
3
|
export { CharacterQueue } from './CharacterQueue';
|
|
4
|
+
export type { UseMarkdownToReactOptions } from './markdownReactShared';
|
|
4
5
|
export { default as MarkdownRenderer } from './MarkdownRenderer';
|
|
5
6
|
export { AgenticUiFileMapBlockRenderer } from './renderers/AgenticUiFileMapBlockRenderer';
|
|
6
7
|
export { AgenticUiTaskBlockRenderer } from './renderers/AgenticUiTaskBlockRenderer';
|
|
@@ -9,8 +10,7 @@ export { ChartBlockRenderer } from './renderers/ChartRenderer';
|
|
|
9
10
|
export { CodeBlockRenderer } from './renderers/CodeRenderer';
|
|
10
11
|
export { MermaidBlockRenderer } from './renderers/MermaidRenderer';
|
|
11
12
|
export { SchemaBlockRenderer } from './renderers/SchemaRenderer';
|
|
13
|
+
export { useStreamingMarkdownReact } from './streaming/useStreamingMarkdownReact';
|
|
12
14
|
export type { CharacterQueueOptions, FileMapConfig, MarkdownRendererEleProps, MarkdownRendererProps, MarkdownRendererRef, RenderMode, RendererBlockProps, } from './types';
|
|
13
|
-
export type { UseMarkdownToReactOptions } from './markdownReactShared';
|
|
14
15
|
export { markdownToReactSync, useMarkdownToReact } from './useMarkdownToReact';
|
|
15
|
-
export { useStreamingMarkdownReact } from './streaming/useStreamingMarkdownReact';
|
|
16
16
|
export { useStreaming } from './useStreaming';
|
|
@@ -8,6 +8,6 @@ export { ChartBlockRenderer } from "./renderers/ChartRenderer";
|
|
|
8
8
|
export { CodeBlockRenderer } from "./renderers/CodeRenderer";
|
|
9
9
|
export { MermaidBlockRenderer } from "./renderers/MermaidRenderer";
|
|
10
10
|
export { SchemaBlockRenderer } from "./renderers/SchemaRenderer";
|
|
11
|
-
export { markdownToReactSync, useMarkdownToReact } from "./useMarkdownToReact";
|
|
12
11
|
export { useStreamingMarkdownReact } from "./streaming/useStreamingMarkdownReact";
|
|
12
|
+
export { markdownToReactSync, useMarkdownToReact } from "./useMarkdownToReact";
|
|
13
13
|
export { useStreaming } from "./useStreaming";
|
|
@@ -9,11 +9,24 @@ import { shouldReparseLastBlock } from "./lastBlockThrottle";
|
|
|
9
9
|
var variant = param.variant, blockSource = param.blockSource, processor = param.processor, components = param.components, streaming = param.streaming;
|
|
10
10
|
var lastParsedRef = useRef(null);
|
|
11
11
|
var cacheRef = useRef(new Map());
|
|
12
|
+
var processorRef = useRef(null);
|
|
13
|
+
/**
|
|
14
|
+
* 宿主常把 `components: { __codeBlock: X }` 内联在每次 render,引用恒变。
|
|
15
|
+
* 若列入 useMemo 依赖,末块晋升为 sealed 时会误触发重 parse,子树卸载重挂。
|
|
16
|
+
* 密封命中缓存时故意不随 components 引用抖动;需重算时由 variant / blockSource / processor 驱动。
|
|
17
|
+
*/ var componentsRef = useRef(components);
|
|
18
|
+
componentsRef.current = components;
|
|
12
19
|
var node = useMemo(function() {
|
|
20
|
+
if (processorRef.current !== processor) {
|
|
21
|
+
processorRef.current = processor;
|
|
22
|
+
cacheRef.current.clear();
|
|
23
|
+
lastParsedRef.current = null;
|
|
24
|
+
}
|
|
25
|
+
var comps = componentsRef.current;
|
|
13
26
|
var cached = cacheRef.current.get(blockSource);
|
|
14
27
|
if (cached && variant === 'sealed') return cached;
|
|
15
28
|
if (variant === 'sealed' || !streaming) {
|
|
16
|
-
var el = renderMarkdownBlock(blockSource, processor,
|
|
29
|
+
var el = renderMarkdownBlock(blockSource, processor, comps);
|
|
17
30
|
cacheRef.current.set(blockSource, el);
|
|
18
31
|
if (variant === 'tail') lastParsedRef.current = {
|
|
19
32
|
source: blockSource,
|
|
@@ -25,7 +38,7 @@ import { shouldReparseLastBlock } from "./lastBlockThrottle";
|
|
|
25
38
|
if (prev && !shouldReparseLastBlock(prev.source, blockSource, true)) {
|
|
26
39
|
return prev.node;
|
|
27
40
|
}
|
|
28
|
-
var el1 = renderMarkdownBlock(blockSource, processor,
|
|
41
|
+
var el1 = renderMarkdownBlock(blockSource, processor, comps);
|
|
29
42
|
cacheRef.current.set(blockSource, el1);
|
|
30
43
|
lastParsedRef.current = {
|
|
31
44
|
source: blockSource,
|
|
@@ -36,7 +49,6 @@ import { shouldReparseLastBlock } from "./lastBlockThrottle";
|
|
|
36
49
|
variant,
|
|
37
50
|
blockSource,
|
|
38
51
|
processor,
|
|
39
|
-
components,
|
|
40
52
|
streaming
|
|
41
53
|
]);
|
|
42
54
|
var animateBlock = variant === 'tail' && streaming;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { type UseMarkdownToReactOptions } from '../markdownReactShared';
|
|
3
3
|
/**
|
|
4
|
-
* 流式优先的 Markdown → React:每块独立
|
|
4
|
+
* 流式优先的 Markdown → React:每块独立 MarkdownBlockPiece,末块 tail、其余 sealed。
|
|
5
|
+
* 块 key 仅用修订代 + 下标,使「末块晋升为 sealed」时外层组件类型不变,避免子树卸载重挂。
|
|
5
6
|
*/
|
|
6
7
|
export declare const useStreamingMarkdownReact: (content: string, options?: UseMarkdownToReactOptions) => React.ReactNode;
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import { JINJA_DOLLAR_PLACEHOLDER, preprocessNormalizeLeafToContainerDirective } from "../../MarkdownEditor/editor/parser/constants";
|
|
2
1
|
import React, { useMemo, useRef } from "react";
|
|
3
2
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { JINJA_DOLLAR_PLACEHOLDER, preprocessNormalizeLeafToContainerDirective } from "../../MarkdownEditor/editor/parser/constants";
|
|
4
4
|
import { buildEditorAlignedComponents, createHastProcessor, splitMarkdownBlocks } from "../markdownReactShared";
|
|
5
5
|
import { MarkdownBlockPiece } from "./MarkdownBlockPiece";
|
|
6
6
|
import { shouldResetRevisionProgress } from "./revisionPolicy";
|
|
7
7
|
/**
|
|
8
|
-
* 流式优先的 Markdown → React:每块独立
|
|
8
|
+
* 流式优先的 Markdown → React:每块独立 MarkdownBlockPiece,末块 tail、其余 sealed。
|
|
9
|
+
* 块 key 仅用修订代 + 下标,使「末块晋升为 sealed」时外层组件类型不变,避免子树卸载重挂。
|
|
9
10
|
*/ export var useStreamingMarkdownReact = function useStreamingMarkdownReact(content, options) {
|
|
10
11
|
var revisionSource = (options === null || options === void 0 ? void 0 : options.contentRevisionSource) !== undefined ? options.contentRevisionSource : content;
|
|
11
12
|
var prevRevisionRef = useRef(undefined);
|
|
@@ -45,14 +46,13 @@ import { shouldResetRevisionProgress } from "./revisionPolicy";
|
|
|
45
46
|
var gen = revisionGenerationRef.current;
|
|
46
47
|
var elements = blocks.map(function(blockSource, index) {
|
|
47
48
|
var isLast = index === blocks.length - 1;
|
|
48
|
-
// 仅用修订代 + 块下标作 key,避免末块随文本增长导致 identity 变化而整段 remount
|
|
49
49
|
var key = "b-".concat(gen, "-").concat(index);
|
|
50
50
|
return jsx(MarkdownBlockPiece, {
|
|
51
51
|
variant: isLast ? 'tail' : 'sealed',
|
|
52
52
|
blockSource: blockSource,
|
|
53
53
|
processor: processor,
|
|
54
54
|
components: components,
|
|
55
|
-
streaming: !!(
|
|
55
|
+
streaming: !!(options === null || options === void 0 ? void 0 : options.streaming)
|
|
56
56
|
}, key);
|
|
57
57
|
});
|
|
58
58
|
return jsxs(Fragment, {
|
|
@@ -120,8 +120,8 @@ import React, { useContext, useEffect, useMemo, useRef, useState } from "react";
|
|
|
120
120
|
import { Bar } from "react-chartjs-2";
|
|
121
121
|
import { ChartContainer, ChartFilter, ChartStatistic, ChartToolBar, downloadChart } from "../components";
|
|
122
122
|
import { defaultColorList } from "../const";
|
|
123
|
-
import { extractAndSortXValues, findDataPointByXValue, hexToRgba, resolveCssVariable, toNumber } from "../utils";
|
|
124
123
|
import { useChartTheme } from "../hooks";
|
|
124
|
+
import { extractAndSortXValues, findDataPointByXValue, hexToRgba, resolveCssVariable, toNumber } from "../utils";
|
|
125
125
|
import { useStyle } from "./style";
|
|
126
126
|
/**
|
|
127
127
|
* @fileoverview 柱状图组件文件
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { DeleteOutlined } from "@ant-design/icons";
|
|
2
2
|
import { ConfigProvider, Tooltip } from "antd";
|
|
3
|
-
import React, { useContext, useRef } from "react";
|
|
4
3
|
import clsx from "clsx";
|
|
4
|
+
import React, { useContext, useRef } from "react";
|
|
5
5
|
import { Transforms } from "slate";
|
|
6
6
|
import { ReactEditor } from "slate-react";
|
|
7
7
|
import { I18nContext } from "../../../I18n";
|
|
@@ -29,7 +29,7 @@ export { default as RadarChart } from './RadarChart';
|
|
|
29
29
|
export { default as ScatterChart } from './ScatterChart';
|
|
30
30
|
export type { AreaChartConfigItem, AreaChartDataItem, AreaChartProps, } from './AreaChart';
|
|
31
31
|
export type { BarChartConfigItem, BarChartDataItem, BarChartProps, } from './BarChart';
|
|
32
|
-
export type { BoxPlotChartDataItem, BoxPlotChartProps
|
|
32
|
+
export type { BoxPlotChartDataItem, BoxPlotChartProps } from './BoxPlotChart';
|
|
33
33
|
export type { ChartStatisticClassNames, ChartStatisticProps, ChartStatisticStyles, } from './ChartStatistic';
|
|
34
34
|
export type { DonutChartConfig, DonutChartData, DonutChartProps, } from './DonutChart';
|
|
35
35
|
export type { FunnelChartDataItem, FunnelChartProps } from './FunnelChart';
|