react-ai-renderer 0.1.2 → 0.1.3

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 (196) hide show
  1. package/dist/{MermaidRenderer-0ef71453.js → MermaidRenderer-07b34bcf.js} +2 -2
  2. package/dist/{MermaidRenderer-321bfe50.js.map → MermaidRenderer-07b34bcf.js.map} +1 -1
  3. package/dist/{MermaidRenderer-321bfe50.js → MermaidRenderer-0aacea2f.js} +2 -2
  4. package/dist/{MermaidRenderer-0ef71453.js.map → MermaidRenderer-0aacea2f.js.map} +1 -1
  5. package/dist/{MermaidRenderer-4bae11d6.js → MermaidRenderer-1c06834c.js} +2 -2
  6. package/dist/{MermaidRenderer-325a9dee.js.map → MermaidRenderer-1c06834c.js.map} +1 -1
  7. package/dist/{MermaidRenderer-325a9dee.js → MermaidRenderer-22b8cb81.js} +2 -2
  8. package/dist/{MermaidRenderer-4bae11d6.js.map → MermaidRenderer-22b8cb81.js.map} +1 -1
  9. package/dist/MermaidRenderer-2438ceb1.js +170 -0
  10. package/dist/MermaidRenderer-2438ceb1.js.map +1 -0
  11. package/dist/MermaidRenderer-2f6d93a2.js +170 -0
  12. package/dist/MermaidRenderer-2f6d93a2.js.map +1 -0
  13. package/dist/MermaidRenderer-447e20f0.js +170 -0
  14. package/dist/MermaidRenderer-447e20f0.js.map +1 -0
  15. package/dist/MermaidRenderer-456abbe8.js +170 -0
  16. package/dist/MermaidRenderer-456abbe8.js.map +1 -0
  17. package/dist/MermaidRenderer-45a1e235.js +170 -0
  18. package/dist/MermaidRenderer-45a1e235.js.map +1 -0
  19. package/dist/{MermaidRenderer-653a4dab.js → MermaidRenderer-4b75a3e5.js} +2 -2
  20. package/dist/{MermaidRenderer-653a4dab.js.map → MermaidRenderer-4b75a3e5.js.map} +1 -1
  21. package/dist/{MermaidRenderer-67edae8e.js → MermaidRenderer-59cd2aac.js} +2 -2
  22. package/dist/{MermaidRenderer-67edae8e.js.map → MermaidRenderer-59cd2aac.js.map} +1 -1
  23. package/dist/{MermaidRenderer-13e4a89a.js → MermaidRenderer-61954263.js} +2 -2
  24. package/dist/{MermaidRenderer-75832c15.js.map → MermaidRenderer-61954263.js.map} +1 -1
  25. package/dist/{MermaidRenderer-a25ae84f.js → MermaidRenderer-62cbf217.js} +1 -1
  26. package/dist/{MermaidRenderer-13e4a89a.js.map → MermaidRenderer-62cbf217.js.map} +1 -1
  27. package/dist/MermaidRenderer-6323359c.js +170 -0
  28. package/dist/MermaidRenderer-6323359c.js.map +1 -0
  29. package/dist/{MermaidRenderer-d8836800.js → MermaidRenderer-680adac3.js} +1 -1
  30. package/dist/MermaidRenderer-680adac3.js.map +1 -0
  31. package/dist/{MermaidRenderer-75832c15.js → MermaidRenderer-771db0f2.js} +2 -2
  32. package/dist/MermaidRenderer-771db0f2.js.map +1 -0
  33. package/dist/MermaidRenderer-7a5bd531.js +170 -0
  34. package/dist/MermaidRenderer-7a5bd531.js.map +1 -0
  35. package/dist/MermaidRenderer-94fceb26.js +172 -0
  36. package/dist/MermaidRenderer-94fceb26.js.map +1 -0
  37. package/dist/MermaidRenderer-a6a464ec.js +172 -0
  38. package/dist/MermaidRenderer-a6a464ec.js.map +1 -0
  39. package/dist/MermaidRenderer-a8c58389.js +172 -0
  40. package/dist/MermaidRenderer-a8c58389.js.map +1 -0
  41. package/dist/MermaidRenderer-b23c2eec.js +172 -0
  42. package/dist/MermaidRenderer-b23c2eec.js.map +1 -0
  43. package/dist/MermaidRenderer-b30dda58.js +170 -0
  44. package/dist/MermaidRenderer-b30dda58.js.map +1 -0
  45. package/dist/MermaidRenderer-b65fed60.js +172 -0
  46. package/dist/MermaidRenderer-b65fed60.js.map +1 -0
  47. package/dist/MermaidRenderer-c594187b.js +172 -0
  48. package/dist/MermaidRenderer-c594187b.js.map +1 -0
  49. package/dist/MermaidRenderer-c5f51ccf.js +172 -0
  50. package/dist/MermaidRenderer-c5f51ccf.js.map +1 -0
  51. package/dist/MermaidRenderer-cf69f9fc.js +172 -0
  52. package/dist/MermaidRenderer-cf69f9fc.js.map +1 -0
  53. package/dist/MermaidRenderer-fa15e3c7.js +172 -0
  54. package/dist/MermaidRenderer-fa15e3c7.js.map +1 -0
  55. package/dist/MermaidRenderer-fc75606f.js +170 -0
  56. package/dist/MermaidRenderer-fc75606f.js.map +1 -0
  57. package/dist/index-27d5e758.js +1399 -0
  58. package/dist/index-27d5e758.js.map +1 -0
  59. package/dist/{index-922bbd30.js → index-2b2eb026.js} +195 -141
  60. package/dist/{index-bb96fdaf.js.map → index-2b2eb026.js.map} +1 -1
  61. package/dist/{index-4592abf8.js → index-34e4d478.js} +31 -53
  62. package/dist/index-34e4d478.js.map +1 -0
  63. package/dist/index-4881fdf3.js +1458 -0
  64. package/dist/index-4881fdf3.js.map +1 -0
  65. package/dist/{index-283b43ef.js → index-4d8e81d1.js} +97 -118
  66. package/dist/index-4d8e81d1.js.map +1 -0
  67. package/dist/{index-3de28f18.js → index-4f25eb16.js} +19 -49
  68. package/dist/index-4f25eb16.js.map +1 -0
  69. package/dist/index-53d781f0.js +1476 -0
  70. package/dist/index-53d781f0.js.map +1 -0
  71. package/dist/index-543584d8.js +1398 -0
  72. package/dist/index-543584d8.js.map +1 -0
  73. package/dist/index-54c78282.js +1474 -0
  74. package/dist/index-54c78282.js.map +1 -0
  75. package/dist/index-57a0454a.js +1441 -0
  76. package/dist/index-57a0454a.js.map +1 -0
  77. package/dist/index-58ab9759.js +1424 -0
  78. package/dist/index-58ab9759.js.map +1 -0
  79. package/dist/index-58ee3084.js +1399 -0
  80. package/dist/index-58ee3084.js.map +1 -0
  81. package/dist/{index-bb96fdaf.js → index-5edd5559.js} +20 -53
  82. package/dist/index-5edd5559.js.map +1 -0
  83. package/dist/{index-415b51ad.js → index-65168e57.js} +20 -53
  84. package/dist/index-65168e57.js.map +1 -0
  85. package/dist/index-66021d90.js +1431 -0
  86. package/dist/index-66021d90.js.map +1 -0
  87. package/dist/index-71e57dce.js +1425 -0
  88. package/dist/index-71e57dce.js.map +1 -0
  89. package/dist/{index-ae31bd04.js → index-742d8be6.js} +97 -119
  90. package/dist/index-742d8be6.js.map +1 -0
  91. package/dist/{index-c0acef6b.js → index-813be4d3.js} +254 -159
  92. package/dist/index-813be4d3.js.map +1 -0
  93. package/dist/index-82c906b1.js +1448 -0
  94. package/dist/index-82c906b1.js.map +1 -0
  95. package/dist/index-a7fb8ff9.js +1432 -0
  96. package/dist/index-a7fb8ff9.js.map +1 -0
  97. package/dist/{index-c6ab333d.js → index-b4765fbd.js} +19 -49
  98. package/dist/index-b4765fbd.js.map +1 -0
  99. package/dist/{index-fdaa9757.js → index-b78ff7b5.js} +254 -168
  100. package/dist/index-b78ff7b5.js.map +1 -0
  101. package/dist/index-c56180b9.js +1425 -0
  102. package/dist/index-c56180b9.js.map +1 -0
  103. package/dist/{index-7e8dc866.js → index-d5855b9f.js} +195 -132
  104. package/dist/{index-415b51ad.js.map → index-d5855b9f.js.map} +1 -1
  105. package/dist/{index-1d051ba8.js → index-d63be97b.js} +31 -54
  106. package/dist/index-d63be97b.js.map +1 -0
  107. package/dist/index-dd9fe728.js +1457 -0
  108. package/dist/index-dd9fe728.js.map +1 -0
  109. package/dist/index-e0ce1691.js +1467 -0
  110. package/dist/index-e0ce1691.js.map +1 -0
  111. package/dist/index-fadb7b0b.js +1450 -0
  112. package/dist/index-fadb7b0b.js.map +1 -0
  113. package/dist/index.d.ts +30 -9
  114. package/dist/index.es.js +1 -1
  115. package/dist/index.js +1 -1
  116. package/package.json +1 -1
  117. package/dist/MermaidRenderer-6237d7da.js +0 -170
  118. package/dist/MermaidRenderer-6237d7da.js.map +0 -1
  119. package/dist/MermaidRenderer-6f071d8e.js +0 -170
  120. package/dist/MermaidRenderer-6f071d8e.js.map +0 -1
  121. package/dist/MermaidRenderer-7cb138d1.js +0 -170
  122. package/dist/MermaidRenderer-7cb138d1.js.map +0 -1
  123. package/dist/MermaidRenderer-8a8fb725.js +0 -172
  124. package/dist/MermaidRenderer-8a8fb725.js.map +0 -1
  125. package/dist/MermaidRenderer-91a0a7d8.js +0 -170
  126. package/dist/MermaidRenderer-91a0a7d8.js.map +0 -1
  127. package/dist/MermaidRenderer-9ff856f3.js +0 -172
  128. package/dist/MermaidRenderer-9ff856f3.js.map +0 -1
  129. package/dist/MermaidRenderer-a25ae84f.js.map +0 -1
  130. package/dist/MermaidRenderer-c3014102.js +0 -172
  131. package/dist/MermaidRenderer-c3014102.js.map +0 -1
  132. package/dist/MermaidRenderer-c664aa66.js +0 -170
  133. package/dist/MermaidRenderer-c664aa66.js.map +0 -1
  134. package/dist/MermaidRenderer-d1518f28.js +0 -172
  135. package/dist/MermaidRenderer-d1518f28.js.map +0 -1
  136. package/dist/MermaidRenderer-d7545a7e.js +0 -172
  137. package/dist/MermaidRenderer-d7545a7e.js.map +0 -1
  138. package/dist/MermaidRenderer-d8836800.js.map +0 -1
  139. package/dist/MermaidRenderer-d9c8351a.js +0 -172
  140. package/dist/MermaidRenderer-d9c8351a.js.map +0 -1
  141. package/dist/MermaidRenderer-dc0ac92e.js +0 -170
  142. package/dist/MermaidRenderer-dc0ac92e.js.map +0 -1
  143. package/dist/MermaidRenderer-e549ab85.js +0 -172
  144. package/dist/MermaidRenderer-e549ab85.js.map +0 -1
  145. package/dist/MermaidRenderer-e5d81a6f.js +0 -172
  146. package/dist/MermaidRenderer-e5d81a6f.js.map +0 -1
  147. package/dist/MermaidRenderer-e82f36e4.js +0 -172
  148. package/dist/MermaidRenderer-e82f36e4.js.map +0 -1
  149. package/dist/MermaidRenderer-f04366c1.js +0 -170
  150. package/dist/MermaidRenderer-f04366c1.js.map +0 -1
  151. package/dist/MermaidRenderer-f6473da3.js +0 -170
  152. package/dist/MermaidRenderer-f6473da3.js.map +0 -1
  153. package/dist/MermaidRenderer-f82d0d11.js +0 -170
  154. package/dist/MermaidRenderer-f82d0d11.js.map +0 -1
  155. package/dist/index-02f4473f.js +0 -1313
  156. package/dist/index-02f4473f.js.map +0 -1
  157. package/dist/index-172582eb.js +0 -1294
  158. package/dist/index-172582eb.js.map +0 -1
  159. package/dist/index-1d051ba8.js.map +0 -1
  160. package/dist/index-283b43ef.js.map +0 -1
  161. package/dist/index-2d979ad5.js +0 -1314
  162. package/dist/index-2d979ad5.js.map +0 -1
  163. package/dist/index-349401d2.js +0 -1288
  164. package/dist/index-349401d2.js.map +0 -1
  165. package/dist/index-398258c5.js +0 -1314
  166. package/dist/index-398258c5.js.map +0 -1
  167. package/dist/index-3cf82be4.js +0 -1287
  168. package/dist/index-3cf82be4.js.map +0 -1
  169. package/dist/index-3de28f18.js.map +0 -1
  170. package/dist/index-4592abf8.js.map +0 -1
  171. package/dist/index-4edeb553.js +0 -1313
  172. package/dist/index-4edeb553.js.map +0 -1
  173. package/dist/index-534d3bce.js +0 -1312
  174. package/dist/index-534d3bce.js.map +0 -1
  175. package/dist/index-6ceb7256.js +0 -1287
  176. package/dist/index-6ceb7256.js.map +0 -1
  177. package/dist/index-7e8dc866.js.map +0 -1
  178. package/dist/index-896de550.js +0 -1313
  179. package/dist/index-896de550.js.map +0 -1
  180. package/dist/index-8dbf398a.js +0 -1313
  181. package/dist/index-8dbf398a.js.map +0 -1
  182. package/dist/index-922bbd30.js.map +0 -1
  183. package/dist/index-a5a2c748.js +0 -1288
  184. package/dist/index-a5a2c748.js.map +0 -1
  185. package/dist/index-abed2ed7.js +0 -1286
  186. package/dist/index-abed2ed7.js.map +0 -1
  187. package/dist/index-ae31bd04.js.map +0 -1
  188. package/dist/index-b0cab34f.js +0 -1287
  189. package/dist/index-b0cab34f.js.map +0 -1
  190. package/dist/index-c0acef6b.js.map +0 -1
  191. package/dist/index-c6ab333d.js.map +0 -1
  192. package/dist/index-d4f12a68.js +0 -1287
  193. package/dist/index-d4f12a68.js.map +0 -1
  194. package/dist/index-e07ca144.js +0 -1320
  195. package/dist/index-e07ca144.js.map +0 -1
  196. package/dist/index-fdaa9757.js.map +0 -1
@@ -0,0 +1,1476 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var runtime = require('react/jsx-runtime');
5
+ var RemarkMath = require('remark-math');
6
+ var RemarkBreaks = require('remark-breaks');
7
+ var RemarkGfm = require('remark-gfm');
8
+ var mdx = require('@mdx-js/mdx');
9
+ var RehypeKatex = require('rehype-katex');
10
+ var RehypeHighlight = require('rehype-highlight');
11
+
12
+ function _interopNamespaceDefault(e) {
13
+ var n = Object.create(null);
14
+ if (e) {
15
+ Object.keys(e).forEach(function (k) {
16
+ if (k !== 'default') {
17
+ var d = Object.getOwnPropertyDescriptor(e, k);
18
+ Object.defineProperty(n, k, d.get ? d : {
19
+ enumerable: true,
20
+ get: function () { return e[k]; }
21
+ });
22
+ }
23
+ });
24
+ }
25
+ n.default = e;
26
+ return Object.freeze(n);
27
+ }
28
+
29
+ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
30
+ var runtime__namespace = /*#__PURE__*/_interopNamespaceDefault(runtime);
31
+
32
+ var MDXStreamingParser = /** @class */function () {
33
+ function MDXStreamingParser(components) {
34
+ // 将组件名称存储在Set中,而不是整个组件对象
35
+ this.registeredComponents = new Set(components.map(function (c) {
36
+ return c.name;
37
+ }));
38
+ this.messages = new Map();
39
+ }
40
+ // 检查组件是否已注册
41
+ MDXStreamingParser.prototype.isComponentRegistered = function (name) {
42
+ return this.registeredComponents.has(name);
43
+ };
44
+ MDXStreamingParser.prototype.parse = function (messageId, input) {
45
+ var state = {
46
+ position: 0,
47
+ stack: [],
48
+ buffer: ''
49
+ };
50
+ var result = [];
51
+ var i = state.position;
52
+ while (i < input.length) {
53
+ var char = input[i];
54
+ if (char === '<') {
55
+ // Handle closing tags
56
+ if (input[i + 1] === '/') {
57
+ var closeTagEnd = input.indexOf('>', i);
58
+ if (closeTagEnd === -1) {
59
+ state.buffer += input.slice(i);
60
+ break;
61
+ }
62
+ var tagName = input.slice(i + 2, closeTagEnd);
63
+ // 检查组件是否已注册
64
+ var isRegistered = this.isComponentRegistered(tagName);
65
+ // 如果组件未注册,则作为文本处理
66
+ if (!isRegistered) {
67
+ state.buffer += input.slice(i, closeTagEnd + 1);
68
+ i = closeTagEnd + 1;
69
+ continue;
70
+ }
71
+ if (/^[A-Z][A-Za-z0-9]*$/.test(tagName)) {
72
+ // Handle text content in the buffer
73
+ var trimmedContent = state.buffer.trim();
74
+ if (trimmedContent && state.stack.length > 0) {
75
+ var currentComponent = state.stack[state.stack.length - 1];
76
+ if (!currentComponent.children) {
77
+ currentComponent.children = [];
78
+ }
79
+ if (typeof currentComponent.children === 'string') {
80
+ currentComponent.children = [{
81
+ type: "text",
82
+ value: currentComponent.children
83
+ }];
84
+ }
85
+ currentComponent.children.push({
86
+ type: "text",
87
+ value: trimmedContent
88
+ });
89
+ }
90
+ state.buffer = '';
91
+ state.stack.pop();
92
+ i = closeTagEnd + 1;
93
+ continue;
94
+ }
95
+ }
96
+ // Handle opening tags
97
+ var tagMatch = input.slice(i).match(/^<([A-Z][A-Za-z0-9]*)/);
98
+ if (tagMatch) {
99
+ // Handle accumulated text before the tag
100
+ var componentName = tagMatch[1];
101
+ // 检查组件是否已注册
102
+ var isRegistered = this.isComponentRegistered(componentName);
103
+ // 如果组件未注册,将整个标签作为文本处理
104
+ if (!isRegistered) {
105
+ state.buffer += input[i];
106
+ i++;
107
+ continue;
108
+ }
109
+ var trimmedText = state.buffer.trim();
110
+ if (trimmedText && state.stack.length === 0) {
111
+ result.push({
112
+ type: "text",
113
+ value: trimmedText
114
+ });
115
+ } else if (trimmedText && state.stack.length > 0) {
116
+ var currentComponent = state.stack[state.stack.length - 1];
117
+ if (!currentComponent.children) {
118
+ currentComponent.children = [];
119
+ }
120
+ if (typeof currentComponent.children === 'string') {
121
+ currentComponent.children = [{
122
+ type: "text",
123
+ value: currentComponent.children
124
+ }];
125
+ }
126
+ currentComponent.children.push({
127
+ type: "text",
128
+ value: trimmedText
129
+ });
130
+ }
131
+ state.buffer = '';
132
+ // 动态解析标签形式,不再依赖预先注册的 selfClosing 属性
133
+ var _a = this.parseComponentTag(input.slice(i)),
134
+ props = _a.props,
135
+ endIndex = _a.endIndex,
136
+ selfClosing = _a.selfClosing;
137
+ var component = {
138
+ type: "component",
139
+ value: componentName,
140
+ props: props,
141
+ selfClosing: selfClosing // 使用实际解析出的标签形式
142
+ };
143
+ if (!selfClosing) {
144
+ state.stack.push(component);
145
+ if (state.stack.length === 1) {
146
+ result.push(component);
147
+ } else {
148
+ var parent_1 = state.stack[state.stack.length - 2];
149
+ if (!parent_1.children || typeof parent_1.children === 'string') {
150
+ parent_1.children = [];
151
+ }
152
+ parent_1.children.push(component);
153
+ }
154
+ } else {
155
+ if (state.stack.length === 0) {
156
+ result.push(component);
157
+ } else {
158
+ var parent_2 = state.stack[state.stack.length - 1];
159
+ if (!parent_2.children || typeof parent_2.children === 'string') {
160
+ parent_2.children = [];
161
+ }
162
+ parent_2.children.push(component);
163
+ }
164
+ }
165
+ i += endIndex;
166
+ char = input[i];
167
+ continue;
168
+ }
169
+ }
170
+ state.buffer += char;
171
+ i++;
172
+ }
173
+ // Handle any remaining text in the buffer
174
+ var finalText = state.buffer.trim();
175
+ if (finalText && state.stack.length === 0) {
176
+ if (finalText === '<') {
177
+ result.push({
178
+ type: "text",
179
+ value: ''
180
+ });
181
+ } else {
182
+ result.push({
183
+ type: "text",
184
+ value: finalText
185
+ });
186
+ }
187
+ } else if (finalText && state.stack.length > 0) {
188
+ var currentComponent = state.stack[state.stack.length - 1];
189
+ if (!currentComponent.children) {
190
+ currentComponent.children = [];
191
+ }
192
+ if (typeof currentComponent.children === 'string') {
193
+ currentComponent.children = [{
194
+ type: "text",
195
+ value: currentComponent.children
196
+ }];
197
+ }
198
+ currentComponent.children.push({
199
+ type: "text",
200
+ value: finalText
201
+ });
202
+ }
203
+ state.position = i;
204
+ return result;
205
+ };
206
+ MDXStreamingParser.prototype.findComponentClose = function (input, startIndex) {
207
+ var depth = 1;
208
+ var i = startIndex;
209
+ var openclose = false; // 内嵌开闭标签要成对
210
+ while (i < input.length) {
211
+ if (input[i] === '/' && input[i + 1] === '>') {
212
+ depth--;
213
+ if (depth === 0) return i + 2;
214
+ i += 2;
215
+ } else if (input[i] === '<') {
216
+ openclose = true;
217
+ depth++;
218
+ i++;
219
+ } else if (input[i] === '>') {
220
+ if (openclose) {
221
+ openclose = false;
222
+ depth--;
223
+ }
224
+ if (depth === 0) return i + 1;
225
+ i++;
226
+ } else {
227
+ i++;
228
+ }
229
+ }
230
+ return input.length;
231
+ };
232
+ MDXStreamingParser.prototype.parseComponentTag = function (input) {
233
+ var props = {};
234
+ var i = 0;
235
+ // 跳过组件名
236
+ while (i < input.length && input[i] !== ' ' && input[i] !== '>') i++;
237
+ // 使用 parsePropsCommon 方法解析属性,该方法会返回标签形式信息
238
+ var _a = this.parsePropsCommon(input),
239
+ parsedProps = _a.props,
240
+ endIndex = _a.endIndex,
241
+ selfClosing = _a.selfClosing;
242
+ Object.assign(props, parsedProps);
243
+ return {
244
+ props: props,
245
+ endIndex: endIndex,
246
+ selfClosing: selfClosing
247
+ };
248
+ };
249
+ MDXStreamingParser.prototype.parsePropsCommon = function (input) {
250
+ var props = {};
251
+ var i = 0;
252
+ var inQuote = false;
253
+ var quoteChar = '';
254
+ var bracketCount = 0;
255
+ var selfClosing = false;
256
+ // 跳过组件名
257
+ while (i < input.length && input[i] !== ' ' && input[i] !== '>') i++;
258
+ while (i < input.length) {
259
+ var char = input[i];
260
+ if (char === '"' || char === "'") {
261
+ if (!inQuote) {
262
+ inQuote = true;
263
+ quoteChar = char;
264
+ } else if (char === quoteChar && bracketCount === 0) {
265
+ inQuote = false;
266
+ }
267
+ } else if (char === '{' && !inQuote) {
268
+ bracketCount++;
269
+ } else if (char === '}' && !inQuote) {
270
+ bracketCount--;
271
+ } else if (char === '/' && input[i + 1] === '>' && !inQuote && bracketCount === 0) {
272
+ selfClosing = true;
273
+ return {
274
+ props: props,
275
+ endIndex: i + 2,
276
+ selfClosing: selfClosing
277
+ };
278
+ } else if (char === '>' && !inQuote && bracketCount === 0) {
279
+ return {
280
+ props: props,
281
+ endIndex: i + 1,
282
+ selfClosing: selfClosing
283
+ };
284
+ }
285
+ if (char === '=' && !inQuote && bracketCount === 0) {
286
+ var propName = '';
287
+ var j = i - 1;
288
+ while (j >= 0 && /[\w-]/.test(input[j])) {
289
+ propName = input[j] + propName;
290
+ j--;
291
+ }
292
+ var value = '';
293
+ j = i + 1;
294
+ if (input[j] === '{') {
295
+ // 处理 JSON 值
296
+ var startBracket = j;
297
+ bracketCount = 1;
298
+ j++;
299
+ while (j < input.length && bracketCount > 0) {
300
+ if (input[j] === '{') bracketCount++;
301
+ if (input[j] === '}') bracketCount--;
302
+ j++;
303
+ }
304
+ value = input.slice(startBracket + 1, j - 1);
305
+ try {
306
+ // 处理属性值中的模板字符串
307
+ value = value.replace(/`([^`]*)`/g, function (match, p1) {
308
+ return JSON.stringify(p1);
309
+ });
310
+ // 处理可能的对象字面量
311
+ if (value.trim().startsWith('{')) {
312
+ props[propName] = JSON.parse(value);
313
+ } else {
314
+ // 处理其他 JSON 值
315
+ try {
316
+ props[propName] = JSON.parse(value);
317
+ } catch (_a) {
318
+ // 如果不是有效的 JSON,保持原值
319
+ props[propName] = value;
320
+ }
321
+ }
322
+ } catch (e) {
323
+ console.warn("Failed to parse prop value for ".concat(propName, ":"), value);
324
+ props[propName] = value;
325
+ }
326
+ i = j;
327
+ continue;
328
+ } else if (input[j] === '"' || input[j] === "'") {
329
+ // 处理字符串值
330
+ var quote = input[j];
331
+ j++;
332
+ while (j < input.length && input[j] !== quote) {
333
+ value += input[j];
334
+ j++;
335
+ }
336
+ props[propName] = value;
337
+ i = j + 1;
338
+ continue;
339
+ }
340
+ }
341
+ i++;
342
+ }
343
+ return {
344
+ props: props,
345
+ endIndex: i,
346
+ selfClosing: selfClosing
347
+ };
348
+ };
349
+ MDXStreamingParser.prototype.parsePropsSelfClosing = function (content) {
350
+ var props = {};
351
+ // 先找到当前标签的结束位置
352
+ var endIndex = content.indexOf('/>');
353
+ if (endIndex === -1) return props;
354
+ // 只处理当前标签内的内容
355
+ var tagContent = content.slice(0, endIndex);
356
+ // 使用更精确的正则匹配属性
357
+ var propRegex = /(\w+)=(?:"([^"]*)"|'([^']*)'|{([^}]*)})/g;
358
+ var match;
359
+ while ((match = propRegex.exec(tagContent)) !== null) {
360
+ var propName = match[1];
361
+ var value = void 0;
362
+ if (match[2] !== undefined) {
363
+ // 处理双引号值
364
+ value = match[2];
365
+ } else if (match[3] !== undefined) {
366
+ // 处理单引号值
367
+ value = match[3];
368
+ } else if (match[4] !== undefined) {
369
+ // 处理花括号值
370
+ try {
371
+ value = JSON.parse(match[4]);
372
+ } catch (e) {
373
+ value = match[4]; // 解析失败保留原始值
374
+ }
375
+ }
376
+ props[propName] = value;
377
+ }
378
+ return props;
379
+ };
380
+ MDXStreamingParser.prototype.reset = function () {
381
+ this.messages.clear();
382
+ };
383
+ return MDXStreamingParser;
384
+ }();
385
+
386
+ /******************************************************************************
387
+ Copyright (c) Microsoft Corporation.
388
+
389
+ Permission to use, copy, modify, and/or distribute this software for any
390
+ purpose with or without fee is hereby granted.
391
+
392
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
393
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
394
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
395
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
396
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
397
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
398
+ PERFORMANCE OF THIS SOFTWARE.
399
+ ***************************************************************************** */
400
+ /* global Reflect, Promise, SuppressedError, Symbol, Iterator */
401
+
402
+ var extendStatics = function(d, b) {
403
+ extendStatics = Object.setPrototypeOf ||
404
+ ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
405
+ function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
406
+ return extendStatics(d, b);
407
+ };
408
+
409
+ function __extends(d, b) {
410
+ if (typeof b !== "function" && b !== null)
411
+ throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
412
+ extendStatics(d, b);
413
+ function __() { this.constructor = d; }
414
+ d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
415
+ }
416
+
417
+ var __assign = function() {
418
+ __assign = Object.assign || function __assign(t) {
419
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
420
+ s = arguments[i];
421
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
422
+ }
423
+ return t;
424
+ };
425
+ return __assign.apply(this, arguments);
426
+ };
427
+
428
+ function __rest(s, e) {
429
+ var t = {};
430
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
431
+ t[p] = s[p];
432
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
433
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
434
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
435
+ t[p[i]] = s[p[i]];
436
+ }
437
+ return t;
438
+ }
439
+
440
+ function __awaiter(thisArg, _arguments, P, generator) {
441
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
442
+ return new (P || (P = Promise))(function (resolve, reject) {
443
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
444
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
445
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
446
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
447
+ });
448
+ }
449
+
450
+ function __generator(thisArg, body) {
451
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
452
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
453
+ function verb(n) { return function (v) { return step([n, v]); }; }
454
+ function step(op) {
455
+ if (f) throw new TypeError("Generator is already executing.");
456
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
457
+ 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;
458
+ if (y = 0, t) op = [op[0] & 2, t.value];
459
+ switch (op[0]) {
460
+ case 0: case 1: t = op; break;
461
+ case 4: _.label++; return { value: op[1], done: false };
462
+ case 5: _.label++; y = op[1]; op = [0]; continue;
463
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
464
+ default:
465
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
466
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
467
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
468
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
469
+ if (t[2]) _.ops.pop();
470
+ _.trys.pop(); continue;
471
+ }
472
+ op = body.call(thisArg, _);
473
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
474
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
475
+ }
476
+ }
477
+
478
+ function __read(o, n) {
479
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
480
+ if (!m) return o;
481
+ var i = m.call(o), r, ar = [], e;
482
+ try {
483
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
484
+ }
485
+ catch (error) { e = { error: error }; }
486
+ finally {
487
+ try {
488
+ if (r && !r.done && (m = i["return"])) m.call(i);
489
+ }
490
+ finally { if (e) throw e.error; }
491
+ }
492
+ return ar;
493
+ }
494
+
495
+ function __spreadArray(to, from, pack) {
496
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
497
+ if (ar || !(i in from)) {
498
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
499
+ ar[i] = from[i];
500
+ }
501
+ }
502
+ return to.concat(ar || Array.prototype.slice.call(from));
503
+ }
504
+
505
+ typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
506
+ var e = new Error(message);
507
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
508
+ };
509
+
510
+ var CodeHighlight = function (_a) {
511
+ var textContent = _a.textContent,
512
+ _b = _a.language,
513
+ language = _b === void 0 ? "txt" : _b,
514
+ darkMode = _a.darkMode;
515
+ var _c = __read(React.useState(false), 2),
516
+ showCopy = _c[0],
517
+ setShowCopy = _c[1];
518
+ var copyToClipboard = function (text) {
519
+ return __awaiter(void 0, void 0, void 0, function () {
520
+ var textarea;
521
+ return __generator(this, function (_a) {
522
+ switch (_a.label) {
523
+ case 0:
524
+ _a.trys.push([0, 2,, 3]);
525
+ return [4 /*yield*/, navigator.clipboard.writeText(text)];
526
+ case 1:
527
+ _a.sent();
528
+ // 简单的复制成功提示
529
+ alert('代码已复制到剪贴板');
530
+ return [3 /*break*/, 3];
531
+ case 2:
532
+ _a.sent();
533
+ textarea = document.createElement("textarea");
534
+ textarea.value = text;
535
+ document.body.appendChild(textarea);
536
+ textarea.select();
537
+ try {
538
+ document.execCommand("copy");
539
+ alert('代码已复制到剪贴板');
540
+ } catch (error) {
541
+ console.error("Fallback copy failed", error);
542
+ }
543
+ document.body.removeChild(textarea);
544
+ return [3 /*break*/, 3];
545
+ case 3:
546
+ return [2 /*return*/];
547
+ }
548
+ });
549
+ });
550
+ };
551
+ // 标准化语言名称,增强对 mermaid 语言的识别
552
+ var normalizedLanguage = language.toLowerCase();
553
+ // 检查是否为 mermaid 语言的变体
554
+ if (normalizedLanguage.includes('mermaid')) {
555
+ normalizedLanguage = "mermaid";
556
+ }
557
+ if (language === "mermaid") {
558
+ // 动态导入 MermaidRenderer 组件
559
+ var MermaidRenderer = /*#__PURE__*/React.lazy(function () {
560
+ return Promise.resolve().then(function () { return require('./MermaidRenderer-b23c2eec.js'); }).catch(function () {
561
+ return {
562
+ default: function () {
563
+ return /*#__PURE__*/runtime.jsx("div", {});
564
+ }
565
+ };
566
+ });
567
+ });
568
+ return /*#__PURE__*/runtime.jsx(React.Suspense, {
569
+ fallback: /*#__PURE__*/runtime.jsx("div", {}),
570
+ children: /*#__PURE__*/runtime.jsx(MermaidRenderer, {
571
+ chart: String(textContent)
572
+ }, Date.now())
573
+ });
574
+ }
575
+ // 简单的代码高亮样式
576
+ var codeStyle = {
577
+ backgroundColor: darkMode ? '#2d2d2d' : '#f5f5f5',
578
+ color: darkMode ? '#f8f8f2' : '#333',
579
+ padding: '12px',
580
+ borderRadius: '4px',
581
+ fontFamily: 'monospace',
582
+ fontSize: '14px',
583
+ lineHeight: '1.4',
584
+ overflowX: 'auto',
585
+ border: "1px solid ".concat(darkMode ? '#555' : '#ddd')
586
+ };
587
+ return /*#__PURE__*/runtime.jsxs("div", {
588
+ style: {
589
+ position: "relative"
590
+ },
591
+ children: [/*#__PURE__*/runtime.jsx("button", {
592
+ style: {
593
+ position: "absolute",
594
+ right: "10px",
595
+ top: "5px",
596
+ zIndex: 1,
597
+ background: darkMode ? "#555" : "#333",
598
+ color: "#fff",
599
+ border: "none",
600
+ padding: "4px 8px",
601
+ fontSize: "12px",
602
+ cursor: "pointer",
603
+ borderRadius: "4px"
604
+ },
605
+ onClick: function (e) {
606
+ e.preventDefault();
607
+ copyToClipboard(String(textContent));
608
+ },
609
+ onMouseEnter: function () {
610
+ return setShowCopy(true);
611
+ },
612
+ onMouseLeave: function () {
613
+ return setShowCopy(false);
614
+ },
615
+ children: showCopy ? "点击复制" : "复制"
616
+ }), /*#__PURE__*/runtime.jsx("pre", {
617
+ style: codeStyle,
618
+ children: /*#__PURE__*/runtime.jsx("code", {
619
+ children: String(textContent).replace(/\n$/, "")
620
+ })
621
+ })]
622
+ });
623
+ };
624
+
625
+ var Think = function (_a) {
626
+ var content = _a.content,
627
+ children = _a.children;
628
+ var _b = __read(React.useState(true), 2),
629
+ isExpanded = _b[0],
630
+ setIsExpanded = _b[1];
631
+ var thinkContent = content || children;
632
+ if (!thinkContent) {
633
+ return /*#__PURE__*/runtime.jsx("div", {});
634
+ }
635
+ return /*#__PURE__*/runtime.jsxs("div", {
636
+ className: "funq-think border rounded-lg p-3 mb-3 bg-blue-50 border-blue-200",
637
+ children: [/*#__PURE__*/runtime.jsxs("div", {
638
+ className: "flex items-center justify-between cursor-pointer",
639
+ onClick: function () {
640
+ return setIsExpanded(!isExpanded);
641
+ },
642
+ children: [/*#__PURE__*/runtime.jsxs("div", {
643
+ className: "flex items-center gap-2",
644
+ children: [/*#__PURE__*/runtime.jsx("div", {
645
+ className: "w-4 h-4 rounded-full bg-blue-500 flex items-center justify-center",
646
+ children: /*#__PURE__*/runtime.jsx("svg", {
647
+ className: "w-3 h-3 text-white",
648
+ fill: "none",
649
+ stroke: "currentColor",
650
+ viewBox: "0 0 24 24",
651
+ children: /*#__PURE__*/runtime.jsx("path", {
652
+ strokeLinecap: "round",
653
+ strokeLinejoin: "round",
654
+ strokeWidth: "2",
655
+ d: "M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z"
656
+ })
657
+ })
658
+ }), /*#__PURE__*/runtime.jsx("span", {
659
+ className: "font-medium text-sm",
660
+ children: "AI \u601D\u8003\u8FC7\u7A0B"
661
+ })]
662
+ }), /*#__PURE__*/runtime.jsx("div", {
663
+ className: "w-4 h-4 text-muted-foreground",
664
+ children: isExpanded ? /*#__PURE__*/runtime.jsx("svg", {
665
+ fill: "none",
666
+ stroke: "currentColor",
667
+ viewBox: "0 0 24 24",
668
+ children: /*#__PURE__*/runtime.jsx("path", {
669
+ strokeLinecap: "round",
670
+ strokeLinejoin: "round",
671
+ strokeWidth: "2",
672
+ d: "M5 15l7-7 7 7"
673
+ })
674
+ }) : /*#__PURE__*/runtime.jsx("svg", {
675
+ fill: "none",
676
+ stroke: "currentColor",
677
+ viewBox: "0 0 24 24",
678
+ children: /*#__PURE__*/runtime.jsx("path", {
679
+ strokeLinecap: "round",
680
+ strokeLinejoin: "round",
681
+ strokeWidth: "2",
682
+ d: "M19 9l-7 7-7-7"
683
+ })
684
+ })
685
+ })]
686
+ }), isExpanded && /*#__PURE__*/runtime.jsx("div", {
687
+ className: "mt-3 pt-3 border-t border-blue-200",
688
+ children: /*#__PURE__*/runtime.jsx("blockquote", {
689
+ className: "text-sm text-blue-800 bg-blue-100 p-2 rounded",
690
+ children: typeof thinkContent === 'string' ? decodeURIComponent(thinkContent) : thinkContent
691
+ })
692
+ })]
693
+ });
694
+ };
695
+
696
+ var ToolCall = function (_a) {
697
+ var toolCall = _a.toolCall,
698
+ children = _a.children;
699
+ var _b = __read(React.useState(false), 2),
700
+ isExpanded = _b[0],
701
+ setIsExpanded = _b[1];
702
+ var getStateIcon = function () {
703
+ switch (toolCall.state) {
704
+ case 'loading':
705
+ return /*#__PURE__*/runtime.jsx("div", {
706
+ className: "w-4 h-4 animate-spin border-2 border-blue-500 border-t-transparent rounded-full"
707
+ });
708
+ case 'done':
709
+ return /*#__PURE__*/runtime.jsx("div", {
710
+ className: "w-4 h-4 rounded-full bg-green-500 flex items-center justify-center",
711
+ children: /*#__PURE__*/runtime.jsx("svg", {
712
+ className: "w-3 h-3 text-white",
713
+ fill: "none",
714
+ stroke: "currentColor",
715
+ viewBox: "0 0 24 24",
716
+ children: /*#__PURE__*/runtime.jsx("path", {
717
+ strokeLinecap: "round",
718
+ strokeLinejoin: "round",
719
+ strokeWidth: "2",
720
+ d: "M5 13l4 4L19 7"
721
+ })
722
+ })
723
+ });
724
+ case 'error':
725
+ return /*#__PURE__*/runtime.jsx("div", {
726
+ className: "w-4 h-4 rounded-full bg-red-500 flex items-center justify-center",
727
+ children: /*#__PURE__*/runtime.jsx("svg", {
728
+ className: "w-3 h-3 text-white",
729
+ fill: "none",
730
+ stroke: "currentColor",
731
+ viewBox: "0 0 24 24",
732
+ children: /*#__PURE__*/runtime.jsx("path", {
733
+ strokeLinecap: "round",
734
+ strokeLinejoin: "round",
735
+ strokeWidth: "2",
736
+ d: "M6 18L18 6M6 6l12 12"
737
+ })
738
+ })
739
+ });
740
+ default:
741
+ return /*#__PURE__*/runtime.jsx("div", {
742
+ className: "w-4 h-4 animate-spin border-2 border-blue-500 border-t-transparent rounded-full"
743
+ });
744
+ }
745
+ };
746
+ var getStateText = function () {
747
+ switch (toolCall.state) {
748
+ case 'loading':
749
+ return '执行中...';
750
+ case 'done':
751
+ return '执行完成';
752
+ case 'error':
753
+ return '执行出错';
754
+ default:
755
+ return '执行中...';
756
+ }
757
+ };
758
+ var getStateClass = function () {
759
+ switch (toolCall.state) {
760
+ case 'loading':
761
+ return 'bg-blue-50 border-blue-200';
762
+ case 'done':
763
+ return 'bg-green-50 border-green-200';
764
+ case 'error':
765
+ return 'bg-red-50 border-red-200';
766
+ default:
767
+ return 'bg-blue-50 border-blue-200';
768
+ }
769
+ };
770
+ // 解析工具调用结果,如果是JSON字符串则格式化显示
771
+ var formatResult = function (result) {
772
+ if (!result) return result;
773
+ try {
774
+ // 尝试解析为JSON
775
+ var parsed = JSON.parse(result);
776
+ return JSON.stringify(parsed, null, 2);
777
+ } catch (e) {
778
+ // 如果不是有效的JSON,直接返回原始字符串
779
+ return result;
780
+ }
781
+ };
782
+ return /*#__PURE__*/runtime.jsxs("div", {
783
+ className: "funq-tool-call border rounded-lg p-3 mb-3 ".concat(getStateClass()),
784
+ children: [/*#__PURE__*/runtime.jsxs("div", {
785
+ className: "flex items-center justify-between cursor-pointer",
786
+ onClick: function () {
787
+ return setIsExpanded(!isExpanded);
788
+ },
789
+ children: [/*#__PURE__*/runtime.jsxs("div", {
790
+ className: "flex items-center gap-2",
791
+ children: [getStateIcon(), /*#__PURE__*/runtime.jsxs("span", {
792
+ className: "font-medium text-sm",
793
+ children: ["\u5DE5\u5177\u8C03\u7528: ", toolCall.toolCallName]
794
+ }), /*#__PURE__*/runtime.jsx("span", {
795
+ className: "text-xs text-muted-foreground",
796
+ children: getStateText()
797
+ })]
798
+ }), /*#__PURE__*/runtime.jsxs("div", {
799
+ className: "flex items-center gap-2",
800
+ children: [toolCall.startTime && /*#__PURE__*/runtime.jsxs("span", {
801
+ className: "text-xs text-muted-foreground",
802
+ children: ["\u5F00\u59CB: ", new Date(toolCall.startTime).toLocaleTimeString()]
803
+ }), toolCall.endTime && toolCall.executionTime && /*#__PURE__*/runtime.jsxs("span", {
804
+ className: "text-xs text-muted-foreground",
805
+ children: ["\u8017\u65F6: ", toolCall.executionTime, "ms"]
806
+ }), /*#__PURE__*/runtime.jsx("div", {
807
+ className: "w-4 h-4 text-muted-foreground",
808
+ children: isExpanded ? /*#__PURE__*/runtime.jsx("svg", {
809
+ fill: "none",
810
+ stroke: "currentColor",
811
+ viewBox: "0 0 24 24",
812
+ children: /*#__PURE__*/runtime.jsx("path", {
813
+ strokeLinecap: "round",
814
+ strokeLinejoin: "round",
815
+ strokeWidth: "2",
816
+ d: "M5 15l7-7 7 7"
817
+ })
818
+ }) : /*#__PURE__*/runtime.jsx("svg", {
819
+ fill: "none",
820
+ stroke: "currentColor",
821
+ viewBox: "0 0 24 24",
822
+ children: /*#__PURE__*/runtime.jsx("path", {
823
+ strokeLinecap: "round",
824
+ strokeLinejoin: "round",
825
+ strokeWidth: "2",
826
+ d: "M19 9l-7 7-7-7"
827
+ })
828
+ })
829
+ })]
830
+ })]
831
+ }), isExpanded && /*#__PURE__*/runtime.jsxs("div", {
832
+ className: "mt-3 pt-3 border-t border-border",
833
+ children: [toolCall.toolCallArgs && /*#__PURE__*/runtime.jsxs("div", {
834
+ className: "mb-3",
835
+ children: [/*#__PURE__*/runtime.jsx("h4", {
836
+ className: "text-sm font-medium mb-1",
837
+ children: "\u53C2\u6570:"
838
+ }), /*#__PURE__*/runtime.jsx("pre", {
839
+ className: "text-xs bg-muted p-2 rounded overflow-x-auto break-words whitespace-pre-wrap",
840
+ children: toolCall.toolCallArgs
841
+ })]
842
+ }), (toolCall.delta || toolCall.state === 'error') && /*#__PURE__*/runtime.jsxs("div", {
843
+ children: [/*#__PURE__*/runtime.jsx("h4", {
844
+ className: "text-sm font-medium mb-1",
845
+ children: "\u7ED3\u679C:"
846
+ }), /*#__PURE__*/runtime.jsx("div", {
847
+ className: "text-sm p-2 rounded ".concat(toolCall.state === 'error' ? 'bg-red-100 text-red-800' : 'bg-muted'),
848
+ children: toolCall.state === 'error' ? /*#__PURE__*/runtime.jsx("pre", {
849
+ className: "whitespace-pre-wrap break-words overflow-x-auto",
850
+ children: formatResult(toolCall.delta) || '工具执行出错'
851
+ }) : /*#__PURE__*/runtime.jsx("pre", {
852
+ className: "whitespace-pre-wrap break-words overflow-x-auto",
853
+ children: formatResult(toolCall.delta)
854
+ })
855
+ })]
856
+ }), children && /*#__PURE__*/runtime.jsx("div", {
857
+ className: "mt-2",
858
+ children: children
859
+ })]
860
+ })]
861
+ });
862
+ };
863
+
864
+ var VideoComponent = function (_a) {
865
+ _a.node;
866
+ var props = __rest(_a, ["node"]);
867
+ var videoNode = {
868
+ props: {}
869
+ };
870
+ try {
871
+ props.children.map(function (item) {
872
+ if (item.props && item.type === 'source') {
873
+ videoNode = item;
874
+ }
875
+ });
876
+ } catch (e) {}
877
+ return /*#__PURE__*/runtime.jsxs("video", {
878
+ controls: true,
879
+ ...props,
880
+ children: [/*#__PURE__*/runtime.jsx("source", {
881
+ src: videoNode.props.src || '',
882
+ type: videoNode.props.type || 'video/mp4'
883
+ }), "\u4F60\u7684\u6D4F\u89C8\u5668\u4E0D\u652F\u6301video\u6807\u7B7E"]
884
+ });
885
+ };
886
+ // 音频组件
887
+ var AudioComponent = function (_a) {
888
+ _a.node;
889
+ var props = __rest(_a, ["node"]);
890
+ var audioNode = {
891
+ props: {}
892
+ };
893
+ try {
894
+ props.children.map(function (item) {
895
+ if (item.props && item.type === 'source') {
896
+ audioNode = item;
897
+ }
898
+ });
899
+ } catch (e) {
900
+ console.error('Error processing audio children:', e);
901
+ }
902
+ return /*#__PURE__*/runtime.jsxs("audio", {
903
+ controls: true,
904
+ ...props,
905
+ children: [/*#__PURE__*/runtime.jsx("source", {
906
+ src: audioNode.props.src || '',
907
+ type: audioNode.props.type || 'audio/mpeg'
908
+ }), "\u4F60\u7684\u6D4F\u89C8\u5668\u4E0D\u652F\u6301 audio \u6807\u7B7E"]
909
+ });
910
+ };
911
+ // 代码组件
912
+ var CodeComponent = function (props) {
913
+ var children = props.children,
914
+ className = props.className;
915
+ props.node;
916
+ var rest = __rest(props, ["children", "className", "node"]);
917
+ var match = /language-(\w+)/.exec(className || "");
918
+ String(children).replace(/\n$/, '');
919
+ var extractText = function (children) {
920
+ return React.Children.toArray(children).reduce(function (acc, child) {
921
+ if (typeof child === 'string') {
922
+ return acc + child;
923
+ } else if (/*#__PURE__*/React.isValidElement(child) && child.props && child.props.children) {
924
+ return acc + extractText(child.props.children);
925
+ }
926
+ return acc;
927
+ }, '');
928
+ };
929
+ var content = extractText(children);
930
+ // 增强语言检测逻辑,检查内容中是否包含mermaid特征
931
+ var language = match ? match[1] : "txt";
932
+ // 如果内容包含mermaid特征且语言未正确识别,则强制设置为mermaid
933
+ if (!match || match[1] !== "mermaid") {
934
+ var trimmedContent = content.trim();
935
+ if (trimmedContent.startsWith('graph') || trimmedContent.startsWith('flowchart') || trimmedContent.startsWith('sequenceDiagram') || trimmedContent.startsWith('gantt') || trimmedContent.startsWith('classDiagram') || trimmedContent.startsWith('stateDiagram') || trimmedContent.startsWith('pie') || trimmedContent.startsWith('erDiagram') || trimmedContent.startsWith('journey') || trimmedContent.startsWith('requirementDiagram') || trimmedContent.startsWith('gitGraph')) {
936
+ language = "mermaid";
937
+ }
938
+ }
939
+ return language !== "txt" ? /*#__PURE__*/runtime.jsx(CodeHighlight, {
940
+ ...rest,
941
+ language: language,
942
+ textContent: content,
943
+ children: content
944
+ }) : /*#__PURE__*/runtime.jsx("code", {
945
+ className: className,
946
+ ...props,
947
+ children: content
948
+ });
949
+ };
950
+ // 段落组件
951
+ var PComponent = function (pProps) {
952
+ return /*#__PURE__*/runtime.jsx("p", {
953
+ ...pProps,
954
+ dir: "auto"
955
+ });
956
+ };
957
+ // 链接组件
958
+ var AComponent = function (aProps) {
959
+ var _a;
960
+ var href = aProps.href || "";
961
+ var isInternal = /^\/#/i.test(href);
962
+ var target = isInternal ? "_self" : (_a = aProps.target) !== null && _a !== void 0 ? _a : "_blank";
963
+ // 增强链接样式,使其更加明显
964
+ var linkStyle = {
965
+ color: '#1a73e8',
966
+ fontWeight: '600',
967
+ borderBottom: '2px solid #1a73e8',
968
+ paddingBottom: '2px',
969
+ transition: 'all 0.2s ease'
970
+ };
971
+ // 鼠标悬停效果
972
+ var hoverStyle = {
973
+ color: '#0d47a1',
974
+ borderBottom: '2px solid #0d47a1',
975
+ backgroundColor: 'rgba(26, 115, 232, 0.1)'
976
+ };
977
+ // 合并原有属性和新样式
978
+ return /*#__PURE__*/runtime.jsx("a", {
979
+ ...aProps,
980
+ target: target,
981
+ style: __assign(__assign({}, linkStyle), aProps.style),
982
+ onMouseEnter: function (e) {
983
+ var target = e.target;
984
+ Object.assign(target.style, hoverStyle);
985
+ aProps.onMouseEnter && aProps.onMouseEnter(e);
986
+ },
987
+ onMouseLeave: function (e) {
988
+ var target = e.target;
989
+ Object.assign(target.style, linkStyle);
990
+ aProps.onMouseLeave && aProps.onMouseLeave(e);
991
+ }
992
+ });
993
+ };
994
+ // Pre 组件
995
+ var PreComponent = function (props) {
996
+ return /*#__PURE__*/runtime.jsx("div", {
997
+ ...props
998
+ });
999
+ };
1000
+ var BuiltInComponents = {
1001
+ _THINK: Think,
1002
+ _TOOL_CALL: ToolCall,
1003
+ pre: PreComponent,
1004
+ code: CodeComponent,
1005
+ p: PComponent,
1006
+ a: AComponent,
1007
+ video: VideoComponent,
1008
+ audio: AudioComponent
1009
+ };
1010
+
1011
+ var ErrorBoundary = /** @class */function (_super) {
1012
+ __extends(ErrorBoundary, _super);
1013
+ function ErrorBoundary(props) {
1014
+ var _this = _super.call(this, props) || this;
1015
+ _this.state = {
1016
+ hasError: false
1017
+ };
1018
+ return _this;
1019
+ }
1020
+ ErrorBoundary.getDerivedStateFromError = function () {
1021
+ return {
1022
+ hasError: true
1023
+ };
1024
+ };
1025
+ ErrorBoundary.prototype.componentDidCatch = function (error, errorInfo) {
1026
+ // 可以在这里记录错误信息
1027
+ };
1028
+ ErrorBoundary.prototype.render = function () {
1029
+ if (this.state.hasError) {
1030
+ return /*#__PURE__*/runtime.jsx("div", {
1031
+ children: this.props.content
1032
+ });
1033
+ }
1034
+ return this.props.children;
1035
+ };
1036
+ return ErrorBoundary;
1037
+ }(React.Component);
1038
+
1039
+ function MdxLayout(_a) {
1040
+ var children = _a.children;
1041
+ return /*#__PURE__*/runtime.jsx("div", {
1042
+ children: children
1043
+ });
1044
+ }
1045
+
1046
+ var THINK_BEGIN_TAG = '<think>';
1047
+ var THINK_END_TAG = '</think>';
1048
+ var CUSTOMER_THINK_COMPONENT_DISPLAY = '_THINK';
1049
+ var TOOLCALL_BEGIN_TAG = '<toolcall>';
1050
+ var TOOLCALL_END_TAG = '</toolcall>';
1051
+ var CUSTOMER_TOOLCALL_COMPONENT_DISPLAY = '_TOOLCALL';
1052
+ function fixMDXContent(content) {
1053
+ // 替换中文括号为英文括号
1054
+ return content.replace(/\\\[/g, '$$').replace(/\\\]/g, '$$')
1055
+ // 确保LaTeX公式正确转义
1056
+ .replace(/\\\(/g, '$').replace(/\\\)/g, '$');
1057
+ }
1058
+ function generateRandomName(length) {
1059
+ if (length === void 0) {
1060
+ length = 6;
1061
+ }
1062
+ var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
1063
+ var result = '';
1064
+ for (var i = 0; i < length; i++) {
1065
+ result += characters.charAt(Math.floor(Math.random() * characters.length));
1066
+ }
1067
+ return result;
1068
+ }
1069
+ function remarkLLMTagUpdate(content) {
1070
+ var thinkContent = '';
1071
+ var toolCallContent = '';
1072
+ var resultContent = '';
1073
+ // 处理 Think 标签
1074
+ var thinkBeginIndex = content.indexOf(THINK_BEGIN_TAG);
1075
+ var thinkEndIndex = content.lastIndexOf(THINK_END_TAG);
1076
+ if (thinkBeginIndex !== -1 && thinkEndIndex === -1) {
1077
+ // 有开始,无结束
1078
+ thinkContent = content.slice(THINK_BEGIN_TAG.length);
1079
+ thinkContent = "<".concat(CUSTOMER_THINK_COMPONENT_DISPLAY, " content=\"").concat(encodeURIComponent(thinkContent), "\" />");
1080
+ } else if (thinkBeginIndex !== -1 && thinkEndIndex !== -1) {
1081
+ // 有开始,有结束
1082
+ var anotherEndIndex = content.indexOf(THINK_END_TAG);
1083
+ if (anotherEndIndex !== thinkEndIndex) {
1084
+ thinkContent = content.slice(THINK_BEGIN_TAG.length, anotherEndIndex);
1085
+ resultContent = content.slice(thinkEndIndex + THINK_END_TAG.length);
1086
+ thinkContent = "<".concat(CUSTOMER_THINK_COMPONENT_DISPLAY, " content=\"").concat(encodeURIComponent(thinkContent), "\" />");
1087
+ } else {
1088
+ thinkContent = content.slice(THINK_BEGIN_TAG.length, thinkEndIndex);
1089
+ thinkContent = "<".concat(CUSTOMER_THINK_COMPONENT_DISPLAY, " content=\"").concat(encodeURIComponent(thinkContent), "\" />");
1090
+ resultContent = content.slice(thinkEndIndex + THINK_END_TAG.length);
1091
+ }
1092
+ } else if (thinkBeginIndex == -1) {
1093
+ resultContent = content;
1094
+ }
1095
+ // 处理 ToolCall 标签
1096
+ var toolCallBeginIndex = resultContent.indexOf(TOOLCALL_BEGIN_TAG);
1097
+ var toolCallEndIndex = resultContent.lastIndexOf(TOOLCALL_END_TAG);
1098
+ if (toolCallBeginIndex !== -1 && toolCallEndIndex === -1) {
1099
+ // 有开始,无结束
1100
+ // 提取工具调用信息
1101
+ var toolCallData = resultContent.slice(TOOL_CALL_BEGIN_TAG.length);
1102
+ try {
1103
+ var toolCallObj = JSON.parse(toolCallData);
1104
+ toolCallContent = "<".concat(CUSTOMER_TOOLCALL_COMPONENT_DISPLAY, " toolCall={").concat(JSON.stringify(toolCallObj).replace(/"/g, '&quot;'), "} />");
1105
+ resultContent = ''; // 清空剩余内容,因为工具调用是流式的
1106
+ } catch (e) {
1107
+ // 如果解析失败,将内容作为普通文本处理
1108
+ toolCallContent = "<".concat(CUSTOMER_TOOLCALL_COMPONENT_DISPLAY, " toolCall={").concat(JSON.stringify({
1109
+ toolCallName: 'Unknown',
1110
+ state: 'loading',
1111
+ delta: toolCallData
1112
+ }).replace(/"/g, '&quot;'), "} />");
1113
+ resultContent = '';
1114
+ }
1115
+ } else if (toolCallBeginIndex !== -1 && toolCallEndIndex !== -1) {
1116
+ // 有开始,有结束
1117
+ // 提取完整的工具调用信息
1118
+ var toolCallData = resultContent.slice(TOOL_CALL_BEGIN_TAG.length, toolCallEndIndex);
1119
+ var remainingContent = resultContent.slice(toolCallEndIndex + TOOL_CALL_END_TAG.length);
1120
+ try {
1121
+ var toolCallObj = JSON.parse(toolCallData);
1122
+ toolCallContent = "<".concat(CUSTOMER_TOOLCALL_COMPONENT_DISPLAY, " toolCall={").concat(JSON.stringify(toolCallObj).replace(/"/g, '&quot;'), "} />");
1123
+ } catch (e) {
1124
+ // 如果解析失败,将内容作为普通文本处理
1125
+ toolCallContent = "<".concat(CUSTOMER_TOOLCALL_COMPONENT_DISPLAY, " toolCall={").concat(JSON.stringify({
1126
+ toolCallName: 'Unknown',
1127
+ state: 'done',
1128
+ delta: toolCallData
1129
+ }).replace(/"/g, '&quot;'), "} />");
1130
+ }
1131
+ resultContent = remainingContent;
1132
+ }
1133
+ return {
1134
+ thinkContent: thinkContent,
1135
+ toolCallContent: toolCallContent,
1136
+ resultContent: resultContent
1137
+ };
1138
+ }
1139
+ /**
1140
+ * 转义流式内容中的特殊字符,防止MDX解析错误
1141
+ * @param content 需要转义的内容
1142
+ * @returns 转义后的内容
1143
+ */
1144
+ function escapeContentForStream(content) {
1145
+ if (typeof content !== 'string') return content;
1146
+ return content.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/'/g, '&#x27;').replace(/{/g, '&#123;').replace(/}/g, '&#125;');
1147
+ }
1148
+
1149
+ var renderTimer = null;
1150
+ // 辅助函数:格式化props
1151
+ function formatProps(props) {
1152
+ return Object.entries(props).map(function (_a) {
1153
+ var _b = __read(_a, 2),
1154
+ key = _b[0],
1155
+ value = _b[1];
1156
+ if (typeof value === 'string') {
1157
+ return "".concat(key, "=\"").concat(value, "\"");
1158
+ }
1159
+ try {
1160
+ value = JSON.stringify(value);
1161
+ } catch (e) {
1162
+ console.error('Error stringifying prop value:', e);
1163
+ }
1164
+ return "".concat(key, "={").concat(value, "}");
1165
+ }).join(' ');
1166
+ }
1167
+ function renderMdx(mdxContent, scope, registeredComponents) {
1168
+ return __awaiter(this, void 0, void 0, function () {
1169
+ var componentTagRegex, usedComponents, match, vf, XComponent;
1170
+ return __generator(this, function (_a) {
1171
+ switch (_a.label) {
1172
+ case 0:
1173
+ _a.trys.push([0, 3,, 4]);
1174
+ renderTimer && clearTimeout(renderTimer);
1175
+ componentTagRegex = /<([A-Z][a-zA-Z]*)\b/g;
1176
+ usedComponents = new Set();
1177
+ match = void 0;
1178
+ while ((match = componentTagRegex.exec(mdxContent)) !== null) {
1179
+ usedComponents.add(match[1]);
1180
+ }
1181
+ return [4 /*yield*/, mdx.compile(mdxContent, {
1182
+ outputFormat: "function-body",
1183
+ remarkPlugins: [[RemarkMath, {
1184
+ strict: true
1185
+ }], RemarkGfm, RemarkBreaks],
1186
+ rehypePlugins: [[RehypeKatex], [RehypeHighlight, {
1187
+ detect: false,
1188
+ ignoreMissing: true,
1189
+ plainText: ['mermaid'] // 将mermaid作为纯文本处理,避免被错误高亮
1190
+ }]]
1191
+ })];
1192
+ case 1:
1193
+ vf = _a.sent();
1194
+ return [4 /*yield*/, mdx.run(vf, __assign(__assign(__assign({}, runtime__namespace), scope), {
1195
+ Fragment: MdxLayout
1196
+ }))];
1197
+ case 2:
1198
+ XComponent = _a.sent().default;
1199
+ return [2 /*return*/, /*#__PURE__*/React__namespace.createElement(XComponent, {
1200
+ components: registeredComponents,
1201
+ scope: scope
1202
+ })];
1203
+ case 3:
1204
+ _a.sent();
1205
+ return [2 /*return*/, new Promise(function (resolve) {
1206
+ renderTimer = setTimeout(function () {
1207
+ resolve(/*#__PURE__*/React__namespace.createElement('div', {
1208
+ style: {
1209
+ backgroundColor: 'transparent'
1210
+ }
1211
+ }, mdxContent));
1212
+ clearTimeout(renderTimer); // 清理定时器
1213
+ }, 2000); // 1秒延迟
1214
+ })];
1215
+ case 4:
1216
+ return [2 /*return*/];
1217
+ }
1218
+ });
1219
+ });
1220
+ }
1221
+ // 递归解析组件的函数
1222
+ function parseComponentRecursively(allComponentHandlers, item, scope) {
1223
+ return __awaiter(this, void 0, void 0, function () {
1224
+ var componentHandler, componentString_1, parsedChildren, props, propsString, childrenContent_1, parsedChildren_1, componentString;
1225
+ return __generator(this, function (_a) {
1226
+ switch (_a.label) {
1227
+ case 0:
1228
+ if (item.type === 'text') {
1229
+ return [2 /*return*/, item.value];
1230
+ }
1231
+ if (!(item.type === 'component')) return [3 /*break*/, 8];
1232
+ componentHandler = allComponentHandlers.find(function (c) {
1233
+ return c.name === item.value;
1234
+ });
1235
+ if (!!componentHandler) return [3 /*break*/, 5];
1236
+ componentString_1 = "<".concat(item.value);
1237
+ if (item.props) {
1238
+ componentString_1 += ' ' + Object.entries(item.props).map(function (_a) {
1239
+ var _b = __read(_a, 2),
1240
+ key = _b[0],
1241
+ value = _b[1];
1242
+ if (typeof value === 'string') {
1243
+ return "".concat(key, "=\"").concat(value, "\"");
1244
+ }
1245
+ try {
1246
+ return "".concat(key, "={").concat(JSON.stringify(value), "}");
1247
+ } catch (e) {
1248
+ return "".concat(key, "=\"[object Object]\"");
1249
+ }
1250
+ }).join(' ');
1251
+ }
1252
+ if (!item.selfClosing) return [3 /*break*/, 1];
1253
+ componentString_1 += ' />';
1254
+ return [3 /*break*/, 4];
1255
+ case 1:
1256
+ componentString_1 += '>';
1257
+ if (!(item.children && Array.isArray(item.children))) return [3 /*break*/, 3];
1258
+ return [4 /*yield*/, Promise.all(item.children.map(function (child) {
1259
+ return parseComponentRecursively(allComponentHandlers, child, scope);
1260
+ }))];
1261
+ case 2:
1262
+ parsedChildren = _a.sent();
1263
+ componentString_1 += parsedChildren.join('');
1264
+ _a.label = 3;
1265
+ case 3:
1266
+ componentString_1 += "</".concat(item.value, ">");
1267
+ _a.label = 4;
1268
+ case 4:
1269
+ return [2 /*return*/, componentString_1];
1270
+ case 5:
1271
+ props = __assign(__assign({}, item.props), {
1272
+ key: generateRandomName()
1273
+ });
1274
+ propsString = formatProps(props);
1275
+ propsString += " scope={props.scope}";
1276
+ childrenContent_1 = '';
1277
+ if (!(item.children && Array.isArray(item.children))) return [3 /*break*/, 7];
1278
+ return [4 /*yield*/, Promise.all(item.children.map(function (child) {
1279
+ return parseComponentRecursively(allComponentHandlers, child, scope);
1280
+ }))];
1281
+ case 6:
1282
+ parsedChildren_1 = _a.sent();
1283
+ item.children.map(function (item, index) {
1284
+ if (item.type === 'text') {
1285
+ childrenContent_1 += escapeContentForStream(parsedChildren_1[index]); // encodeURIComponent(parsedChildren[index]);
1286
+ } else {
1287
+ childrenContent_1 += parsedChildren_1[index];
1288
+ }
1289
+ });
1290
+ _a.label = 7;
1291
+ case 7:
1292
+ // 调用组件的渲染钩子
1293
+ if (componentHandler.onRender) {
1294
+ componentHandler.onRender(item, scope);
1295
+ }
1296
+ componentString = componentHandler.selfClosing ? "<".concat(item.value, " ").concat(propsString, " />") : "\t\n<".concat(item.value, " ").concat(propsString, ">\n").concat(childrenContent_1, "\n</").concat(item.value, ">\t\n");
1297
+ return [2 /*return*/, componentString];
1298
+ case 8:
1299
+ return [2 /*return*/, null];
1300
+ }
1301
+ });
1302
+ });
1303
+ }
1304
+
1305
+ // 使用 WeakMap 作为缓存,避免重复检测相同组件类型
1306
+ var componentDetectionCache = new WeakMap();
1307
+ /**
1308
+ * 检测组件是否为自闭合组件
1309
+ * 通过检查组件是否接受 children 属性来判断
1310
+ * @param component - 要检测的 React 组件
1311
+ * @returns boolean - true 表示自闭合组件(不支持 children),false 表示非自闭合组件(支持 children)
1312
+ */
1313
+ function isSelfClosingComponent(component) {
1314
+ // 首先检查缓存
1315
+ if (componentDetectionCache.has(component)) {
1316
+ return componentDetectionCache.get(component);
1317
+ }
1318
+ try {
1319
+ // 对于函数组件,使用更可靠的方法检测
1320
+ if (typeof component === 'function') {
1321
+ // 优先检查组件的 propTypes(如果存在)
1322
+ if ('propTypes' in component && component.propTypes) {
1323
+ var propTypes = component.propTypes;
1324
+ var hasChildrenPropType = 'children' in propTypes;
1325
+ var result_1 = !hasChildrenPropType;
1326
+ componentDetectionCache.set(component, result_1);
1327
+ return result_1;
1328
+ }
1329
+ // 检查组件的 defaultProps(如果存在)
1330
+ if ('defaultProps' in component && component.defaultProps) {
1331
+ var defaultProps = component.defaultProps;
1332
+ // 如果 defaultProps 中包含 children,则组件支持 children
1333
+ if ('children' in defaultProps) {
1334
+ componentDetectionCache.set(component, false);
1335
+ return false;
1336
+ }
1337
+ }
1338
+ // 检查函数签名(如果可用)
1339
+ var componentString = component.toString();
1340
+ // 移除注释和多余空格
1341
+ var cleanString = componentString.replace(/\/\*[\s\S]*?\*\//g, '').replace(/\/\/.*$/gm, '').trim();
1342
+ // 检查是否显式接受 children 参数
1343
+ var hasChildrenDestructuring = /\(\s*\{[^}]*\bchildren\b[^}]*\}/.test(cleanString);
1344
+ // 如果组件参数中明确包含 children,则认为是非自闭合组件
1345
+ if (hasChildrenDestructuring) {
1346
+ componentDetectionCache.set(component, false);
1347
+ return false;
1348
+ } else {
1349
+ componentDetectionCache.set(component, true);
1350
+ return true;
1351
+ }
1352
+ }
1353
+ // 对于类组件,默认假设是非自闭合的
1354
+ var result = false;
1355
+ componentDetectionCache.set(component, result);
1356
+ return result;
1357
+ } catch (error) {
1358
+ // 如果检测过程中出现错误,默认返回 false(非自闭合)
1359
+ var result = false;
1360
+ componentDetectionCache.set(component, result);
1361
+ return result;
1362
+ }
1363
+ }
1364
+
1365
+ function ReactAIRenderer(_a) {
1366
+ var _this = this;
1367
+ var content = _a.content,
1368
+ _b = _a.scope,
1369
+ scope = _b === void 0 ? {} : _b,
1370
+ _c = _a.components,
1371
+ components = _c === void 0 ? {} : _c,
1372
+ children = _a.children,
1373
+ _d = _a.componentHandlers,
1374
+ componentHandlers = _d === void 0 ? [] : _d;
1375
+ content = content || children || '';
1376
+ var allComponents = __assign(__assign({}, BuiltInComponents), components);
1377
+ // 修复:确保 components 是一个对象后再使用 Object.entries
1378
+ var allComponentHandlers = __spreadArray(__spreadArray([], __read(components ? Object.entries(components).filter(function (_a) {
1379
+ var _b = __read(_a, 1),
1380
+ name = _b[0];
1381
+ return !componentHandlers.some(function (handler) {
1382
+ return handler.name === name;
1383
+ });
1384
+ }).map(function (_a) {
1385
+ var _b = __read(_a, 2),
1386
+ name = _b[0],
1387
+ component = _b[1];
1388
+ var selfClosing = isSelfClosingComponent(component);
1389
+ return {
1390
+ component: component,
1391
+ name: name,
1392
+ selfClosing: selfClosing
1393
+ };
1394
+ }) : []), false), __read(componentHandlers), false);
1395
+ var _e = __read(React.useState(null), 2),
1396
+ component = _e[0],
1397
+ setComponent = _e[1];
1398
+ var parser = new MDXStreamingParser(allComponentHandlers);
1399
+ var mdxContent = content || '';
1400
+ React.useEffect(function () {
1401
+ var parseMDX = function () {
1402
+ return __awaiter(_this, void 0, void 0, function () {
1403
+ var ThinkComponent, ToolCallComponent, ResultComponent, _a, thinkContent, toolCallContent, resultContent, parsedData, parsedComponents, finalComponent, i, _result, MDXComponent;
1404
+ return __generator(this, function (_b) {
1405
+ switch (_b.label) {
1406
+ case 0:
1407
+ ThinkComponent = null;
1408
+ ToolCallComponent = null;
1409
+ ResultComponent = null;
1410
+ _a = remarkLLMTagUpdate(mdxContent), thinkContent = _a.thinkContent, toolCallContent = _a.toolCallContent, resultContent = _a.resultContent;
1411
+ if (!thinkContent) return [3 /*break*/, 2];
1412
+ return [4 /*yield*/, renderMdx(thinkContent, scope, allComponents)];
1413
+ case 1:
1414
+ ThinkComponent = _b.sent();
1415
+ _b.label = 2;
1416
+ case 2:
1417
+ if (!toolCallContent) return [3 /*break*/, 4];
1418
+ return [4 /*yield*/, renderMdx(toolCallContent, scope, allComponents)];
1419
+ case 3:
1420
+ ToolCallComponent = _b.sent();
1421
+ _b.label = 4;
1422
+ case 4:
1423
+ if (!resultContent) return [3 /*break*/, 10];
1424
+ resultContent = fixMDXContent(resultContent);
1425
+ parsedData = parser.parse('magic', resultContent);
1426
+ return [4 /*yield*/, Promise.all(parsedData.map(function (item) {
1427
+ return parseComponentRecursively(allComponentHandlers, item, scope);
1428
+ }))];
1429
+ case 5:
1430
+ parsedComponents = _b.sent();
1431
+ finalComponent = [];
1432
+ i = 0;
1433
+ _b.label = 6;
1434
+ case 6:
1435
+ if (!(i < parsedComponents.length)) return [3 /*break*/, 9];
1436
+ return [4 /*yield*/, renderMdx(parsedComponents[i], scope, allComponents)];
1437
+ case 7:
1438
+ _result = _b.sent();
1439
+ finalComponent.push(_result);
1440
+ _b.label = 8;
1441
+ case 8:
1442
+ i++;
1443
+ return [3 /*break*/, 6];
1444
+ case 9:
1445
+ ResultComponent = /*#__PURE__*/runtime.jsx("div", {
1446
+ children: finalComponent
1447
+ });
1448
+ _b.label = 10;
1449
+ case 10:
1450
+ MDXComponent = /*#__PURE__*/runtime.jsxs(React.Fragment, {
1451
+ children: [ThinkComponent, ToolCallComponent, ResultComponent]
1452
+ });
1453
+ setComponent(MDXComponent);
1454
+ return [2 /*return*/];
1455
+ }
1456
+ });
1457
+ });
1458
+ };
1459
+ parseMDX();
1460
+ }, [content]);
1461
+ return /*#__PURE__*/runtime.jsx(ErrorBoundary, {
1462
+ content: content,
1463
+ children: component
1464
+ });
1465
+ }
1466
+
1467
+ // 导出 MDXStreamingParser 类
1468
+
1469
+ exports.MDXStreamingParser = MDXStreamingParser;
1470
+ exports.ReactAIRenderer = ReactAIRenderer;
1471
+ exports.Think = Think;
1472
+ exports.ToolCall = ToolCall;
1473
+ exports.__awaiter = __awaiter;
1474
+ exports.__generator = __generator;
1475
+ exports.__read = __read;
1476
+ //# sourceMappingURL=index-53d781f0.js.map