@ant-design/agentic-ui 2.11.2 → 2.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/dist/Bubble/MessagesContent/BubbleExtra.js +7 -1
  2. package/dist/MarkdownEditor/editor/types/Table.d.ts +1 -0
  3. package/dist/MarkdownEditor/editor/utils/ace.d.ts +22 -105
  4. package/dist/MarkdownEditor/editor/utils/ace.js +328 -106
  5. package/dist/MarkdownEditor/types.d.ts +1 -1
  6. package/dist/MarkdownInputField/AttachmentButton/index.js +5 -3
  7. package/dist/MarkdownInputField/MarkdownInputField.d.ts +32 -0
  8. package/dist/MarkdownInputField/MarkdownInputField.js +26 -8
  9. package/dist/Plugins/chart/ChartRender.js +75 -13
  10. package/dist/Plugins/chart/LineChart/index.js +10 -4
  11. package/dist/Plugins/chart/index.js +17 -5
  12. package/dist/Plugins/chart/utils.d.ts +40 -0
  13. package/dist/Plugins/chart/utils.js +116 -0
  14. package/dist/Plugins/code/CodeUI/Katex/Katex.d.ts +0 -1
  15. package/dist/Plugins/code/CodeUI/Katex/Katex.js +182 -6
  16. package/dist/Plugins/code/components/AceEditor.d.ts +4 -6
  17. package/dist/Plugins/code/components/AceEditor.js +362 -40
  18. package/dist/Plugins/code/loadAceEditor.d.ts +26 -0
  19. package/dist/Plugins/code/loadAceEditor.js +266 -0
  20. package/dist/Plugins/katex/InlineKatex.d.ts +0 -1
  21. package/dist/Plugins/katex/InlineKatex.js +183 -7
  22. package/dist/Plugins/katex/Katex.d.ts +0 -1
  23. package/dist/Plugins/katex/Katex.js +184 -6
  24. package/dist/Plugins/katex/loadKatex.d.ts +18 -0
  25. package/dist/Plugins/katex/loadKatex.js +181 -0
  26. package/dist/Plugins/mermaid/Mermaid.js +315 -113
  27. package/dist/Schema/SchemaEditor/AceEditorWrapper.d.ts +1 -1
  28. package/dist/Schema/SchemaEditor/AceEditorWrapper.js +342 -53
  29. package/dist/Utils/loadCSS.d.ts +31 -0
  30. package/dist/Utils/loadCSS.js +264 -0
  31. package/package.json +1 -1
@@ -10,7 +10,44 @@
10
10
  * - 与 Slate 编辑器的集成
11
11
  *
12
12
  * @see {@link https://ace.c9.io/} Ace Editor 官方文档
13
- */ function _define_property(obj, key, value) {
13
+ */ function _array_like_to_array(arr, len) {
14
+ if (len == null || len > arr.length) len = arr.length;
15
+ for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
16
+ return arr2;
17
+ }
18
+ function _array_with_holes(arr) {
19
+ if (Array.isArray(arr)) return arr;
20
+ }
21
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
22
+ try {
23
+ var info = gen[key](arg);
24
+ var value = info.value;
25
+ } catch (error) {
26
+ reject(error);
27
+ return;
28
+ }
29
+ if (info.done) {
30
+ resolve(value);
31
+ } else {
32
+ Promise.resolve(value).then(_next, _throw);
33
+ }
34
+ }
35
+ function _async_to_generator(fn) {
36
+ return function() {
37
+ var self = this, args = arguments;
38
+ return new Promise(function(resolve, reject) {
39
+ var gen = fn.apply(self, args);
40
+ function _next(value) {
41
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
42
+ }
43
+ function _throw(err) {
44
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
45
+ }
46
+ _next(undefined);
47
+ });
48
+ };
49
+ }
50
+ function _define_property(obj, key, value) {
14
51
  if (key in obj) {
15
52
  Object.defineProperty(obj, key, {
16
53
  value: value,
@@ -23,6 +60,33 @@
23
60
  }
24
61
  return obj;
25
62
  }
63
+ function _iterable_to_array_limit(arr, i) {
64
+ var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
65
+ if (_i == null) return;
66
+ var _arr = [];
67
+ var _n = true;
68
+ var _d = false;
69
+ var _s, _e;
70
+ try {
71
+ for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
72
+ _arr.push(_s.value);
73
+ if (i && _arr.length === i) break;
74
+ }
75
+ } catch (err) {
76
+ _d = true;
77
+ _e = err;
78
+ } finally{
79
+ try {
80
+ if (!_n && _i["return"] != null) _i["return"]();
81
+ } finally{
82
+ if (_d) throw _e;
83
+ }
84
+ }
85
+ return _arr;
86
+ }
87
+ function _non_iterable_rest() {
88
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
89
+ }
26
90
  function _object_spread(target) {
27
91
  for(var i = 1; i < arguments.length; i++){
28
92
  var source = arguments[i] != null ? arguments[i] : {};
@@ -65,17 +129,121 @@ function _object_without_properties_loose(source, excluded) {
65
129
  }
66
130
  return target;
67
131
  }
68
- import ace from "ace-builds";
69
- import "ace-builds/src-noconflict/theme-chaos";
70
- import "ace-builds/src-noconflict/theme-github";
132
+ function _sliced_to_array(arr, i) {
133
+ return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
134
+ }
135
+ function _unsupported_iterable_to_array(o, minLen) {
136
+ if (!o) return;
137
+ if (typeof o === "string") return _array_like_to_array(o, minLen);
138
+ var n = Object.prototype.toString.call(o).slice(8, -1);
139
+ if (n === "Object" && o.constructor) n = o.constructor.name;
140
+ if (n === "Map" || n === "Set") return Array.from(n);
141
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
142
+ }
143
+ function _ts_generator(thisArg, body) {
144
+ var f, y, t, g, _ = {
145
+ label: 0,
146
+ sent: function() {
147
+ if (t[0] & 1) throw t[1];
148
+ return t[1];
149
+ },
150
+ trys: [],
151
+ ops: []
152
+ };
153
+ return g = {
154
+ next: verb(0),
155
+ "throw": verb(1),
156
+ "return": verb(2)
157
+ }, typeof Symbol === "function" && (g[Symbol.iterator] = function() {
158
+ return this;
159
+ }), g;
160
+ function verb(n) {
161
+ return function(v) {
162
+ return step([
163
+ n,
164
+ v
165
+ ]);
166
+ };
167
+ }
168
+ function step(op) {
169
+ if (f) throw new TypeError("Generator is already executing.");
170
+ while(_)try {
171
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
172
+ if (y = 0, t) op = [
173
+ op[0] & 2,
174
+ t.value
175
+ ];
176
+ switch(op[0]){
177
+ case 0:
178
+ case 1:
179
+ t = op;
180
+ break;
181
+ case 4:
182
+ _.label++;
183
+ return {
184
+ value: op[1],
185
+ done: false
186
+ };
187
+ case 5:
188
+ _.label++;
189
+ y = op[1];
190
+ op = [
191
+ 0
192
+ ];
193
+ continue;
194
+ case 7:
195
+ op = _.ops.pop();
196
+ _.trys.pop();
197
+ continue;
198
+ default:
199
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
200
+ _ = 0;
201
+ continue;
202
+ }
203
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
204
+ _.label = op[1];
205
+ break;
206
+ }
207
+ if (op[0] === 6 && _.label < t[1]) {
208
+ _.label = t[1];
209
+ t = op;
210
+ break;
211
+ }
212
+ if (t && _.label < t[2]) {
213
+ _.label = t[2];
214
+ _.ops.push(op);
215
+ break;
216
+ }
217
+ if (t[2]) _.ops.pop();
218
+ _.trys.pop();
219
+ continue;
220
+ }
221
+ op = body.call(thisArg, _);
222
+ } catch (e) {
223
+ op = [
224
+ 6,
225
+ e
226
+ ];
227
+ y = 0;
228
+ } finally{
229
+ f = t = 0;
230
+ }
231
+ if (op[0] & 5) throw op[1];
232
+ return {
233
+ value: op[0] ? op[1] : void 0,
234
+ done: true
235
+ };
236
+ }
237
+ }
71
238
  import isHotkey from "is-hotkey";
72
- import { useCallback, useEffect, useRef } from "react";
239
+ import { startTransition, useCallback, useEffect, useRef, useState } from "react";
73
240
  import { Editor, Path, Transforms } from "slate";
74
241
  import { useRefFunction } from "../../../Hooks/useRefFunction";
75
242
  import partialParse from "../../../MarkdownEditor/editor/parser/json-parse";
76
243
  import { useEditorStore } from "../../../MarkdownEditor/editor/store";
77
- import { aceLangs, modeMap } from "../../../MarkdownEditor/editor/utils/ace";
244
+ import { getAceLangs, modeMap } from "../../../MarkdownEditor/editor/utils/ace";
78
245
  import { EditorUtils } from "../../../MarkdownEditor/editor/utils/editorUtils";
246
+ import { loadAceEditor, loadAceTheme } from "../loadAceEditor";
79
247
  /**
80
248
  * AceEditor 组件
81
249
  *
@@ -111,7 +279,7 @@ import { EditorUtils } from "../../../MarkdownEditor/editor/utils/editorUtils";
111
279
  "isSelected",
112
280
  "onSelectionChange"
113
281
  ]);
114
- var _editorProps_codeProps;
282
+ var _editorProps_codeProps, _editorProps_codeProps1;
115
283
  var _useEditorStore = useEditorStore(), store = _useEditorStore.store, editorProps = _useEditorStore.editorProps, readonly = _useEditorStore.readonly;
116
284
  // 各种引用
117
285
  var codeRef = useRef(element.value || '');
@@ -124,12 +292,77 @@ import { EditorUtils } from "../../../MarkdownEditor/editor/utils/editorUtils";
124
292
  var debounceTimer = useRef(0);
125
293
  var editorRef = useRef();
126
294
  var dom = useRef(null);
295
+ // Ace Editor 异步加载状态
296
+ var _useState = _sliced_to_array(useState(false), 2), aceLoaded = _useState[0], setAceLoaded = _useState[1];
297
+ var aceModuleRef = useRef(null);
127
298
  // 更新路径引用
128
299
  useEffect(function() {
129
300
  pathRef.current = path;
130
301
  }, [
131
302
  path
132
303
  ]);
304
+ // 异步加载 Ace Editor 库
305
+ useEffect(function() {
306
+ if (process.env.NODE_ENV === 'test') {
307
+ // 测试环境跳过加载
308
+ setAceLoaded(true);
309
+ return;
310
+ }
311
+ // 使用 startTransition 标记为非紧急更新
312
+ startTransition(function() {
313
+ // 异步加载在 startTransition 外部执行
314
+ _async_to_generator(function() {
315
+ var _editorProps_codeProps, aceModule, theme, error;
316
+ return _ts_generator(this, function(_state) {
317
+ switch(_state.label){
318
+ case 0:
319
+ _state.trys.push([
320
+ 0,
321
+ 3,
322
+ ,
323
+ 4
324
+ ]);
325
+ return [
326
+ 4,
327
+ loadAceEditor()
328
+ ];
329
+ case 1:
330
+ aceModule = _state.sent();
331
+ aceModuleRef.current = aceModule;
332
+ // 加载主题
333
+ theme = ((_editorProps_codeProps = editorProps.codeProps) === null || _editorProps_codeProps === void 0 ? void 0 : _editorProps_codeProps.theme) || props.theme || 'github';
334
+ return [
335
+ 4,
336
+ loadAceTheme(theme)
337
+ ];
338
+ case 2:
339
+ _state.sent();
340
+ setAceLoaded(true);
341
+ return [
342
+ 3,
343
+ 4
344
+ ];
345
+ case 3:
346
+ error = _state.sent();
347
+ console.error('Failed to load Ace Editor:', error);
348
+ // 即使加载失败也设置 loaded,避免无限加载
349
+ setAceLoaded(true);
350
+ return [
351
+ 3,
352
+ 4
353
+ ];
354
+ case 4:
355
+ return [
356
+ 2
357
+ ];
358
+ }
359
+ });
360
+ })();
361
+ });
362
+ }, [
363
+ (_editorProps_codeProps = editorProps.codeProps) === null || _editorProps_codeProps === void 0 ? void 0 : _editorProps_codeProps.theme,
364
+ props.theme
365
+ ]);
133
366
  // 键盘事件处理
134
367
  var handleKeyDown = useRefFunction(function(e) {
135
368
  // 删除空代码块
@@ -247,17 +480,21 @@ import { EditorUtils } from "../../../MarkdownEditor/editor/utils/editorUtils";
247
480
  readonly,
248
481
  handleKeyDown
249
482
  ]);
250
- // 初始化 Ace 编辑器
483
+ // 初始化 Ace 编辑器(仅在库加载完成后)
251
484
  useEffect(function() {
252
485
  var _editorProps_codeProps;
253
486
  if (process.env.NODE_ENV === 'test') return;
254
- if (!dom.current) return;
487
+ if (!aceLoaded || !aceModuleRef.current || !dom.current) return;
255
488
  var value = element.value || '';
256
489
  if (element.language === 'json') {
257
490
  try {
258
491
  value = JSON.stringify(partialParse(value), null, 2);
259
492
  } catch (e) {}
260
493
  }
494
+ // ace-builds 模块的默认导出就是 ace 对象
495
+ // 使用类型断言确保类型正确
496
+ var aceModule = aceModuleRef.current;
497
+ var ace = aceModule.default || aceModule;
261
498
  var codeEditor = ace.edit(dom.current, _object_spread({
262
499
  useWorker: false,
263
500
  value: value,
@@ -276,22 +513,45 @@ import { EditorUtils } from "../../../MarkdownEditor/editor/utils/editorUtils";
276
513
  var theme = ((_editorProps_codeProps = editorProps.codeProps) === null || _editorProps_codeProps === void 0 ? void 0 : _editorProps_codeProps.theme) || props.theme || 'github';
277
514
  codeEditor.setTheme("ace/theme/".concat(theme));
278
515
  // 设置语法高亮
279
- setTimeout(function() {
280
- var lang = element.language;
281
- if (modeMap.has(lang)) {
282
- lang = modeMap.get(lang);
283
- }
284
- if (aceLangs.has(lang)) {
285
- codeEditor.session.setMode("ace/mode/".concat(lang));
286
- }
287
- }, 16);
516
+ setTimeout(/*#__PURE__*/ _async_to_generator(function() {
517
+ var lang, aceLangs;
518
+ return _ts_generator(this, function(_state) {
519
+ switch(_state.label){
520
+ case 0:
521
+ lang = element.language;
522
+ if (modeMap.has(lang)) {
523
+ lang = modeMap.get(lang);
524
+ }
525
+ return [
526
+ 4,
527
+ getAceLangs()
528
+ ];
529
+ case 1:
530
+ aceLangs = _state.sent();
531
+ if (aceLangs.has(lang)) {
532
+ codeEditor.session.setMode("ace/mode/".concat(lang));
533
+ }
534
+ return [
535
+ 2
536
+ ];
537
+ }
538
+ });
539
+ }), 16);
288
540
  if (readonly) return;
289
541
  // 配置编辑器事件
290
542
  setupEditorEvents(codeEditor);
291
543
  return function() {
292
544
  codeEditor.destroy();
293
545
  };
294
- }, []);
546
+ }, [
547
+ aceLoaded,
548
+ element.value,
549
+ element.language,
550
+ readonly,
551
+ editorProps.codeProps,
552
+ props.theme,
553
+ setupEditorEvents
554
+ ]);
295
555
  // 监听外部值变化
296
556
  useEffect(function() {
297
557
  var value = element.value || '';
@@ -311,32 +571,94 @@ import { EditorUtils } from "../../../MarkdownEditor/editor/utils/editorUtils";
311
571
  // 监听主题变化
312
572
  useEffect(function() {
313
573
  var _editorProps_codeProps;
314
- if (!editorRef.current) return;
574
+ if (!editorRef.current || !aceLoaded) return;
315
575
  var theme = ((_editorProps_codeProps = editorProps.codeProps) === null || _editorProps_codeProps === void 0 ? void 0 : _editorProps_codeProps.theme) || props.theme || 'github';
316
- editorRef.current.setTheme("ace/theme/".concat(theme));
576
+ // 异步加载新主题
577
+ startTransition(function() {
578
+ _async_to_generator(function() {
579
+ var _editorRef_current, error, // 尝试使用默认主题
580
+ _editorRef_current1;
581
+ return _ts_generator(this, function(_state) {
582
+ switch(_state.label){
583
+ case 0:
584
+ _state.trys.push([
585
+ 0,
586
+ 2,
587
+ ,
588
+ 3
589
+ ]);
590
+ return [
591
+ 4,
592
+ loadAceTheme(theme)
593
+ ];
594
+ case 1:
595
+ _state.sent();
596
+ (_editorRef_current = editorRef.current) === null || _editorRef_current === void 0 ? void 0 : _editorRef_current.setTheme("ace/theme/".concat(theme));
597
+ return [
598
+ 3,
599
+ 3
600
+ ];
601
+ case 2:
602
+ error = _state.sent();
603
+ console.warn("Failed to load theme: ".concat(theme), error);
604
+ (_editorRef_current1 = editorRef.current) === null || _editorRef_current1 === void 0 ? void 0 : _editorRef_current1.setTheme("ace/theme/github");
605
+ return [
606
+ 3,
607
+ 3
608
+ ];
609
+ case 3:
610
+ return [
611
+ 2
612
+ ];
613
+ }
614
+ });
615
+ })();
616
+ });
317
617
  }, [
318
- (_editorProps_codeProps = editorProps.codeProps) === null || _editorProps_codeProps === void 0 ? void 0 : _editorProps_codeProps.theme,
319
- props.theme
618
+ (_editorProps_codeProps1 = editorProps.codeProps) === null || _editorProps_codeProps1 === void 0 ? void 0 : _editorProps_codeProps1.theme,
619
+ props.theme,
620
+ aceLoaded
320
621
  ]);
321
622
  // 暴露设置语言的方法
322
- var setLanguage = useCallback(function(changeLang) {
323
- var _element_language;
324
- var lang = changeLang.toLowerCase();
325
- if (((_element_language = element.language) === null || _element_language === void 0 ? void 0 : _element_language.toLowerCase()) === lang) return;
326
- onUpdate({
327
- language: lang
623
+ var setLanguage = useCallback(/*#__PURE__*/ function() {
624
+ var _ref = _async_to_generator(function(changeLang) {
625
+ var _element_language, lang, aceLangs, _editorRef_current, _editorRef_current1;
626
+ return _ts_generator(this, function(_state) {
627
+ switch(_state.label){
628
+ case 0:
629
+ lang = changeLang.toLowerCase();
630
+ if (((_element_language = element.language) === null || _element_language === void 0 ? void 0 : _element_language.toLowerCase()) === lang) return [
631
+ 2
632
+ ];
633
+ onUpdate({
634
+ language: lang
635
+ });
636
+ if (modeMap.has(lang)) {
637
+ lang = modeMap.get(lang);
638
+ }
639
+ return [
640
+ 4,
641
+ getAceLangs()
642
+ ];
643
+ case 1:
644
+ aceLangs = _state.sent();
645
+ if (aceLangs.has(lang)) {
646
+ ;
647
+ (_editorRef_current = editorRef.current) === null || _editorRef_current === void 0 ? void 0 : _editorRef_current.session.setMode("ace/mode/".concat(lang));
648
+ } else {
649
+ ;
650
+ (_editorRef_current1 = editorRef.current) === null || _editorRef_current1 === void 0 ? void 0 : _editorRef_current1.session.setMode("ace/mode/text");
651
+ }
652
+ return [
653
+ 2
654
+ ];
655
+ }
656
+ });
328
657
  });
329
- if (modeMap.has(lang)) {
330
- lang = modeMap.get(lang);
331
- }
332
- if (aceLangs.has(lang)) {
333
- var _editorRef_current;
334
- (_editorRef_current = editorRef.current) === null || _editorRef_current === void 0 ? void 0 : _editorRef_current.session.setMode("ace/mode/".concat(lang));
335
- } else {
336
- var _editorRef_current1;
337
- (_editorRef_current1 = editorRef.current) === null || _editorRef_current1 === void 0 ? void 0 : _editorRef_current1.session.setMode("ace/mode/text");
338
- }
339
- }, [
658
+ return function(changeLang) {
659
+ return _ref.apply(this, arguments);
660
+ };
661
+ }(), [
340
662
  element,
341
663
  onUpdate
342
664
  ]);
@@ -0,0 +1,26 @@
1
+ /**
2
+ * @fileoverview Ace Editor 异步加载器
3
+ *
4
+ * 使用单例模式确保 ace-builds 库只加载一次
5
+ * 支持动态导入主题和语言模式,实现代码分割
6
+ * CSS 文件也会异步加载
7
+ */
8
+ /// <reference types="ace-builds" />
9
+ type AceEditorModule = typeof import('ace-builds');
10
+ /**
11
+ * 加载 Ace Editor 核心库
12
+ * 使用单例模式确保只加载一次
13
+ */
14
+ export declare const loadAceEditor: () => Promise<AceEditorModule>;
15
+ /**
16
+ * 加载 Ace Editor 主题
17
+ * 支持按需加载主题和对应的 CSS,减少初始 bundle 大小
18
+ */
19
+ export declare const loadAceTheme: (themeName: string) => Promise<void>;
20
+ /**
21
+ * 预加载 Ace Editor 资源
22
+ * 使用动态 import 提前开始加载,但不阻塞当前执行
23
+ * 可以在用户可能使用代码编辑器之前调用此函数
24
+ */
25
+ export declare const preloadAceEditor: () => void;
26
+ export {};