react-ai-renderer 0.1.2 → 0.1.4

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 (118) hide show
  1. package/dist/{MermaidRenderer-a25ae84f.js → MermaidRenderer-62cbf217.js} +1 -1
  2. package/dist/{MermaidRenderer-d8836800.js → MermaidRenderer-680adac3.js} +1 -1
  3. package/dist/{index-415b51ad.js → index-543584d8.js} +237 -135
  4. package/dist/{index-bb96fdaf.js → index-58ab9759.js} +237 -135
  5. package/dist/index.d.ts +30 -9
  6. package/dist/index.es.js +1 -1
  7. package/dist/index.js +1 -1
  8. package/package.json +1 -1
  9. package/dist/MermaidRenderer-0ef71453.js +0 -170
  10. package/dist/MermaidRenderer-0ef71453.js.map +0 -1
  11. package/dist/MermaidRenderer-13e4a89a.js +0 -172
  12. package/dist/MermaidRenderer-13e4a89a.js.map +0 -1
  13. package/dist/MermaidRenderer-321bfe50.js +0 -170
  14. package/dist/MermaidRenderer-321bfe50.js.map +0 -1
  15. package/dist/MermaidRenderer-325a9dee.js +0 -170
  16. package/dist/MermaidRenderer-325a9dee.js.map +0 -1
  17. package/dist/MermaidRenderer-4bae11d6.js +0 -170
  18. package/dist/MermaidRenderer-4bae11d6.js.map +0 -1
  19. package/dist/MermaidRenderer-6237d7da.js +0 -170
  20. package/dist/MermaidRenderer-6237d7da.js.map +0 -1
  21. package/dist/MermaidRenderer-653a4dab.js +0 -172
  22. package/dist/MermaidRenderer-653a4dab.js.map +0 -1
  23. package/dist/MermaidRenderer-67edae8e.js +0 -172
  24. package/dist/MermaidRenderer-67edae8e.js.map +0 -1
  25. package/dist/MermaidRenderer-6f071d8e.js +0 -170
  26. package/dist/MermaidRenderer-6f071d8e.js.map +0 -1
  27. package/dist/MermaidRenderer-75832c15.js +0 -172
  28. package/dist/MermaidRenderer-75832c15.js.map +0 -1
  29. package/dist/MermaidRenderer-7cb138d1.js +0 -170
  30. package/dist/MermaidRenderer-7cb138d1.js.map +0 -1
  31. package/dist/MermaidRenderer-8a8fb725.js +0 -172
  32. package/dist/MermaidRenderer-8a8fb725.js.map +0 -1
  33. package/dist/MermaidRenderer-91a0a7d8.js +0 -170
  34. package/dist/MermaidRenderer-91a0a7d8.js.map +0 -1
  35. package/dist/MermaidRenderer-9ff856f3.js +0 -172
  36. package/dist/MermaidRenderer-9ff856f3.js.map +0 -1
  37. package/dist/MermaidRenderer-a25ae84f.js.map +0 -1
  38. package/dist/MermaidRenderer-c3014102.js +0 -172
  39. package/dist/MermaidRenderer-c3014102.js.map +0 -1
  40. package/dist/MermaidRenderer-c664aa66.js +0 -170
  41. package/dist/MermaidRenderer-c664aa66.js.map +0 -1
  42. package/dist/MermaidRenderer-d1518f28.js +0 -172
  43. package/dist/MermaidRenderer-d1518f28.js.map +0 -1
  44. package/dist/MermaidRenderer-d7545a7e.js +0 -172
  45. package/dist/MermaidRenderer-d7545a7e.js.map +0 -1
  46. package/dist/MermaidRenderer-d8836800.js.map +0 -1
  47. package/dist/MermaidRenderer-d9c8351a.js +0 -172
  48. package/dist/MermaidRenderer-d9c8351a.js.map +0 -1
  49. package/dist/MermaidRenderer-dc0ac92e.js +0 -170
  50. package/dist/MermaidRenderer-dc0ac92e.js.map +0 -1
  51. package/dist/MermaidRenderer-e549ab85.js +0 -172
  52. package/dist/MermaidRenderer-e549ab85.js.map +0 -1
  53. package/dist/MermaidRenderer-e5d81a6f.js +0 -172
  54. package/dist/MermaidRenderer-e5d81a6f.js.map +0 -1
  55. package/dist/MermaidRenderer-e82f36e4.js +0 -172
  56. package/dist/MermaidRenderer-e82f36e4.js.map +0 -1
  57. package/dist/MermaidRenderer-f04366c1.js +0 -170
  58. package/dist/MermaidRenderer-f04366c1.js.map +0 -1
  59. package/dist/MermaidRenderer-f6473da3.js +0 -170
  60. package/dist/MermaidRenderer-f6473da3.js.map +0 -1
  61. package/dist/MermaidRenderer-f82d0d11.js +0 -170
  62. package/dist/MermaidRenderer-f82d0d11.js.map +0 -1
  63. package/dist/index-02f4473f.js +0 -1313
  64. package/dist/index-02f4473f.js.map +0 -1
  65. package/dist/index-172582eb.js +0 -1294
  66. package/dist/index-172582eb.js.map +0 -1
  67. package/dist/index-1d051ba8.js +0 -1286
  68. package/dist/index-1d051ba8.js.map +0 -1
  69. package/dist/index-283b43ef.js +0 -1285
  70. package/dist/index-283b43ef.js.map +0 -1
  71. package/dist/index-2d979ad5.js +0 -1314
  72. package/dist/index-2d979ad5.js.map +0 -1
  73. package/dist/index-349401d2.js +0 -1288
  74. package/dist/index-349401d2.js.map +0 -1
  75. package/dist/index-398258c5.js +0 -1314
  76. package/dist/index-398258c5.js.map +0 -1
  77. package/dist/index-3cf82be4.js +0 -1287
  78. package/dist/index-3cf82be4.js.map +0 -1
  79. package/dist/index-3de28f18.js +0 -1319
  80. package/dist/index-3de28f18.js.map +0 -1
  81. package/dist/index-415b51ad.js.map +0 -1
  82. package/dist/index-4592abf8.js +0 -1311
  83. package/dist/index-4592abf8.js.map +0 -1
  84. package/dist/index-4edeb553.js +0 -1313
  85. package/dist/index-4edeb553.js.map +0 -1
  86. package/dist/index-534d3bce.js +0 -1312
  87. package/dist/index-534d3bce.js.map +0 -1
  88. package/dist/index-6ceb7256.js +0 -1287
  89. package/dist/index-6ceb7256.js.map +0 -1
  90. package/dist/index-7e8dc866.js +0 -1304
  91. package/dist/index-7e8dc866.js.map +0 -1
  92. package/dist/index-896de550.js +0 -1313
  93. package/dist/index-896de550.js.map +0 -1
  94. package/dist/index-8dbf398a.js +0 -1313
  95. package/dist/index-8dbf398a.js.map +0 -1
  96. package/dist/index-922bbd30.js +0 -1339
  97. package/dist/index-922bbd30.js.map +0 -1
  98. package/dist/index-a5a2c748.js +0 -1288
  99. package/dist/index-a5a2c748.js.map +0 -1
  100. package/dist/index-abed2ed7.js +0 -1286
  101. package/dist/index-abed2ed7.js.map +0 -1
  102. package/dist/index-ae31bd04.js +0 -1312
  103. package/dist/index-ae31bd04.js.map +0 -1
  104. package/dist/index-b0cab34f.js +0 -1287
  105. package/dist/index-b0cab34f.js.map +0 -1
  106. package/dist/index-bb96fdaf.js.map +0 -1
  107. package/dist/index-c0acef6b.js +0 -1330
  108. package/dist/index-c0acef6b.js.map +0 -1
  109. package/dist/index-c6ab333d.js +0 -1293
  110. package/dist/index-c6ab333d.js.map +0 -1
  111. package/dist/index-d4f12a68.js +0 -1287
  112. package/dist/index-d4f12a68.js.map +0 -1
  113. package/dist/index-e07ca144.js +0 -1320
  114. package/dist/index-e07ca144.js.map +0 -1
  115. package/dist/index-fdaa9757.js +0 -1313
  116. package/dist/index-fdaa9757.js.map +0 -1
  117. package/dist/index.es.js.map +0 -1
  118. package/dist/index.js.map +0 -1
@@ -475,18 +475,6 @@ function __generator(thisArg, body) {
475
475
  }
476
476
  }
477
477
 
478
- function __values(o) {
479
- var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
480
- if (m) return m.call(o);
481
- if (o && typeof o.length === "number") return {
482
- next: function () {
483
- if (o && i >= o.length) o = void 0;
484
- return { value: o && o[i++], done: !o };
485
- }
486
- };
487
- throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
488
- }
489
-
490
478
  function __read(o, n) {
491
479
  var m = typeof Symbol === "function" && o[Symbol.iterator];
492
480
  if (!m) return o;
@@ -569,7 +557,7 @@ var CodeHighlight = function (_a) {
569
557
  if (language === "mermaid") {
570
558
  // 动态导入 MermaidRenderer 组件
571
559
  var MermaidRenderer = /*#__PURE__*/React.lazy(function () {
572
- return Promise.resolve().then(function () { return require('./MermaidRenderer-d7545a7e.js'); }).catch(function () {
560
+ return Promise.resolve().then(function () { return require('./MermaidRenderer-62cbf217.js'); }).catch(function () {
573
561
  return {
574
562
  default: function () {
575
563
  return /*#__PURE__*/runtime.jsx("div", {});
@@ -637,39 +625,71 @@ var CodeHighlight = function (_a) {
637
625
  var Think = function (_a) {
638
626
  var content = _a.content,
639
627
  children = _a.children;
628
+ var _b = __read(React.useState(true), 2),
629
+ isExpanded = _b[0],
630
+ setIsExpanded = _b[1];
640
631
  var thinkContent = content || children;
641
632
  if (!thinkContent) {
642
633
  return /*#__PURE__*/runtime.jsx("div", {});
643
634
  }
644
- return /*#__PURE__*/runtime.jsx("div", {
645
- style: {
646
- marginBottom: 12
647
- },
648
- children: /*#__PURE__*/runtime.jsxs("details", {
649
- open: true,
650
- children: [/*#__PURE__*/runtime.jsx("summary", {
651
- style: {
652
- fontWeight: 'bold',
653
- cursor: 'pointer',
654
- padding: '8px',
655
- backgroundColor: '#f0f0f0',
656
- borderRadius: '4px',
657
- marginBottom: '8px'
658
- },
659
- children: "\uD83E\uDDE0 AI \u601D\u8003\u8FC7\u7A0B"
660
- }), /*#__PURE__*/runtime.jsx("blockquote", {
661
- style: {
662
- borderLeft: '3px solid #2196f3',
663
- color: '#666',
664
- paddingLeft: 12,
665
- fontStyle: 'italic',
666
- marginBottom: 0,
667
- backgroundColor: '#f9f9f9',
668
- padding: '8px'
669
- },
670
- children: typeof thinkContent === 'string' ? decodeURIComponent(thinkContent) : thinkContent
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
+ })
671
685
  })]
672
- })
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
+ })]
673
693
  });
674
694
  };
675
695
 
@@ -810,7 +830,8 @@ var PreComponent = function (props) {
810
830
  });
811
831
  };
812
832
  var BuiltInComponents = {
813
- AC_DS_THINK: Think,
833
+ _THINK: Think,
834
+ // _TOOL_CALL: ToolCall,
814
835
  pre: PreComponent,
815
836
  code: CodeComponent,
816
837
  p: PComponent,
@@ -856,7 +877,7 @@ function MdxLayout(_a) {
856
877
 
857
878
  var THINK_BEGIN_TAG = '<think>';
858
879
  var THINK_END_TAG = '</think>';
859
- var CUSTOMER_THINK_COMPONENT_DISPLAY = 'AC_DS_THINK';
880
+ var CUSTOMER_THINK_COMPONENT_DISPLAY = '_THINK';
860
881
  function fixMDXContent(content) {
861
882
  // 替换中文括号为英文括号
862
883
  return content.replace(/\\\[/g, '$$').replace(/\\\]/g, '$$')
@@ -933,12 +954,11 @@ function formatProps(props) {
933
954
  }
934
955
  function renderMdx(mdxContent, scope, registeredComponents) {
935
956
  return __awaiter(this, void 0, void 0, function () {
936
- var componentTagRegex, usedComponents, match, _registeredComponents, usedComponents_1, usedComponents_1_1, component, vf, XComponent, e_1;
937
- var e_2, _a;
938
- return __generator(this, function (_b) {
939
- switch (_b.label) {
957
+ var componentTagRegex, usedComponents, match, vf, XComponent;
958
+ return __generator(this, function (_a) {
959
+ switch (_a.label) {
940
960
  case 0:
941
- _b.trys.push([0, 3,, 4]);
961
+ _a.trys.push([0, 3,, 4]);
942
962
  renderTimer && clearTimeout(renderTimer);
943
963
  componentTagRegex = /<([A-Z][a-zA-Z]*)\b/g;
944
964
  usedComponents = new Set();
@@ -946,25 +966,6 @@ function renderMdx(mdxContent, scope, registeredComponents) {
946
966
  while ((match = componentTagRegex.exec(mdxContent)) !== null) {
947
967
  usedComponents.add(match[1]);
948
968
  }
949
- _registeredComponents = new Set(Object.keys(registeredComponents));
950
- try {
951
- for (usedComponents_1 = __values(usedComponents), usedComponents_1_1 = usedComponents_1.next(); !usedComponents_1_1.done; usedComponents_1_1 = usedComponents_1.next()) {
952
- component = usedComponents_1_1.value;
953
- if (!_registeredComponents.has(component)) {
954
- throw new Error("Component ".concat(component, " is used but not registered in the components object."));
955
- }
956
- }
957
- } catch (e_2_1) {
958
- e_2 = {
959
- error: e_2_1
960
- };
961
- } finally {
962
- try {
963
- if (usedComponents_1_1 && !usedComponents_1_1.done && (_a = usedComponents_1.return)) _a.call(usedComponents_1);
964
- } finally {
965
- if (e_2) throw e_2.error;
966
- }
967
- }
968
969
  return [4 /*yield*/, mdx.compile(mdxContent, {
969
970
  outputFormat: "function-body",
970
971
  remarkPlugins: [[RemarkMath, {
@@ -977,29 +978,27 @@ function renderMdx(mdxContent, scope, registeredComponents) {
977
978
  }]]
978
979
  })];
979
980
  case 1:
980
- vf = _b.sent();
981
+ vf = _a.sent();
981
982
  return [4 /*yield*/, mdx.run(vf, __assign(__assign(__assign({}, runtime__namespace), scope), {
982
983
  Fragment: MdxLayout
983
984
  }))];
984
985
  case 2:
985
- XComponent = _b.sent().default;
986
+ XComponent = _a.sent().default;
986
987
  return [2 /*return*/, /*#__PURE__*/React__namespace.createElement(XComponent, {
987
988
  components: registeredComponents,
988
989
  scope: scope
989
990
  })];
990
991
  case 3:
991
- e_1 = _b.sent();
992
+ _a.sent();
992
993
  return [2 /*return*/, new Promise(function (resolve) {
993
994
  renderTimer = setTimeout(function () {
994
- console.log(e_1, 'e');
995
- console.log(mdxContent, 'mdxContent');
996
995
  resolve(/*#__PURE__*/React__namespace.createElement('div', {
997
996
  style: {
998
997
  backgroundColor: 'transparent'
999
998
  }
1000
999
  }, mdxContent));
1001
1000
  clearTimeout(renderTimer); // 清理定时器
1002
- }, 1000); // 1秒延迟
1001
+ }, 2000); // 1秒延迟
1003
1002
  })];
1004
1003
  case 4:
1005
1004
  return [2 /*return*/];
@@ -1156,11 +1155,12 @@ function ReactAIRenderer(_a) {
1156
1155
  var content = _a.content,
1157
1156
  _b = _a.scope,
1158
1157
  scope = _b === void 0 ? {} : _b,
1159
- components = _a.components,
1158
+ _c = _a.components,
1159
+ components = _c === void 0 ? {} : _c,
1160
1160
  children = _a.children,
1161
- _c = _a.componentHandlers,
1162
- componentHandlers = _c === void 0 ? [] : _c;
1163
- content = content || children;
1161
+ _d = _a.componentHandlers,
1162
+ componentHandlers = _d === void 0 ? [] : _d;
1163
+ content = content || children || '';
1164
1164
  var allComponents = __assign(__assign({}, BuiltInComponents), components);
1165
1165
  // 修复:确保 components 是一个对象后再使用 Object.entries
1166
1166
  var allComponentHandlers = __spreadArray(__spreadArray([], __read(components ? Object.entries(components).filter(function (_a) {
@@ -1180,11 +1180,11 @@ function ReactAIRenderer(_a) {
1180
1180
  selfClosing: selfClosing
1181
1181
  };
1182
1182
  }) : []), false), __read(componentHandlers), false);
1183
- var _d = __read(React.useState(null), 2),
1184
- component = _d[0],
1185
- setComponent = _d[1];
1183
+ var _e = __read(React.useState(null), 2),
1184
+ component = _e[0],
1185
+ setComponent = _e[1];
1186
1186
  var parser = new MDXStreamingParser(allComponentHandlers);
1187
- var mdxContent = content;
1187
+ var mdxContent = content || '';
1188
1188
  React.useEffect(function () {
1189
1189
  var parseMDX = function () {
1190
1190
  return __awaiter(_this, void 0, void 0, function () {
@@ -1246,64 +1246,167 @@ function ReactAIRenderer(_a) {
1246
1246
  }
1247
1247
 
1248
1248
  var ToolCall = function (_a) {
1249
- var name = _a.name,
1250
- args = _a.args,
1249
+ var toolCall = _a.toolCall,
1251
1250
  children = _a.children;
1251
+ var _b = __read(React.useState(false), 2),
1252
+ isExpanded = _b[0],
1253
+ setIsExpanded = _b[1];
1254
+ var getStateIcon = function () {
1255
+ switch (toolCall.state) {
1256
+ case 'loading':
1257
+ return /*#__PURE__*/runtime.jsx("div", {
1258
+ className: "w-4 h-4 animate-spin border-2 border-blue-500 border-t-transparent rounded-full"
1259
+ });
1260
+ case 'done':
1261
+ return /*#__PURE__*/runtime.jsx("div", {
1262
+ className: "w-4 h-4 rounded-full bg-green-500 flex items-center justify-center",
1263
+ children: /*#__PURE__*/runtime.jsx("svg", {
1264
+ className: "w-3 h-3 text-white",
1265
+ fill: "none",
1266
+ stroke: "currentColor",
1267
+ viewBox: "0 0 24 24",
1268
+ children: /*#__PURE__*/runtime.jsx("path", {
1269
+ strokeLinecap: "round",
1270
+ strokeLinejoin: "round",
1271
+ strokeWidth: "2",
1272
+ d: "M5 13l4 4L19 7"
1273
+ })
1274
+ })
1275
+ });
1276
+ case 'error':
1277
+ return /*#__PURE__*/runtime.jsx("div", {
1278
+ className: "w-4 h-4 rounded-full bg-red-500 flex items-center justify-center",
1279
+ children: /*#__PURE__*/runtime.jsx("svg", {
1280
+ className: "w-3 h-3 text-white",
1281
+ fill: "none",
1282
+ stroke: "currentColor",
1283
+ viewBox: "0 0 24 24",
1284
+ children: /*#__PURE__*/runtime.jsx("path", {
1285
+ strokeLinecap: "round",
1286
+ strokeLinejoin: "round",
1287
+ strokeWidth: "2",
1288
+ d: "M6 18L18 6M6 6l12 12"
1289
+ })
1290
+ })
1291
+ });
1292
+ default:
1293
+ return /*#__PURE__*/runtime.jsx("div", {
1294
+ className: "w-4 h-4 animate-spin border-2 border-blue-500 border-t-transparent rounded-full"
1295
+ });
1296
+ }
1297
+ };
1298
+ var getStateText = function () {
1299
+ switch (toolCall.state) {
1300
+ case 'loading':
1301
+ return '执行中...';
1302
+ case 'done':
1303
+ return '执行完成';
1304
+ case 'error':
1305
+ return '执行出错';
1306
+ default:
1307
+ return '执行中...';
1308
+ }
1309
+ };
1310
+ var getStateClass = function () {
1311
+ switch (toolCall.state) {
1312
+ case 'loading':
1313
+ return 'bg-blue-50 border-blue-200';
1314
+ case 'done':
1315
+ return 'bg-green-50 border-green-200';
1316
+ case 'error':
1317
+ return 'bg-red-50 border-red-200';
1318
+ default:
1319
+ return 'bg-blue-50 border-blue-200';
1320
+ }
1321
+ };
1322
+ // 解析工具调用结果,如果是JSON字符串则格式化显示
1323
+ var formatResult = function (result) {
1324
+ if (!result) return result;
1325
+ try {
1326
+ // 尝试解析为JSON
1327
+ var parsed = JSON.parse(result);
1328
+ return JSON.stringify(parsed, null, 2);
1329
+ } catch (e) {
1330
+ // 如果不是有效的JSON,直接返回原始字符串
1331
+ return result;
1332
+ }
1333
+ };
1252
1334
  return /*#__PURE__*/runtime.jsxs("div", {
1253
- style: {
1254
- border: '1px solid #e0e0e0',
1255
- borderRadius: '4px',
1256
- margin: '8px 0',
1257
- backgroundColor: '#fafafa'
1258
- },
1335
+ className: "funq-tool-call border rounded-lg p-3 mb-3 ".concat(getStateClass()),
1259
1336
  children: [/*#__PURE__*/runtime.jsxs("div", {
1260
- style: {
1261
- padding: '8px',
1262
- backgroundColor: '#f5f5f5',
1263
- borderBottom: '1px solid #e0e0e0',
1264
- fontWeight: 'bold',
1265
- display: 'flex',
1266
- alignItems: 'center'
1337
+ className: "flex items-center justify-between cursor-pointer",
1338
+ onClick: function () {
1339
+ return setIsExpanded(!isExpanded);
1267
1340
  },
1268
- children: [/*#__PURE__*/runtime.jsx("span", {
1269
- style: {
1270
- marginRight: '8px'
1271
- },
1272
- children: "\uD83D\uDD27"
1273
- }), /*#__PURE__*/runtime.jsxs("span", {
1274
- children: ["\u5DE5\u5177\u8C03\u7528: ", name]
1341
+ children: [/*#__PURE__*/runtime.jsxs("div", {
1342
+ className: "flex items-center gap-2",
1343
+ children: [getStateIcon(), /*#__PURE__*/runtime.jsxs("span", {
1344
+ className: "font-medium text-sm",
1345
+ children: ["\u5DE5\u5177\u8C03\u7528: ", toolCall.toolCallName]
1346
+ }), /*#__PURE__*/runtime.jsx("span", {
1347
+ className: "text-xs text-muted-foreground",
1348
+ children: getStateText()
1349
+ })]
1350
+ }), /*#__PURE__*/runtime.jsxs("div", {
1351
+ className: "flex items-center gap-2",
1352
+ children: [toolCall.startTime && /*#__PURE__*/runtime.jsxs("span", {
1353
+ className: "text-xs text-muted-foreground",
1354
+ children: ["\u5F00\u59CB: ", new Date(toolCall.startTime).toLocaleTimeString()]
1355
+ }), toolCall.endTime && toolCall.executionTime && /*#__PURE__*/runtime.jsxs("span", {
1356
+ className: "text-xs text-muted-foreground",
1357
+ children: ["\u8017\u65F6: ", toolCall.executionTime, "ms"]
1358
+ }), /*#__PURE__*/runtime.jsx("div", {
1359
+ className: "w-4 h-4 text-muted-foreground",
1360
+ children: isExpanded ? /*#__PURE__*/runtime.jsx("svg", {
1361
+ fill: "none",
1362
+ stroke: "currentColor",
1363
+ viewBox: "0 0 24 24",
1364
+ children: /*#__PURE__*/runtime.jsx("path", {
1365
+ strokeLinecap: "round",
1366
+ strokeLinejoin: "round",
1367
+ strokeWidth: "2",
1368
+ d: "M5 15l7-7 7 7"
1369
+ })
1370
+ }) : /*#__PURE__*/runtime.jsx("svg", {
1371
+ fill: "none",
1372
+ stroke: "currentColor",
1373
+ viewBox: "0 0 24 24",
1374
+ children: /*#__PURE__*/runtime.jsx("path", {
1375
+ strokeLinecap: "round",
1376
+ strokeLinejoin: "round",
1377
+ strokeWidth: "2",
1378
+ d: "M19 9l-7 7-7-7"
1379
+ })
1380
+ })
1381
+ })]
1275
1382
  })]
1276
- }), args && /*#__PURE__*/runtime.jsxs("div", {
1277
- style: {
1278
- padding: '8px'
1279
- },
1280
- children: [/*#__PURE__*/runtime.jsx("div", {
1281
- style: {
1282
- fontWeight: 'bold',
1283
- marginBottom: '4px'
1284
- },
1285
- children: "\u53C2\u6570:"
1286
- }), /*#__PURE__*/runtime.jsx("pre", {
1287
- style: {
1288
- backgroundColor: '#f0f0f0',
1289
- padding: '8px',
1290
- borderRadius: '4px',
1291
- overflowX: 'auto',
1292
- fontSize: '12px'
1293
- },
1294
- children: JSON.stringify(args, null, 2)
1295
- })]
1296
- }), children && /*#__PURE__*/runtime.jsxs("div", {
1297
- style: {
1298
- padding: '8px'
1299
- },
1300
- children: [/*#__PURE__*/runtime.jsx("div", {
1301
- style: {
1302
- fontWeight: 'bold',
1303
- marginBottom: '4px'
1304
- },
1305
- children: "\u7ED3\u679C:"
1306
- }), /*#__PURE__*/runtime.jsx("div", {
1383
+ }), isExpanded && /*#__PURE__*/runtime.jsxs("div", {
1384
+ className: "mt-3 pt-3 border-t border-border",
1385
+ children: [toolCall.toolCallArgs && /*#__PURE__*/runtime.jsxs("div", {
1386
+ className: "mb-3",
1387
+ children: [/*#__PURE__*/runtime.jsx("h4", {
1388
+ className: "text-sm font-medium mb-1",
1389
+ children: "\u53C2\u6570:"
1390
+ }), /*#__PURE__*/runtime.jsx("pre", {
1391
+ className: "text-xs bg-muted p-2 rounded overflow-x-auto break-words whitespace-pre-wrap",
1392
+ children: toolCall.toolCallArgs
1393
+ })]
1394
+ }), (toolCall.delta || toolCall.state === 'error') && /*#__PURE__*/runtime.jsxs("div", {
1395
+ children: [/*#__PURE__*/runtime.jsx("h4", {
1396
+ className: "text-sm font-medium mb-1",
1397
+ children: "\u7ED3\u679C:"
1398
+ }), /*#__PURE__*/runtime.jsx("div", {
1399
+ className: "text-sm p-2 rounded ".concat(toolCall.state === 'error' ? 'bg-red-100 text-red-800' : 'bg-muted'),
1400
+ children: toolCall.state === 'error' ? /*#__PURE__*/runtime.jsx("pre", {
1401
+ className: "whitespace-pre-wrap break-words overflow-x-auto",
1402
+ children: formatResult(toolCall.delta) || '工具执行出错'
1403
+ }) : /*#__PURE__*/runtime.jsx("pre", {
1404
+ className: "whitespace-pre-wrap break-words overflow-x-auto",
1405
+ children: formatResult(toolCall.delta)
1406
+ })
1407
+ })]
1408
+ }), children && /*#__PURE__*/runtime.jsx("div", {
1409
+ className: "mt-2",
1307
1410
  children: children
1308
1411
  })]
1309
1412
  })]
@@ -1319,4 +1422,3 @@ exports.ToolCall = ToolCall;
1319
1422
  exports.__awaiter = __awaiter;
1320
1423
  exports.__generator = __generator;
1321
1424
  exports.__read = __read;
1322
- //# sourceMappingURL=index-bb96fdaf.js.map
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import React$1 from 'react';
1
+ import React from 'react';
2
2
 
3
3
  interface ComponentData$1 {
4
4
  type: "text" | "component";
@@ -34,19 +34,40 @@ interface ReactMarkdownProps {
34
34
  scope?: any;
35
35
  [key: string]: any;
36
36
  }
37
+ interface ReactAIRendererProps {
38
+ /** 要渲染的 Markdown/MDX 内容 */
39
+ content?: string;
40
+ /** 作用域对象,用于传递变量和函数给组件 */
41
+ scope?: Record<string, any>;
42
+ /** 自定义组件映射 */
43
+ components?: Record<string, React.ComponentType<any>>;
44
+ /** 子元素,作为 content 的替代方案 */
45
+ children?: string;
46
+ /** 组件处理器数组 */
47
+ componentHandlers?: ComponentHandler[];
48
+ /** 其他传递给组件的属性 */
49
+ [key: string]: any;
50
+ }
37
51
 
38
52
  interface ThinkProps {
39
53
  content: string;
40
- children?: React$1.ReactNode;
54
+ children?: React.ReactNode;
41
55
  }
42
- declare const Think: React$1.FC<ThinkProps>;
56
+ declare const Think: React.FC<ThinkProps>;
43
57
 
44
58
  interface ToolCallProps {
45
- name: string;
46
- args?: any;
47
- children?: React$1.ReactNode;
59
+ toolCall: {
60
+ toolCallName: string;
61
+ state: 'loading' | 'done' | 'error' | string;
62
+ startTime?: number;
63
+ endTime?: number;
64
+ executionTime?: number;
65
+ toolCallArgs?: string;
66
+ delta?: string;
67
+ };
68
+ children?: React.ReactNode;
48
69
  }
49
- declare const ToolCall: React$1.FC<ToolCallProps>;
70
+ declare const ToolCall: React.FC<ToolCallProps>;
50
71
 
51
72
  interface ComponentData {
52
73
  type: "text" | "component";
@@ -68,6 +89,6 @@ declare class MDXStreamingParser {
68
89
  reset(): void;
69
90
  }
70
91
 
71
- declare function ReactAIRenderer({ content, scope, components, children, componentHandlers }: any): React$1.JSX.Element;
92
+ declare function ReactAIRenderer({ content, scope, components, children, componentHandlers }: ReactAIRendererProps): React.JSX.Element;
72
93
 
73
- export { ComponentData$1 as ComponentData, ComponentHandler, MDXStreamingParser, ParseResult, ParserState, ReactMarkdownProps, Think, ThinkProps, ToolCall, ToolCallProps, ReactAIRenderer as default };
94
+ export { ComponentData$1 as ComponentData, ComponentHandler, MDXStreamingParser, ParseResult, ParserState, ReactAIRendererProps, ReactMarkdownProps, Think, ThinkProps, ToolCall, ToolCallProps, ReactAIRenderer as default };
package/dist/index.es.js CHANGED
@@ -1,4 +1,4 @@
1
- export { M as MDXStreamingParser, T as Think, c as ToolCall, R as default } from './index-c6ab333d.js';
1
+ export { M as MDXStreamingParser, T as Think, c as ToolCall, R as default } from './index-543584d8.js';
2
2
  import 'react';
3
3
  import 'react/jsx-runtime';
4
4
  import 'remark-math';
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var index = require('./index-3de28f18.js');
5
+ var index = require('./index-58ab9759.js');
6
6
  require('react');
7
7
  require('react/jsx-runtime');
8
8
  require('remark-math');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-ai-renderer",
3
- "version": "0.1.2",
3
+ "version": "0.1.4",
4
4
  "type": "module",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.es.js",