@ant-design/agentic-ui 2.21.0 → 2.23.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/Bubble/BubbleBeforeNode.js +9 -9
- package/dist/MarkdownEditor/editor/Editor.js +14 -3
- package/dist/MarkdownEditor/editor/elements/TagPopup/index.js +4 -4
- package/dist/MarkdownEditor/editor/elements/TagPopup/style.js +14 -12
- 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 +2 -1
- package/dist/MarkdownEditor/editor/parser/parse/parseCode.js +15 -8
- 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 +781 -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.js +36 -3
- 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 -40
- package/dist/MarkdownEditor/editor/parser/parserMarkdownToSlateNode.js +189 -1856
- package/dist/MarkdownEditor/editor/parser/parserSlateNodeToMarkdown.js +131 -18
- package/dist/MarkdownEditor/editor/parser/remarkParse.js +24 -17
- package/dist/MarkdownEditor/editor/plugins/elements.js +1 -1
- package/dist/Plugins/code/components/CodeToolbar.js +3 -16
- package/package.json +1 -1
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 处理内联代码节点
|
|
3
|
+
* @param currentElement - 当前处理的内联代码元素
|
|
4
|
+
* @returns 返回格式化的内联代码节点对象,支持占位符和初始值
|
|
5
|
+
*/ export var handleInlineCode = function(currentElement) {
|
|
6
|
+
var _currentElement_value, _currentElement_value1;
|
|
7
|
+
var hasPlaceHolder = (_currentElement_value = currentElement.value) === null || _currentElement_value === void 0 ? void 0 : _currentElement_value.match(/\$\{(.*?)\}/);
|
|
8
|
+
var values = undefined;
|
|
9
|
+
if (hasPlaceHolder) {
|
|
10
|
+
// 使用逗号分割多个键值对,例如:placeholder:目标场景,initialValue:已选择
|
|
11
|
+
var content = hasPlaceHolder[1];
|
|
12
|
+
values = {};
|
|
13
|
+
// 匹配 key:value 格式,支持逗号分隔
|
|
14
|
+
var keyValuePattern = /(\w+):([^,]+)/g;
|
|
15
|
+
var match;
|
|
16
|
+
while((match = keyValuePattern.exec(content)) !== null){
|
|
17
|
+
var key = match[1];
|
|
18
|
+
var value = match[2];
|
|
19
|
+
if (key && value !== undefined && value !== null) {
|
|
20
|
+
values[key] = value;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
var isTag = (_currentElement_value1 = currentElement.value) === null || _currentElement_value1 === void 0 ? void 0 : _currentElement_value1.startsWith('${');
|
|
25
|
+
var result = {
|
|
26
|
+
code: true,
|
|
27
|
+
tag: isTag ? true : false
|
|
28
|
+
};
|
|
29
|
+
// 优先使用 initialValue,其次使用 placeholder,最后使用原始值
|
|
30
|
+
if (values === null || values === void 0 ? void 0 : values.initialValue) {
|
|
31
|
+
result.text = values.initialValue || ' ';
|
|
32
|
+
}
|
|
33
|
+
if (!result.text && (values === null || values === void 0 ? void 0 : values.placeholder)) {
|
|
34
|
+
// 当有 placeholder 时,text 设置为空格,避免空字符串导致 tag 被移除
|
|
35
|
+
result.text = ' ';
|
|
36
|
+
}
|
|
37
|
+
if (!result.text) {
|
|
38
|
+
// 只有当不是 ${ 开头的占位符时,才使用原始值
|
|
39
|
+
if (!isTag) {
|
|
40
|
+
result.text = currentElement.value;
|
|
41
|
+
} else {
|
|
42
|
+
// 如果是 ${ 开头但没有匹配到值,使用空格避免空字符串
|
|
43
|
+
result.text = ' ';
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// 设置 placeholder 和 initialValue
|
|
47
|
+
// 如果是 tag 且值存在,设置实际值;否则设置为 undefined(符合测试期望)
|
|
48
|
+
if (isTag) {
|
|
49
|
+
result.placeholder = values === null || values === void 0 ? void 0 : values.placeholder;
|
|
50
|
+
result.initialValue = values === null || values === void 0 ? void 0 : values.initialValue;
|
|
51
|
+
} else {
|
|
52
|
+
result.placeholder = undefined;
|
|
53
|
+
result.initialValue = undefined;
|
|
54
|
+
}
|
|
55
|
+
return result;
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* 处理分割线节点
|
|
59
|
+
* @returns 返回格式化的分割线节点对象
|
|
60
|
+
*/ export var handleThematicBreak = function() {
|
|
61
|
+
return {
|
|
62
|
+
type: 'hr',
|
|
63
|
+
children: [
|
|
64
|
+
{
|
|
65
|
+
text: ''
|
|
66
|
+
}
|
|
67
|
+
]
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* 处理定义节点
|
|
72
|
+
* @param currentElement - 当前处理的定义元素,包含标签和URL
|
|
73
|
+
* @returns 返回格式化的定义段落节点对象
|
|
74
|
+
*/ export var handleDefinition = function(currentElement) {
|
|
75
|
+
return {
|
|
76
|
+
type: 'paragraph',
|
|
77
|
+
children: [
|
|
78
|
+
{
|
|
79
|
+
text: "[".concat(currentElement.label, "]: ") + (currentElement.url ? "".concat(currentElement.url) : '')
|
|
80
|
+
}
|
|
81
|
+
]
|
|
82
|
+
};
|
|
83
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 根据行间距添加空行元素(纯函数版本)
|
|
3
|
+
* @param els - 目标元素数组
|
|
4
|
+
* @param preNode - 前一个节点
|
|
5
|
+
* @param currentElement - 当前处理的元素
|
|
6
|
+
* @param top - 是否为顶级解析
|
|
7
|
+
* @returns 返回添加了空行元素的新数组
|
|
8
|
+
*/
|
|
9
|
+
export declare const addEmptyLinesIfNeeded: (els: any[], preNode: any, currentElement: any, top: boolean) => any[];
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// 常量定义
|
|
2
|
+
function _array_like_to_array(arr, len) {
|
|
3
|
+
if (len == null || len > arr.length) len = arr.length;
|
|
4
|
+
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
|
|
5
|
+
return arr2;
|
|
6
|
+
}
|
|
7
|
+
function _array_without_holes(arr) {
|
|
8
|
+
if (Array.isArray(arr)) return _array_like_to_array(arr);
|
|
9
|
+
}
|
|
10
|
+
function _iterable_to_array(iter) {
|
|
11
|
+
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
|
|
12
|
+
}
|
|
13
|
+
function _non_iterable_spread() {
|
|
14
|
+
throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
15
|
+
}
|
|
16
|
+
function _to_consumable_array(arr) {
|
|
17
|
+
return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
|
|
18
|
+
}
|
|
19
|
+
function _unsupported_iterable_to_array(o, minLen) {
|
|
20
|
+
if (!o) return;
|
|
21
|
+
if (typeof o === "string") return _array_like_to_array(o, minLen);
|
|
22
|
+
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
23
|
+
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
24
|
+
if (n === "Map" || n === "Set") return Array.from(n);
|
|
25
|
+
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
|
|
26
|
+
}
|
|
27
|
+
var EMPTY_LINE_DISTANCE_THRESHOLD = 4; // 两个元素之间的行距阈值
|
|
28
|
+
var EMPTY_LINE_CALCULATION_OFFSET = 2; // 计算空行数量时的偏移量
|
|
29
|
+
var EMPTY_LINE_DIVISOR = 2; // 计算空行数量的除数
|
|
30
|
+
/**
|
|
31
|
+
* 根据行间距添加空行元素(纯函数版本)
|
|
32
|
+
* @param els - 目标元素数组
|
|
33
|
+
* @param preNode - 前一个节点
|
|
34
|
+
* @param currentElement - 当前处理的元素
|
|
35
|
+
* @param top - 是否为顶级解析
|
|
36
|
+
* @returns 返回添加了空行元素的新数组
|
|
37
|
+
*/ export var addEmptyLinesIfNeeded = function(els, preNode, currentElement, top) {
|
|
38
|
+
var _currentElement_position, _preNode_position;
|
|
39
|
+
if (!preNode || !top) {
|
|
40
|
+
return els;
|
|
41
|
+
}
|
|
42
|
+
var distance = (((_currentElement_position = currentElement.position) === null || _currentElement_position === void 0 ? void 0 : _currentElement_position.start.line) || 0) - (((_preNode_position = preNode.position) === null || _preNode_position === void 0 ? void 0 : _preNode_position.end.line) || 0);
|
|
43
|
+
if (distance < EMPTY_LINE_DISTANCE_THRESHOLD) {
|
|
44
|
+
return els;
|
|
45
|
+
}
|
|
46
|
+
var lines = Math.floor((distance - EMPTY_LINE_CALCULATION_OFFSET) / EMPTY_LINE_DIVISOR);
|
|
47
|
+
var emptyLines = Array.from({
|
|
48
|
+
length: lines
|
|
49
|
+
}, function() {
|
|
50
|
+
return {
|
|
51
|
+
type: 'paragraph',
|
|
52
|
+
children: [
|
|
53
|
+
{
|
|
54
|
+
text: ''
|
|
55
|
+
}
|
|
56
|
+
]
|
|
57
|
+
};
|
|
58
|
+
});
|
|
59
|
+
return _to_consumable_array(els).concat(_to_consumable_array(emptyLines));
|
|
60
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 处理脚注引用
|
|
3
|
+
* @param currentElement - 当前处理的脚注引用元素
|
|
4
|
+
* @returns 返回格式化的脚注引用节点对象
|
|
5
|
+
*/ export var handleFootnoteReference = function(currentElement) {
|
|
6
|
+
var _currentElement_identifier;
|
|
7
|
+
return {
|
|
8
|
+
text: "".concat((_currentElement_identifier = currentElement.identifier) === null || _currentElement_identifier === void 0 ? void 0 : _currentElement_identifier.toUpperCase()),
|
|
9
|
+
identifier: currentElement.identifier,
|
|
10
|
+
type: 'footnoteReference'
|
|
11
|
+
};
|
|
12
|
+
};
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 解码 URI 组件,处理错误情况
|
|
3
|
+
*/
|
|
4
|
+
export declare const decodeURIComponentUrl: (url: string) => string;
|
|
5
|
+
/**
|
|
6
|
+
* 查找并解析媒体元素(img/video/iframe)
|
|
7
|
+
*/
|
|
8
|
+
export declare const findImageElement: (str: string) => any;
|
|
9
|
+
/**
|
|
10
|
+
* 根据媒体元素信息创建编辑器节点
|
|
11
|
+
*/
|
|
12
|
+
export declare const createMediaNodeFromElement: (mediaElement: ReturnType<typeof findImageElement>) => import("../../../..").CardNode | {
|
|
13
|
+
text: string;
|
|
14
|
+
} | null;
|
|
15
|
+
/**
|
|
16
|
+
* 标准 HTML 元素列表
|
|
17
|
+
* 这些标签会被正常解析为 HTML,其他标签会被当作普通文本处理
|
|
18
|
+
*/
|
|
19
|
+
export declare const STANDARD_HTML_ELEMENTS: Set<string>;
|
|
20
|
+
/**
|
|
21
|
+
* 检查 HTML 标签是否为标准元素
|
|
22
|
+
* @param htmlString - HTML 字符串
|
|
23
|
+
* @returns 是否为标准 HTML 元素
|
|
24
|
+
*/
|
|
25
|
+
export declare function isStandardHtmlElement(htmlString: string): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* 查找附件链接
|
|
28
|
+
*/
|
|
29
|
+
export declare const findAttachment: (str: string) => {
|
|
30
|
+
url: string;
|
|
31
|
+
size: number;
|
|
32
|
+
} | null;
|
|
33
|
+
/**
|
|
34
|
+
* 处理HTML节点
|
|
35
|
+
* @param currentElement - 当前处理的HTML元素
|
|
36
|
+
* @param parent - 父级元素,用于判断上下文
|
|
37
|
+
* @param htmlTag - HTML标签栈,用于跟踪嵌套的HTML标签
|
|
38
|
+
* @returns 返回包含解析后元素和上下文属性的对象
|
|
39
|
+
*/
|
|
40
|
+
export declare const handleHtml: (currentElement: any, parent: any, htmlTag: any[]) => {
|
|
41
|
+
el: any;
|
|
42
|
+
contextProps: any;
|
|
43
|
+
htmlTag: any[];
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* 预处理特殊标签(think/answer),将其转换为代码块格式
|
|
47
|
+
* @param markdown - 原始 Markdown 字符串
|
|
48
|
+
* @param tagName - 标签名称(think 或 answer)
|
|
49
|
+
* @returns 处理后的 Markdown 字符串
|
|
50
|
+
*/
|
|
51
|
+
export declare function preprocessSpecialTags(markdown: string, tagName: 'think' | 'answer'): string;
|
|
52
|
+
/**
|
|
53
|
+
* 预处理 <think> 标签,将其转换为 ```think 代码块格式
|
|
54
|
+
* @param markdown - 原始 Markdown 字符串
|
|
55
|
+
* @returns 处理后的 Markdown 字符串
|
|
56
|
+
*/
|
|
57
|
+
export declare function preprocessThinkTags(markdown: string): string;
|
|
58
|
+
/**
|
|
59
|
+
* 预处理所有非标准 HTML 标签,提取其内容(删除标签本身)
|
|
60
|
+
* @param markdown - 原始 Markdown 字符串
|
|
61
|
+
* @returns 处理后的 Markdown 字符串
|
|
62
|
+
*/
|
|
63
|
+
export declare function preprocessNonStandardHtmlTags(markdown: string): string;
|