@ant-design/agentic-ui 2.20.2 → 2.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/MarkdownEditor/BaseMarkdownEditor.js +1 -1
- package/dist/MarkdownEditor/editor/elements/Code.js +1 -1
- package/dist/MarkdownEditor/editor/elements/Image/index.js +37 -9
- package/dist/MarkdownEditor/editor/elements/LinkCard/index.js +87 -2
- package/dist/MarkdownEditor/editor/elements/List/List.js +10 -2
- package/dist/MarkdownEditor/editor/elements/Media.js +75 -23
- package/dist/MarkdownEditor/editor/elements/Table/ReadonlyTableComponent.js +2 -13
- package/dist/MarkdownEditor/editor/elements/Table/SimpleTable.js +89 -15
- package/dist/MarkdownEditor/editor/elements/Table/Table.js +3 -75
- package/dist/MarkdownEditor/editor/elements/index.js +1 -32
- package/dist/MarkdownEditor/editor/parser/parse/parseCode.d.ts +32 -0
- package/dist/MarkdownEditor/editor/parser/parse/parseCode.js +186 -0
- package/dist/MarkdownEditor/editor/parser/parse/parseTable.d.ts +39 -0
- package/dist/MarkdownEditor/editor/parser/parse/parseTable.js +315 -0
- package/dist/MarkdownEditor/editor/parser/parserMarkdownToSlateNode.d.ts +0 -4
- package/dist/MarkdownEditor/editor/parser/parserMarkdownToSlateNode.js +629 -1043
- package/dist/MarkdownEditor/editor/parser/parserSlateNodeToMarkdown.js +15 -3
- package/dist/MarkdownEditor/editor/parser/remarkParse.d.ts +11 -1
- package/dist/MarkdownEditor/editor/parser/remarkParse.js +218 -39
- package/dist/MarkdownEditor/editor/types/Table.d.ts +2 -1
- package/dist/MarkdownEditor/editor/utils/markdownToHtml.js +2 -1
- package/dist/MarkdownEditor/el.d.ts +3 -0
- package/dist/MarkdownEditor/style.js +2 -0
- package/dist/Plugins/chart/index.js +7 -7
- package/dist/Plugins/code/components/CodeRenderer.js +27 -10
- package/dist/Plugins/code/components/CodeToolbar.js +2 -2
- package/dist/Workspace/Task/index.d.ts +13 -8
- package/dist/Workspace/Task/index.js +19 -2
- package/dist/Workspace/index.js +3 -2
- package/dist/Workspace/types.d.ts +3 -1
- package/package.json +1 -1
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
function _define_property(obj, key, value) {
|
|
2
|
+
if (key in obj) {
|
|
3
|
+
Object.defineProperty(obj, key, {
|
|
4
|
+
value: value,
|
|
5
|
+
enumerable: true,
|
|
6
|
+
configurable: true,
|
|
7
|
+
writable: true
|
|
8
|
+
});
|
|
9
|
+
} else {
|
|
10
|
+
obj[key] = value;
|
|
11
|
+
}
|
|
12
|
+
return obj;
|
|
13
|
+
}
|
|
14
|
+
function _object_spread(target) {
|
|
15
|
+
for(var i = 1; i < arguments.length; i++){
|
|
16
|
+
var source = arguments[i] != null ? arguments[i] : {};
|
|
17
|
+
var ownKeys = Object.keys(source);
|
|
18
|
+
if (typeof Object.getOwnPropertySymbols === "function") {
|
|
19
|
+
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
|
20
|
+
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
|
21
|
+
}));
|
|
22
|
+
}
|
|
23
|
+
ownKeys.forEach(function(key) {
|
|
24
|
+
_define_property(target, key, source[key]);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
return target;
|
|
28
|
+
}
|
|
29
|
+
function ownKeys(object, enumerableOnly) {
|
|
30
|
+
var keys = Object.keys(object);
|
|
31
|
+
if (Object.getOwnPropertySymbols) {
|
|
32
|
+
var symbols = Object.getOwnPropertySymbols(object);
|
|
33
|
+
if (enumerableOnly) {
|
|
34
|
+
symbols = symbols.filter(function(sym) {
|
|
35
|
+
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
keys.push.apply(keys, symbols);
|
|
39
|
+
}
|
|
40
|
+
return keys;
|
|
41
|
+
}
|
|
42
|
+
function _object_spread_props(target, source) {
|
|
43
|
+
source = source != null ? source : {};
|
|
44
|
+
if (Object.getOwnPropertyDescriptors) {
|
|
45
|
+
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
|
|
46
|
+
} else {
|
|
47
|
+
ownKeys(Object(source)).forEach(function(key) {
|
|
48
|
+
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
return target;
|
|
52
|
+
}
|
|
53
|
+
import rehypeRaw from "rehype-raw";
|
|
54
|
+
import { remark } from "remark";
|
|
55
|
+
import remarkGfm from "remark-gfm";
|
|
56
|
+
import remarkMath from "remark-math";
|
|
57
|
+
import remarkParse from "remark-parse";
|
|
58
|
+
import remarkRehype from "remark-rehype";
|
|
59
|
+
import { convertParagraphToImage, fixStrongWithSpecialChars } from "../remarkParse";
|
|
60
|
+
//@ts-ignore
|
|
61
|
+
import rehypeKatex from "rehype-katex";
|
|
62
|
+
import remarkFrontmatter from "remark-frontmatter";
|
|
63
|
+
import { EditorUtils } from "../../utils";
|
|
64
|
+
// 表格相关常量
|
|
65
|
+
export var MIN_TABLE_CELL_LENGTH = 5; // 表格单元格最小长度
|
|
66
|
+
export var tableRegex = /^\|.*\|\s*\n\|[-:| ]+\|/m;
|
|
67
|
+
// 创建 remark 实例用于 stringify
|
|
68
|
+
var stringifyObj = remark().use(remarkParse).use(fixStrongWithSpecialChars).use(convertParagraphToImage).use(remarkMath, {
|
|
69
|
+
singleDollarTextMath: false
|
|
70
|
+
}).use(remarkRehype, {
|
|
71
|
+
allowDangerousHtml: true
|
|
72
|
+
}).use(rehypeRaw).use(rehypeKatex).use(remarkGfm).use(remarkFrontmatter, [
|
|
73
|
+
'yaml'
|
|
74
|
+
]);
|
|
75
|
+
var myRemark = {
|
|
76
|
+
stringify: function(obj) {
|
|
77
|
+
var mdStr = stringifyObj.stringify(obj);
|
|
78
|
+
return mdStr;
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* 高级数字检查
|
|
83
|
+
*/ var advancedNumericCheck = function(value) {
|
|
84
|
+
var numericPattern = /^[-+]?[0-9,]*\.?[0-9]+([eE][-+]?[0-9]+)?$/;
|
|
85
|
+
return typeof value === 'number' || typeof value === 'string' && numericPattern.test(value);
|
|
86
|
+
};
|
|
87
|
+
/**
|
|
88
|
+
* 判断是否为数字值
|
|
89
|
+
*/ var isNumericValue = function(value) {
|
|
90
|
+
return typeof value === 'number' || !isNaN(parseFloat(value)) && isFinite(value) || advancedNumericCheck(value);
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* 判断是否包含不完整输入
|
|
94
|
+
* 如果一行中包含可能尚未完成的数字输入,返回 true
|
|
95
|
+
*/ var hasIncompleteNumericInput = function(values) {
|
|
96
|
+
// 检查是否有可能是正在输入的不完整数字
|
|
97
|
+
// 例如: '12.' 或 '0.' 或 '-' 或 仅有一个数字字符的情况
|
|
98
|
+
return values.some(function(val) {
|
|
99
|
+
if (typeof val !== 'string') return false;
|
|
100
|
+
return val.endsWith('.') && /\d/.test(val) || // 以小数点结尾
|
|
101
|
+
val === '-' || // 只有负号
|
|
102
|
+
val === '+' || // 只有正号
|
|
103
|
+
val.length === 1 && /\d/.test(val) // 只有一个数字
|
|
104
|
+
;
|
|
105
|
+
});
|
|
106
|
+
};
|
|
107
|
+
/**
|
|
108
|
+
* 规范化字段名,统一处理转义字符
|
|
109
|
+
* 将 `index\_value` 转换为 `index_value`,确保字段名一致
|
|
110
|
+
* @param fieldName - 原始字段名
|
|
111
|
+
* @returns 规范化后的字段名
|
|
112
|
+
*/ export var normalizeFieldName = function(fieldName) {
|
|
113
|
+
if (!fieldName) return fieldName;
|
|
114
|
+
// 移除转义字符:将 `\_` 转换为 `_`,`\\` 转换为 `\`
|
|
115
|
+
return fieldName.replace(/\\_/g, '_').replace(/\\\\/g, '\\').replace(/\\(?=")/g, '') // 移除转义的双引号
|
|
116
|
+
.trim();
|
|
117
|
+
};
|
|
118
|
+
/**
|
|
119
|
+
* 获取列对齐方式
|
|
120
|
+
*/ export var getColumnAlignment = function(data, columns) {
|
|
121
|
+
if (!data.length) return [];
|
|
122
|
+
// 缓存上一次的对齐结果,避免频繁切换
|
|
123
|
+
var prevAlignments = [];
|
|
124
|
+
return columns.map(function(col, index) {
|
|
125
|
+
var values = data.map(function(row) {
|
|
126
|
+
return row[col.dataIndex];
|
|
127
|
+
}).filter(Boolean);
|
|
128
|
+
values === null || values === void 0 ? void 0 : values.pop();
|
|
129
|
+
// 如果检测到可能正在输入的数字,保持当前对齐状态
|
|
130
|
+
if (hasIncompleteNumericInput(values)) {
|
|
131
|
+
return prevAlignments[index] || null;
|
|
132
|
+
}
|
|
133
|
+
var alignment = values.every(isNumericValue) ? 'right' : null;
|
|
134
|
+
prevAlignments[index] = alignment;
|
|
135
|
+
return alignment;
|
|
136
|
+
});
|
|
137
|
+
};
|
|
138
|
+
/**
|
|
139
|
+
* 解析表格或图表
|
|
140
|
+
* @param table - 表格 AST 节点
|
|
141
|
+
* @param preNode - 前一个节点(可能包含配置信息)
|
|
142
|
+
* @param plugins - 插件数组
|
|
143
|
+
* @param parseNodes - 解析节点的函数,用于解析单元格内容
|
|
144
|
+
* @param parserConfig - 解析配置
|
|
145
|
+
* @returns 返回表格或图表节点
|
|
146
|
+
*/ export var parseTableOrChart = function(table, preNode, plugins, parseNodes, parserConfig) {
|
|
147
|
+
var _table_children, _tableHeader_children, _table_children_slice, _table_children1, _table_align, _config_at, _config_at1;
|
|
148
|
+
var keyMap = new Map();
|
|
149
|
+
// @ts-ignore
|
|
150
|
+
var config = // @ts-ignore
|
|
151
|
+
(preNode === null || preNode === void 0 ? void 0 : preNode.type) === 'code' && // @ts-ignore
|
|
152
|
+
(preNode === null || preNode === void 0 ? void 0 : preNode.language) === 'html' && (// @ts-ignore
|
|
153
|
+
preNode === null || preNode === void 0 ? void 0 : preNode.otherProps) ? preNode === null || preNode === void 0 ? void 0 : preNode.otherProps : {};
|
|
154
|
+
var tableHeader = table === null || table === void 0 ? void 0 : (_table_children = table.children) === null || _table_children === void 0 ? void 0 : _table_children.at(0);
|
|
155
|
+
var columns = (tableHeader === null || tableHeader === void 0 ? void 0 : (_tableHeader_children = tableHeader.children) === null || _tableHeader_children === void 0 ? void 0 : _tableHeader_children.map(function(node) {
|
|
156
|
+
var _myRemark_stringify;
|
|
157
|
+
return (_myRemark_stringify = myRemark.stringify({
|
|
158
|
+
type: 'root',
|
|
159
|
+
children: [
|
|
160
|
+
node
|
|
161
|
+
]
|
|
162
|
+
})) === null || _myRemark_stringify === void 0 ? void 0 : _myRemark_stringify.replace(/\n/g, '').trim();
|
|
163
|
+
}).map(function(title) {
|
|
164
|
+
// 先规范化字段名,统一处理转义字符
|
|
165
|
+
var normalizedTitle = normalizeFieldName(title || ' ');
|
|
166
|
+
return normalizedTitle;
|
|
167
|
+
}).map(function(title, index) {
|
|
168
|
+
if (keyMap.has(title)) {
|
|
169
|
+
keyMap.set(title, keyMap.get(title) + '_' + index);
|
|
170
|
+
return {
|
|
171
|
+
title: title,
|
|
172
|
+
dataIndex: title + '_' + index,
|
|
173
|
+
key: title + '_' + index
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
keyMap.set(title, title);
|
|
177
|
+
return {
|
|
178
|
+
title: title,
|
|
179
|
+
dataIndex: title,
|
|
180
|
+
key: title
|
|
181
|
+
};
|
|
182
|
+
})) || [];
|
|
183
|
+
var dataSource = (table === null || table === void 0 ? void 0 : (_table_children1 = table.children) === null || _table_children1 === void 0 ? void 0 : (_table_children_slice = _table_children1.slice(1)) === null || _table_children_slice === void 0 ? void 0 : _table_children_slice.map(function(row) {
|
|
184
|
+
var _row_children;
|
|
185
|
+
return (_row_children = row.children) === null || _row_children === void 0 ? void 0 : _row_children.reduce(function(acc, cell, index) {
|
|
186
|
+
var _myRemark_stringify_replace_replace_replace, _myRemark_stringify_replace_replace, _myRemark_stringify_replace, _myRemark_stringify;
|
|
187
|
+
// 如果数据列数超出表头列数,舍弃多余的数据
|
|
188
|
+
if (index >= columns.length) {
|
|
189
|
+
return acc;
|
|
190
|
+
}
|
|
191
|
+
acc[columns[index].dataIndex] = (_myRemark_stringify = myRemark.stringify({
|
|
192
|
+
type: 'root',
|
|
193
|
+
children: [
|
|
194
|
+
cell
|
|
195
|
+
]
|
|
196
|
+
})) === null || _myRemark_stringify === void 0 ? void 0 : (_myRemark_stringify_replace = _myRemark_stringify.replace(/\n/g, '')) === null || _myRemark_stringify_replace === void 0 ? void 0 : (_myRemark_stringify_replace_replace = _myRemark_stringify_replace.replace(/\\(?=")/g, '')) === null || _myRemark_stringify_replace_replace === void 0 ? void 0 : (_myRemark_stringify_replace_replace_replace = _myRemark_stringify_replace_replace.replace(/\\_/g, '')) === null || _myRemark_stringify_replace_replace_replace === void 0 ? void 0 : _myRemark_stringify_replace_replace_replace.trim();
|
|
197
|
+
return acc;
|
|
198
|
+
}, {});
|
|
199
|
+
})) || [];
|
|
200
|
+
if ((_table_align = table.align) === null || _table_align === void 0 ? void 0 : _table_align.every(function(item) {
|
|
201
|
+
return !item;
|
|
202
|
+
})) {
|
|
203
|
+
var aligns = getColumnAlignment(dataSource, columns);
|
|
204
|
+
table.align = aligns;
|
|
205
|
+
}
|
|
206
|
+
var aligns1 = table.align;
|
|
207
|
+
var isChart = (config === null || config === void 0 ? void 0 : config.chartType) || (config === null || config === void 0 ? void 0 : (_config_at1 = config.at) === null || _config_at1 === void 0 ? void 0 : (_config_at = _config_at1.call(config, 0)) === null || _config_at === void 0 ? void 0 : _config_at.chartType);
|
|
208
|
+
// 计算合并单元格信息
|
|
209
|
+
var mergeCells = config.mergeCells || [];
|
|
210
|
+
// 创建合并单元格映射,用于快速查找
|
|
211
|
+
var mergeMap = new Map();
|
|
212
|
+
mergeCells === null || mergeCells === void 0 ? void 0 : mergeCells.forEach(function(param) {
|
|
213
|
+
var row = param.row, col = param.col, rowSpan = param.rowSpan, rowspan = param.rowspan, colSpan = param.colSpan, colspan = param.colspan;
|
|
214
|
+
var rawRowSpan = rowSpan || rowspan;
|
|
215
|
+
var rawColSpan = colSpan || colspan;
|
|
216
|
+
// 主单元格
|
|
217
|
+
mergeMap.set("".concat(row, "-").concat(col), {
|
|
218
|
+
rowSpan: rawRowSpan,
|
|
219
|
+
colSpan: rawColSpan
|
|
220
|
+
});
|
|
221
|
+
// 被合并的单元格标记为隐藏
|
|
222
|
+
for(var r = row; r < row + rawRowSpan; r++){
|
|
223
|
+
for(var c = col; c < col + rawColSpan; c++){
|
|
224
|
+
if (r !== row || c !== col) {
|
|
225
|
+
mergeMap.set("".concat(r, "-").concat(c), {
|
|
226
|
+
rowSpan: 1,
|
|
227
|
+
colSpan: 1,
|
|
228
|
+
hidden: true
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
});
|
|
234
|
+
var children = table.children.map(function(r, l) {
|
|
235
|
+
return {
|
|
236
|
+
type: 'table-row',
|
|
237
|
+
align: (aligns1 === null || aligns1 === void 0 ? void 0 : aligns1[l]) || undefined,
|
|
238
|
+
children: r.children.map(function(c, i) {
|
|
239
|
+
var _c_children;
|
|
240
|
+
var mergeInfo = mergeMap.get("".concat(l, "-").concat(i));
|
|
241
|
+
return _object_spread_props(_object_spread({
|
|
242
|
+
type: 'table-cell',
|
|
243
|
+
align: (aligns1 === null || aligns1 === void 0 ? void 0 : aligns1[i]) || undefined,
|
|
244
|
+
title: l === 0,
|
|
245
|
+
rows: l,
|
|
246
|
+
cols: i
|
|
247
|
+
}, (mergeInfo === null || mergeInfo === void 0 ? void 0 : mergeInfo.rowSpan) && mergeInfo.rowSpan > 1 ? {
|
|
248
|
+
rowSpan: mergeInfo.rowSpan
|
|
249
|
+
} : {}, (mergeInfo === null || mergeInfo === void 0 ? void 0 : mergeInfo.colSpan) && mergeInfo.colSpan > 1 ? {
|
|
250
|
+
colSpan: mergeInfo.colSpan
|
|
251
|
+
} : {}, (mergeInfo === null || mergeInfo === void 0 ? void 0 : mergeInfo.hidden) ? {
|
|
252
|
+
hidden: true
|
|
253
|
+
} : {}), {
|
|
254
|
+
children: ((_c_children = c.children) === null || _c_children === void 0 ? void 0 : _c_children.length) ? [
|
|
255
|
+
{
|
|
256
|
+
type: 'paragraph',
|
|
257
|
+
children: parseNodes(c.children, plugins, false, c, parserConfig)
|
|
258
|
+
}
|
|
259
|
+
] : [
|
|
260
|
+
{
|
|
261
|
+
type: 'paragraph',
|
|
262
|
+
children: [
|
|
263
|
+
{
|
|
264
|
+
text: ''
|
|
265
|
+
}
|
|
266
|
+
]
|
|
267
|
+
}
|
|
268
|
+
]
|
|
269
|
+
});
|
|
270
|
+
})
|
|
271
|
+
};
|
|
272
|
+
});
|
|
273
|
+
var otherProps = _object_spread_props(_object_spread({}, isChart ? {
|
|
274
|
+
config: config
|
|
275
|
+
} : config), {
|
|
276
|
+
columns: columns,
|
|
277
|
+
dataSource: dataSource.map(function(item) {
|
|
278
|
+
item === null || item === void 0 ? true : delete item.chartType;
|
|
279
|
+
return _object_spread({}, item);
|
|
280
|
+
})
|
|
281
|
+
});
|
|
282
|
+
var node = {
|
|
283
|
+
type: isChart ? 'chart' : 'table',
|
|
284
|
+
finished: table.finished,
|
|
285
|
+
children: children,
|
|
286
|
+
otherProps: otherProps
|
|
287
|
+
};
|
|
288
|
+
return EditorUtils.wrapperCardNode(node);
|
|
289
|
+
};
|
|
290
|
+
/**
|
|
291
|
+
* 预处理 Markdown 表格换行符
|
|
292
|
+
* @param markdown - 原始 Markdown 字符串
|
|
293
|
+
* @returns 处理后的 Markdown 字符串
|
|
294
|
+
*/ export var preprocessMarkdownTableNewlines = function(markdown) {
|
|
295
|
+
// 检查是否包含表格
|
|
296
|
+
if (!tableRegex.test(markdown)) return markdown; // 如果没有表格,直接返回原始字符串
|
|
297
|
+
// 处理表格结尾的换行符:
|
|
298
|
+
// 1. 如果只有一个换行符,改成两个
|
|
299
|
+
// 2. 如果有两个以上换行符,改成两个
|
|
300
|
+
// 3. 如果已经是两个换行符,保持不变
|
|
301
|
+
var processedMarkdown = markdown.replace(/(\|[^|\n]*\|)\n(?!\n|\|)/g, '$1\n\n').replace(/(\|[^|\n]*\|)\n{3,}(?!\|)/g, '$1\n\n');
|
|
302
|
+
// 如果包含表格,处理换行符
|
|
303
|
+
return processedMarkdown === null || processedMarkdown === void 0 ? void 0 : processedMarkdown.split('\n\n').map(function(line) {
|
|
304
|
+
if (line.includes('```')) return line; // 如果包含代码块,直接返回原始字符串
|
|
305
|
+
// 检查是否包含表格
|
|
306
|
+
if (!tableRegex.test(line)) return line; // 如果没有表格,直接返回原始字符串
|
|
307
|
+
// 匹配所有表格的行(确保我们在表格行内匹配换行符)
|
|
308
|
+
return line.replace(/\|([^|]+)\|/g, function(match) {
|
|
309
|
+
var _match_replaceAll;
|
|
310
|
+
if (((_match_replaceAll = match.replaceAll('\n', '')) === null || _match_replaceAll === void 0 ? void 0 : _match_replaceAll.length) < MIN_TABLE_CELL_LENGTH) return match;
|
|
311
|
+
// 只替换每个表格单元格内的换行符
|
|
312
|
+
return match.split('\n').join('<br>');
|
|
313
|
+
});
|
|
314
|
+
}).join('\n\n');
|
|
315
|
+
};
|