@ai-group/chat-sdk 1.0.11 → 1.0.12

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 (114) hide show
  1. package/dist/cjs/components/DislikeFeedback.js +79 -0
  2. package/dist/cjs/components/DislikeFeedback.js.map +7 -0
  3. package/dist/cjs/components/FeedbackTags.js +62 -0
  4. package/dist/cjs/components/FeedbackTags.js.map +7 -0
  5. package/dist/cjs/components/XAiChatbot/index.js +5 -3
  6. package/dist/cjs/components/XAiChatbot/index.js.map +2 -2
  7. package/dist/cjs/components/XAiProvider/index.js +142 -45
  8. package/dist/cjs/components/XAiProvider/index.js.map +3 -3
  9. package/dist/cjs/hooks/useAgentGenerator.js +20 -25
  10. package/dist/cjs/hooks/useAgentGenerator.js.map +2 -2
  11. package/dist/cjs/services/api.js +15 -0
  12. package/dist/cjs/services/api.js.map +2 -2
  13. package/dist/cjs/types/XAiMessage.js.map +1 -1
  14. package/dist/esm/components/DislikeFeedback.js +97 -0
  15. package/dist/esm/components/DislikeFeedback.js.map +1 -0
  16. package/dist/esm/components/FeedbackTags.js +34 -0
  17. package/dist/esm/components/FeedbackTags.js.map +1 -0
  18. package/dist/esm/components/XAiChatbot/index.js +2 -2
  19. package/dist/esm/components/XAiChatbot/index.js.map +1 -1
  20. package/dist/esm/components/XAiProvider/index.js +215 -84
  21. package/dist/esm/components/XAiProvider/index.js.map +1 -1
  22. package/dist/esm/hooks/useAgentGenerator.js +3 -1
  23. package/dist/esm/hooks/useAgentGenerator.js.map +1 -1
  24. package/dist/esm/services/api.js +32 -0
  25. package/dist/esm/services/api.js.map +1 -1
  26. package/dist/esm/types/XAiMessage.js.map +1 -1
  27. package/dist/umd/chat-sdk.min.js +1 -1
  28. package/package.json +16 -13
  29. package/dist/cjs/assets/svg/AddChatIcon.d.ts +0 -3
  30. package/dist/cjs/client/base.d.ts +0 -9
  31. package/dist/cjs/client/restClient.d.ts +0 -0
  32. package/dist/cjs/client/wsClient.d.ts +0 -0
  33. package/dist/cjs/components/XAiChatbot/XAiChatbot.stories.d.ts +0 -10
  34. package/dist/cjs/components/XAiChatbot/index.d.ts +0 -9
  35. package/dist/cjs/components/XAiChatbot/styles.d.ts +0 -67
  36. package/dist/cjs/components/XAiConversations/XAiConversations.stories.d.ts +0 -6
  37. package/dist/cjs/components/XAiConversations/index.d.ts +0 -4
  38. package/dist/cjs/components/XAiConversations/styles.d.ts +0 -49
  39. package/dist/cjs/components/XAiProvider/XAiProvider.stories.d.ts +0 -8
  40. package/dist/cjs/components/XAiProvider/demo.styles.d.ts +0 -37
  41. package/dist/cjs/components/XAiProvider/index.d.ts +0 -4
  42. package/dist/cjs/components/XAiSDK.d.ts +0 -10
  43. package/dist/cjs/components/XAiSender/XAiSender.stories.d.ts +0 -6
  44. package/dist/cjs/components/XAiSender/index.d.ts +0 -4
  45. package/dist/cjs/components/XAiSender/styles.d.ts +0 -47
  46. package/dist/cjs/components/XAiWebSDKWrapper.d.ts +0 -9
  47. package/dist/cjs/constants/index.d.ts +0 -2
  48. package/dist/cjs/context/AiProviderContext.d.ts +0 -14
  49. package/dist/cjs/context/ThemeContext.d.ts +0 -20
  50. package/dist/cjs/hooks/useAgentGenerator.d.ts +0 -93
  51. package/dist/cjs/hooks/useEventStreamRequest.d.ts +0 -30
  52. package/dist/cjs/hooks/useProviderContext.d.ts +0 -33
  53. package/dist/cjs/hooks/useXAiSDK.d.ts +0 -14
  54. package/dist/cjs/index.d.ts +0 -10
  55. package/dist/cjs/services/api.d.ts +0 -130
  56. package/dist/cjs/styles/common.d.ts +0 -73
  57. package/dist/cjs/styles/markdown.d.ts +0 -3
  58. package/dist/cjs/types/XAiChatbot.d.ts +0 -156
  59. package/dist/cjs/types/XAiConversations.d.ts +0 -20
  60. package/dist/cjs/types/XAiMessage.d.ts +0 -108
  61. package/dist/cjs/types/XAiProvider.d.ts +0 -347
  62. package/dist/cjs/types/XAiSender.d.ts +0 -13
  63. package/dist/cjs/types/index.d.ts +0 -5
  64. package/dist/cjs/types/node.d.ts +0 -10
  65. package/dist/cjs/utils/chat.d.ts +0 -34
  66. package/dist/cjs/utils/index.d.ts +0 -2
  67. package/dist/cjs/utils/providerManager.d.ts +0 -22
  68. package/dist/cjs/utils/request.d.ts +0 -78
  69. package/dist/cjs/utils/request.example.d.ts +0 -39
  70. package/dist/cjs/utils/umdEntry.d.ts +0 -26
  71. package/dist/cjs/utils/workflowNode.d.ts +0 -2
  72. package/dist/esm/assets/svg/AddChatIcon.d.ts +0 -3
  73. package/dist/esm/client/base.d.ts +0 -9
  74. package/dist/esm/client/restClient.d.ts +0 -0
  75. package/dist/esm/client/wsClient.d.ts +0 -0
  76. package/dist/esm/components/XAiChatbot/XAiChatbot.stories.d.ts +0 -10
  77. package/dist/esm/components/XAiChatbot/index.d.ts +0 -9
  78. package/dist/esm/components/XAiChatbot/styles.d.ts +0 -67
  79. package/dist/esm/components/XAiConversations/XAiConversations.stories.d.ts +0 -6
  80. package/dist/esm/components/XAiConversations/index.d.ts +0 -4
  81. package/dist/esm/components/XAiConversations/styles.d.ts +0 -49
  82. package/dist/esm/components/XAiProvider/XAiProvider.stories.d.ts +0 -8
  83. package/dist/esm/components/XAiProvider/demo.styles.d.ts +0 -37
  84. package/dist/esm/components/XAiProvider/index.d.ts +0 -4
  85. package/dist/esm/components/XAiSDK.d.ts +0 -10
  86. package/dist/esm/components/XAiSender/XAiSender.stories.d.ts +0 -6
  87. package/dist/esm/components/XAiSender/index.d.ts +0 -4
  88. package/dist/esm/components/XAiSender/styles.d.ts +0 -47
  89. package/dist/esm/components/XAiWebSDKWrapper.d.ts +0 -9
  90. package/dist/esm/constants/index.d.ts +0 -2
  91. package/dist/esm/context/AiProviderContext.d.ts +0 -14
  92. package/dist/esm/context/ThemeContext.d.ts +0 -20
  93. package/dist/esm/hooks/useAgentGenerator.d.ts +0 -93
  94. package/dist/esm/hooks/useEventStreamRequest.d.ts +0 -30
  95. package/dist/esm/hooks/useProviderContext.d.ts +0 -33
  96. package/dist/esm/hooks/useXAiSDK.d.ts +0 -14
  97. package/dist/esm/index.d.ts +0 -10
  98. package/dist/esm/services/api.d.ts +0 -130
  99. package/dist/esm/styles/common.d.ts +0 -73
  100. package/dist/esm/styles/markdown.d.ts +0 -3
  101. package/dist/esm/types/XAiChatbot.d.ts +0 -156
  102. package/dist/esm/types/XAiConversations.d.ts +0 -20
  103. package/dist/esm/types/XAiMessage.d.ts +0 -108
  104. package/dist/esm/types/XAiProvider.d.ts +0 -347
  105. package/dist/esm/types/XAiSender.d.ts +0 -13
  106. package/dist/esm/types/index.d.ts +0 -5
  107. package/dist/esm/types/node.d.ts +0 -10
  108. package/dist/esm/utils/chat.d.ts +0 -34
  109. package/dist/esm/utils/index.d.ts +0 -2
  110. package/dist/esm/utils/providerManager.d.ts +0 -22
  111. package/dist/esm/utils/request.d.ts +0 -78
  112. package/dist/esm/utils/request.example.d.ts +0 -39
  113. package/dist/esm/utils/umdEntry.d.ts +0 -26
  114. package/dist/esm/utils/workflowNode.d.ts +0 -2
@@ -0,0 +1,79 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+
29
+ // src/components/DislikeFeedback.tsx
30
+ var DislikeFeedback_exports = {};
31
+ __export(DislikeFeedback_exports, {
32
+ DislikeFeedback: () => DislikeFeedback,
33
+ default: () => DislikeFeedback_default
34
+ });
35
+ module.exports = __toCommonJS(DislikeFeedback_exports);
36
+ var import_antd = require("antd");
37
+ var import_react = __toESM(require("react"));
38
+ var import_icons = require("@ant-design/icons");
39
+ var import_FeedbackTags = __toESM(require("./FeedbackTags"));
40
+ var DislikeFeedback = ({ msg, activeColor, onSubmit }) => {
41
+ const [form] = import_antd.Form.useForm();
42
+ const [showFeedback, setShowFeedback] = (0, import_react.useState)(false);
43
+ return /* @__PURE__ */ import_react.default.createElement(
44
+ import_antd.Popover,
45
+ {
46
+ trigger: ["click"],
47
+ open: showFeedback,
48
+ onOpenChange: (v) => {
49
+ if (v) {
50
+ form.resetFields();
51
+ }
52
+ setShowFeedback(v);
53
+ },
54
+ title: /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement("div", null, "抱歉,未能满足您的需求"), /* @__PURE__ */ import_react.default.createElement("div", { style: { color: "#999", fontWeight: "normal", marginBottom: 12 } }, "为提升您的使用体验,请告诉我们不足的方向")),
55
+ content: /* @__PURE__ */ import_react.default.createElement("div", null, /* @__PURE__ */ import_react.default.createElement(import_antd.Form, { form }, /* @__PURE__ */ import_react.default.createElement(import_antd.Form.Item, { name: "feedbackTags", style: { marginBottom: 12 } }, /* @__PURE__ */ import_react.default.createElement(import_FeedbackTags.default, null)), /* @__PURE__ */ import_react.default.createElement(import_antd.Form.Item, { name: "feedbackDescription", style: { marginBottom: 12 } }, /* @__PURE__ */ import_react.default.createElement(import_antd.Input.TextArea, { rows: 4, placeholder: "欢迎说说你的想法" })), /* @__PURE__ */ import_react.default.createElement(
56
+ import_antd.Button,
57
+ {
58
+ type: "primary",
59
+ block: true,
60
+ onClick: async () => {
61
+ const formData = await form.validateFields();
62
+ const res = await onSubmit(formData);
63
+ if (res) {
64
+ setShowFeedback(false);
65
+ }
66
+ }
67
+ },
68
+ "提交反馈"
69
+ )))
70
+ },
71
+ msg.isLike === -1 ? /* @__PURE__ */ import_react.default.createElement(import_icons.DislikeFilled, { style: { color: activeColor } }) : /* @__PURE__ */ import_react.default.createElement(import_icons.DislikeOutlined, null)
72
+ );
73
+ };
74
+ var DislikeFeedback_default = DislikeFeedback;
75
+ // Annotate the CommonJS export names for ESM import in node:
76
+ 0 && (module.exports = {
77
+ DislikeFeedback
78
+ });
79
+ //# sourceMappingURL=DislikeFeedback.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/DislikeFeedback.tsx"],
4
+ "sourcesContent": ["import { Button, Form, Input, Popover } from 'antd';\nimport React, { useState } from 'react';\nimport { DislikeFilled, DislikeOutlined } from '@ant-design/icons';\nimport FeedbackTags from './FeedbackTags';\n\nexport interface DislikeFeedbackProps {\n msg: any;\n activeColor: string;\n onSubmit: (v: any) => Promise<boolean>;\n}\n\nexport const DislikeFeedback: React.FC<DislikeFeedbackProps> = ({ msg, activeColor, onSubmit }) => {\n const [form] = Form.useForm();\n const [showFeedback, setShowFeedback] = useState(false);\n return (\n <Popover\n trigger={['click']}\n open={showFeedback}\n onOpenChange={(v) => {\n if (v) {\n form.resetFields();\n }\n setShowFeedback(v);\n }}\n title={(\n <div>\n <div>抱歉,未能满足您的需求</div>\n <div style={{ color: '#999', fontWeight: 'normal', marginBottom: 12 }}>\n 为提升您的使用体验,请告诉我们不足的方向\n </div>\n </div>\n )}\n content={(\n <div>\n <Form form={form}>\n <Form.Item name=\"feedbackTags\" style={{ marginBottom: 12 }}>\n <FeedbackTags />\n </Form.Item>\n <Form.Item name=\"feedbackDescription\" style={{ marginBottom: 12 }}>\n <Input.TextArea rows={4} placeholder=\"欢迎说说你的想法\" />\n </Form.Item>\n <Button\n type=\"primary\"\n block\n onClick={async () => {\n const formData = await form.validateFields();\n const res = await onSubmit(formData);\n if (res) {\n setShowFeedback(false);\n }\n }}\n >\n 提交反馈\n </Button>\n </Form>\n </div>\n )}\n >\n {msg.isLike === -1\n ? (\n <DislikeFilled style={{ color: activeColor }} />\n )\n : (\n <DislikeOutlined />\n )}\n </Popover>\n );\n};\n\nexport default DislikeFeedback;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAA6C;AAC7C,mBAAgC;AAChC,mBAA+C;AAC/C,0BAAyB;AAQlB,IAAM,kBAAkD,CAAC,EAAE,KAAK,aAAa,SAAS,MAAM;AACjG,QAAM,CAAC,IAAI,IAAI,iBAAK,QAAQ;AAC5B,QAAM,CAAC,cAAc,eAAe,QAAI,uBAAS,KAAK;AACtD,SACE,6BAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,SAAS,CAAC,OAAO;AAAA,MACjB,MAAM;AAAA,MACN,cAAc,CAAC,MAAM;AACnB,YAAI,GAAG;AACL,eAAK,YAAY;AAAA,QACnB;AACA,wBAAgB,CAAC;AAAA,MACnB;AAAA,MACA,OACE,6BAAAA,QAAA,cAAC,aACC,6BAAAA,QAAA,cAAC,aAAI,aAAW,GAChB,6BAAAA,QAAA,cAAC,SAAI,OAAO,EAAE,OAAO,QAAQ,YAAY,UAAU,cAAc,GAAG,KAAG,sBAEvE,CACF;AAAA,MAEF,SACE,6BAAAA,QAAA,cAAC,aACC,6BAAAA,QAAA,cAAC,oBAAK,QACJ,6BAAAA,QAAA,cAAC,iBAAK,MAAL,EAAU,MAAK,gBAAe,OAAO,EAAE,cAAc,GAAG,KACvD,6BAAAA,QAAA,cAAC,oBAAAC,SAAA,IAAa,CAChB,GACA,6BAAAD,QAAA,cAAC,iBAAK,MAAL,EAAU,MAAK,uBAAsB,OAAO,EAAE,cAAc,GAAG,KAC9D,6BAAAA,QAAA,cAAC,kBAAM,UAAN,EAAe,MAAM,GAAG,aAAY,YAAW,CAClD,GACA,6BAAAA,QAAA;AAAA,QAAC;AAAA;AAAA,UACC,MAAK;AAAA,UACL,OAAK;AAAA,UACL,SAAS,YAAY;AACnB,kBAAM,WAAW,MAAM,KAAK,eAAe;AAC3C,kBAAM,MAAM,MAAM,SAAS,QAAQ;AACnC,gBAAI,KAAK;AACP,8BAAgB,KAAK;AAAA,YACvB;AAAA,UACF;AAAA;AAAA,QACD;AAAA,MAED,CACF,CACF;AAAA;AAAA,IAGD,IAAI,WAAW,KAEZ,6BAAAA,QAAA,cAAC,8BAAc,OAAO,EAAE,OAAO,YAAY,GAAG,IAG9C,6BAAAA,QAAA,cAAC,kCAAgB;AAAA,EAEvB;AAEJ;AAEA,IAAO,0BAAQ;",
6
+ "names": ["React", "FeedbackTags"]
7
+ }
@@ -0,0 +1,62 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
+ // If the importer is in node compatibility mode or this is not an ESM
21
+ // file that has been converted to a CommonJS file using a Babel-
22
+ // compatible transform (i.e. "__esModule" has not been set), then set
23
+ // "default" to the CommonJS "module.exports" for node compatibility.
24
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
+ mod
26
+ ));
27
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
+
29
+ // src/components/FeedbackTags.tsx
30
+ var FeedbackTags_exports = {};
31
+ __export(FeedbackTags_exports, {
32
+ FeedbackTags: () => FeedbackTags,
33
+ default: () => FeedbackTags_default
34
+ });
35
+ module.exports = __toCommonJS(FeedbackTags_exports);
36
+ var import_antd = require("antd");
37
+ var import_react = __toESM(require("react"));
38
+ var allTags = ["回答错误", "需求理解错", "内容质量差", "逻辑混乱", "可读性差", "遗忘了上文", "时效性差", "其他"];
39
+ var FeedbackTags = ({ value, onChange }) => {
40
+ const tags = value ? value.split(",") : [];
41
+ return /* @__PURE__ */ import_react.default.createElement(import_antd.Flex, { gap: 8, wrap: true, style: { width: 305 } }, allTags.map((v) => /* @__PURE__ */ import_react.default.createElement(
42
+ import_antd.Button,
43
+ {
44
+ key: v,
45
+ type: tags.includes(v) ? "primary" : "default",
46
+ onClick: () => {
47
+ if (tags.includes(v)) {
48
+ onChange == null ? void 0 : onChange(tags.filter((t) => t !== v).join(","));
49
+ } else {
50
+ onChange == null ? void 0 : onChange([...tags, v].join(","));
51
+ }
52
+ }
53
+ },
54
+ v
55
+ )));
56
+ };
57
+ var FeedbackTags_default = FeedbackTags;
58
+ // Annotate the CommonJS export names for ESM import in node:
59
+ 0 && (module.exports = {
60
+ FeedbackTags
61
+ });
62
+ //# sourceMappingURL=FeedbackTags.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/FeedbackTags.tsx"],
4
+ "sourcesContent": ["import { Button, Flex } from 'antd';\nimport React from 'react';\n\nexport interface FeedbackTagsProps {\n value?: string;\n onChange?: (v?: string) => void;\n}\n\nconst allTags = ['回答错误', '需求理解错', '内容质量差', '逻辑混乱', '可读性差', '遗忘了上文', '时效性差', '其他'];\n\nexport const FeedbackTags: React.FC<FeedbackTagsProps> = ({ value, onChange }) => {\n const tags = value ? value.split(',') : [];\n return (\n <Flex gap={8} wrap style={{ width: 305 }}>\n {allTags.map((v) => (\n <Button\n key={v}\n type={tags.includes(v) ? 'primary' : 'default'}\n onClick={() => {\n if (tags.includes(v)) {\n onChange?.(tags.filter((t) => t !== v).join(','));\n } else {\n onChange?.([...tags, v].join(','));\n }\n }}\n >\n {v}\n </Button>\n ))}\n </Flex>\n );\n};\n\nexport default FeedbackTags;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAA6B;AAC7B,mBAAkB;AAOlB,IAAM,UAAU,CAAC,QAAQ,SAAS,SAAS,QAAQ,QAAQ,SAAS,QAAQ,IAAI;AAEzE,IAAM,eAA4C,CAAC,EAAE,OAAO,SAAS,MAAM;AAChF,QAAM,OAAO,QAAQ,MAAM,MAAM,GAAG,IAAI,CAAC;AACzC,SACE,6BAAAA,QAAA,cAAC,oBAAK,KAAK,GAAG,MAAI,MAAC,OAAO,EAAE,OAAO,IAAI,KACpC,QAAQ,IAAI,CAAC,MACZ,6BAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL,MAAM,KAAK,SAAS,CAAC,IAAI,YAAY;AAAA,MACrC,SAAS,MAAM;AACb,YAAI,KAAK,SAAS,CAAC,GAAG;AACpB,+CAAW,KAAK,OAAO,CAAC,MAAM,MAAM,CAAC,EAAE,KAAK,GAAG;AAAA,QACjD,OAAO;AACL,+CAAW,CAAC,GAAG,MAAM,CAAC,EAAE,KAAK,GAAG;AAAA,QAClC;AAAA,MACF;AAAA;AAAA,IAEC;AAAA,EACH,CACD,CACH;AAEJ;AAEA,IAAO,uBAAQ;",
6
+ "names": ["React"]
7
+ }
@@ -30,7 +30,8 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
30
30
  var XAiChatbot_exports = {};
31
31
  __export(XAiChatbot_exports, {
32
32
  ActionHeader: () => ActionHeader,
33
- default: () => XAiChatbot_default
33
+ default: () => XAiChatbot_default,
34
+ defaultActions: () => defaultActions
34
35
  });
35
36
  module.exports = __toCommonJS(XAiChatbot_exports);
36
37
  var import_react = __toESM(require("react"));
@@ -215,7 +216,7 @@ var XAiChatbot = (props) => {
215
216
  const confirmClear = () => {
216
217
  onClear == null ? void 0 : onClear();
217
218
  };
218
- const EmptyState = (0, import_react.useMemo)(() => () => empty ? empty : /* @__PURE__ */ import_react.default.createElement("div", { className: styles.emptyWrapper }, /* @__PURE__ */ import_react.default.createElement("img", { src: emptyStateImage, alt: "空状态图标", className: styles.emptyImg }), /* @__PURE__ */ import_react.default.createElement("div", { className: (0, import_clsx.default)(styles.text(16), styles.weight(600), styles.textColor("#343434")) }, emptyStateText)), [emptyStateImage, emptyStateText]);
219
+ const EmptyState = (0, import_react.useMemo)(() => () => empty || /* @__PURE__ */ import_react.default.createElement("div", { className: styles.emptyWrapper }, /* @__PURE__ */ import_react.default.createElement("img", { src: emptyStateImage, alt: "空状态图标", className: styles.emptyImg }), /* @__PURE__ */ import_react.default.createElement("div", { className: (0, import_clsx.default)(styles.text(16), styles.weight(600), styles.textColor("#343434")) }, emptyStateText)), [emptyStateImage, emptyStateText]);
219
220
  return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement(import_styles.GlobalStyle, null), /* @__PURE__ */ import_react.default.createElement(import_markdown.default, null), /* @__PURE__ */ import_react.default.createElement("div", { id: "x-ai-chatbot", className: styles.wrapper }, navbarShow && /* @__PURE__ */ import_react.default.createElement(NavBar, null), /* @__PURE__ */ import_react.default.createElement("div", { className: styles.messageContainer }, (messages == null ? void 0 : messages.length) ? /* @__PURE__ */ import_react.default.createElement(
220
221
  import_x.Bubble.List,
221
222
  {
@@ -311,6 +312,7 @@ var XAiChatbot = (props) => {
311
312
  var XAiChatbot_default = XAiChatbot;
312
313
  // Annotate the CommonJS export names for ESM import in node:
313
314
  0 && (module.exports = {
314
- ActionHeader
315
+ ActionHeader,
316
+ defaultActions
315
317
  });
316
318
  //# sourceMappingURL=index.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/XAiChatbot/index.tsx"],
4
- "sourcesContent": ["// 文件: components/XAiChatbot/index.tsx\n\nimport React, {\n useRef,\n useState,\n useMemo,\n} from 'react';\nimport {\n Tooltip,\n GetProp,\n} from 'antd';\nimport {\n Bubble,\n Prompts,\n} from '@ant-design/x';\nimport {\n UserOutlined,\n RedoOutlined,\n CopyOutlined,\n DeleteOutlined,\n} from '@ant-design/icons';\nimport clsx from 'clsx';\nimport MarkdownIt from 'markdown-it';\nimport reactHtmlParser from 'react-html-parser';\nimport MarkdownGlobalStyle from '@/styles/markdown';\nimport {\n MessageStatus,\n MessageRole,\n Messages,\n} from '@/types/XAiMessage';\nimport {\n XAiChatbotProps,\n ActionItem,\n} from '@/types/XAiChatbot';\nimport emptyIcon from '@/assets/empty.png';\nimport arrowUp from '@/assets/arrow-up.png';\nimport arrowDown from '@/assets/arrow-down.png';\nimport thinkIcon from '@/assets/think.png';\nimport groupIcon from '@/assets/group.png';\nimport arrowDownBlue from '@/assets/arrow-down-blue.png';\nimport { useChatbotContext } from '@/hooks/useProviderContext';\nimport { useStyles, GlobalStyle } from './styles';\nimport XAiSender from '../XAiSender';\n\nconst styles = useStyles();\n\nconst md = new MarkdownIt({\n html: true,\n linkify: true,\n typographer: true,\n});\n\n// 自定义 link_open 渲染规则\nconst defaultRender = md.renderer.rules.link_open || ((tokens, idx, options, env, self) => {\n return self.renderToken(tokens, idx, options);\n});\n\n// a 标签打开规则\nmd.renderer.rules.link_open = (tokens, idx, options, env, self) => {\n // 添加 target=\"_blank\"\n const aIndex = tokens[idx].attrIndex('target');\n if (aIndex < 0) {\n tokens[idx].attrPush(['target', '_blank']);\n } else {\n tokens[idx].attrs![aIndex][1] = '_blank';\n }\n // 添加 rel=\"noopener noreferrer\"\n const relIndex = tokens[idx].attrIndex('rel');\n if (relIndex < 0) {\n tokens[idx].attrPush(['rel', 'noopener noreferrer']);\n } else {\n tokens[idx].attrs![relIndex][1] = 'noopener noreferrer';\n }\n return defaultRender(tokens, idx, options, env, self);\n};\n\nexport interface ActionHeaderProps {\n execute: any[];\n thinks: string,\n}\n\n// ActionHeader 组件\nexport const ActionHeader: React.FC<ActionHeaderProps> = ({ execute = [], thinks = '' }) => {\n const styles = useStyles();\n const [expanded, setExpanded] = useState(true);\n const [executeExpanded, setExecuteExpanded] = useState(false);\n\n // 关键修复:只要有思考内容或执行过程就显示,不要同时要求两者都有\n if (!thinks && (!execute || execute.length === 0)) return null;\n\n const last = execute[execute.length - 1] || {};\n const { name } = last;\n const icon = last?.icon || last?.extra?.icon;\n\n return (\n <div className={styles.actionHeaderWrapper}>\n {!expanded && (\n <div className={styles.actionTitle} onClick={() => setExpanded(v => !v)}>\n <img src={thinkIcon} alt=\"icon\" className={styles.actionHeaderIcon} />\n <span className={styles.flex1}>运行过程</span>\n <img alt=\"展开icon\" src={arrowDown} className={styles.w('16px')} />\n </div>\n )}\n {expanded && (\n <div className={styles.actionHeaderDetail}>\n <div className={styles.actionDetailTitle} onClick={() => setExpanded(v => !v)}>\n <img src={thinkIcon} alt=\"\" className={clsx(styles.w(14))} />\n <div className={clsx(styles.flex1, styles.pl(10))}>隐藏运行过程</div>\n <img alt=\"收起icon\" src={arrowUp} className={styles.w('16px')} />\n </div>\n \n {thinks && (\n <div className={styles.actionDetailContent} style={{ whiteSpace: 'pre-line' }}>\n {thinks}\n </div>\n )}\n \n {execute && execute.length > 0 && (\n <>\n {!executeExpanded && (\n <div className={styles.executeHiddenWrapper} onClick={() => setExecuteExpanded(v => !v)}>\n {icon && <img src={icon} alt=\"icon\" className={styles.h(15)} />}\n <span className={styles.flex1}>{name}</span>\n <img alt=\"工具icon\" src={arrowDownBlue} className={styles.w('16px')} />\n </div>\n )}\n {executeExpanded && (\n <div className={styles.executeWrapper}>\n <div className={styles.executeTitle} onClick={() => setExecuteExpanded(v => !v)}>\n <img src={groupIcon} alt=\"icon\" className={styles.executeHeaderIcon} />\n <span className={styles.flex1}>隐藏运行详情</span>\n <img alt=\"展开详情icon\" src={arrowUp} className={styles.w('16px')} />\n </div>\n <div className={styles.executeContent}>\n {execute.map((action: any, idx: number) => {\n const thinkIcon = action?.expandIcon || action?.extra?.expandIcon || action?.extra?.icon || action?.icon;\n const thinkCost = action?.cost || action?.extra?.cost;\n return (\n <div key={action.uniqueId || idx} className={styles.actionHeaderDetailItem}>\n {thinkIcon && <img src={thinkIcon} alt=\"icon\" className={styles.actionHeaderIcon} />}\n <span>{action?.name}</span>\n <span className={styles.actionHeaderCost}>{thinkCost ? `${thinkCost}s` : ''}</span>\n </div>\n );\n })}\n </div>\n </div>\n )}\n </>\n )}\n </div>\n )}\n </div>\n );\n};\n\n// 默认消息功能区\nconst defaultActions: ActionItem[] = [\n {\n key: 'redo',\n icon: <RedoOutlined />,\n tooltip: '重新生成',\n },\n {\n key: 'copy',\n icon: <CopyOutlined />,\n tooltip: '复制',\n },\n {\n key: 'delete',\n icon: <DeleteOutlined />,\n tooltip: '删除',\n },\n];\n\n\nconst XAiChatbot: React.FC<XAiChatbotProps> = (props) => {\n // 使用新的 Hook 来处理 Provider 上下文\n const { mergedProps } = useChatbotContext(props);\n\n const {\n navbarShow = false,\n navbar,\n renderNavbar = null,\n clearBtnShow = true,\n inputShow = true,\n // renderMessageContent,\n // quickReplies = [],\n // quickRepliesVisible = true,\n // onQuickReplyClick,\n loading: propLoading = false,\n messageTooltip,\n avatar,\n userAvatar,\n messages: propMessages,\n text = '',\n footerTips = '',\n empty = null,\n emptyStateImage = emptyIcon,\n emptyStateText = '我的智能体',\n messageActions = defaultActions,\n onMessagesActionsCallback,\n // 点击帮助消息\n onSuggestMessageClick,\n onSend,\n onClear,\n onStop,\n providerId,\n // 消息顶部\n messageTop,\n } = mergedProps;\n\n // 如果在 Provider 中,使用 Provider 的状态\n const messages = mergedProps.messages || propMessages || [];\n const loading = mergedProps.loading || propLoading;\n\n const [content, setContent] = useState<string>(text); // 输入框文本\n const lastMessageId = useRef<string>('');\n const isScriptScrolling = useRef<boolean>(false);\n const chatId = providerId ? `za-chatbot-container-${providerId}` : 'za-chatbot-container';\n\n // 滚动到最底部\n const scrollToBottom = () => {\n isScriptScrolling.current = true;\n setTimeout(() => {\n const mainChatWrapper = document.getElementById(chatId);\n if (mainChatWrapper) {\n mainChatWrapper.scrollTop = mainChatWrapper?.scrollHeight;\n }\n isScriptScrolling.current = false;\n }, 0);\n };\n\n // 消息功能区组件\n const FooterActions: React.FC<{ data: Messages; lastMessage: boolean }> = ({ data, lastMessage = false }) => (\n <div className={clsx(styles.flex, styles.gap(13))}>\n {messageActions.map((action: ActionItem, index: number) => {\n if (!lastMessage && action.key === 'redo') return null;\n return (\n <Tooltip key={action.key} title={action.tooltip}>\n <span className={styles.cursor('pointer')} onClick={() => onMessagesActionsCallback?.(index, data)}>\n {action.icon}\n {action.render?.(index, data)}\n </span>\n </Tooltip>\n );\n })}\n </div>\n );\n\n // 消息底部区域\n const MessageFooter: React.FC<{ data: Messages; lastMessage: boolean }> = ({ data, lastMessage = false }) => (\n <>\n {messageTooltip?.(data)}\n <FooterActions data={data} lastMessage={lastMessage} />\n </>\n );\n\n // 聊天角色\n const rolesObject: GetProp<typeof Bubble.List, 'roles'> = {\n assistant: {\n placement: 'start',\n avatar: { icon: avatar || <UserOutlined className={clsx(styles.bg('#fde3cf'), styles.userAvatar)} /> },\n typing: { step: 5, interval: 20 },\n style: {\n maxWidth: 600,\n },\n classNames: {\n content: 'assistant-content',\n },\n },\n user: {\n placement: 'end',\n avatar: { icon: userAvatar || <UserOutlined className={clsx(styles.bg('#87d068'), styles.userAvatar)} /> },\n classNames: {\n content: 'user-content',\n },\n },\n suggestion: {\n placement: 'start',\n avatar: { icon: <UserOutlined />, style: { visibility: 'hidden' } },\n variant: 'borderless',\n },\n };\n\n // 触发发送\n const handleSend = (type: string, content: string) => {\n if (content.trim()) {\n // 直接使用合并后的 onSend,自动处理 Provider 和独立模式\n onSend?.(type, content);\n setContent(''); // 发送后清空输入框内容\n scrollToBottom();\n }\n };\n\n // 输出内容\n const handleChange = (content: string) => {\n setContent(content);\n }\n\n // 停止生成\n const handleStop = () => {\n onStop?.();\n }\n\n // 导航栏\n const NavBar: React.FC = () => {\n if (renderNavbar) {\n return renderNavbar();\n } if (navbar?.title) {\n return (\n <header className={styles.navbar}>\n {navbar.avatar && <img src={navbar.avatar} className={styles.avatar} alt=\"\" />}\n <div>\n <div className={styles.title}>{navbar.title}</div>\n <div className={styles.subtitle}>{navbar.subtitle}</div>\n </div>\n </header>\n );\n }\n return <></>;\n };\n\n // 确认清除\n const confirmClear = () => {\n onClear?.();\n };\n\n // 空状态\n const EmptyState = useMemo(() => () => (\n empty ? empty : <div className={styles.emptyWrapper}>\n <img src={emptyStateImage} alt=\"空状态图标\" className={styles.emptyImg} />\n <div className={clsx(styles.text(16), styles.weight(600), styles.textColor('#343434'))}>{emptyStateText}</div>\n </div>\n // eslint-disable-next-line react-hooks/exhaustive-deps\n ), [emptyStateImage, emptyStateText]);\n\n return (\n <>\n <GlobalStyle />\n <MarkdownGlobalStyle />\n <div id=\"x-ai-chatbot\" className={styles.wrapper}>\n { navbarShow && <NavBar /> }\n {/** 消息容器 */}\n <div className={styles.messageContainer}>\n {/* 消息列表主体 */}\n {\n messages?.length\n ? (\n <Bubble.List\n id={chatId}\n roles={rolesObject}\n className={styles.messageList}\n items={messages.map((msg: any) => {\n const { id, role, status, type, execute = [], thinks = '', extra = { noFooter: false } } = msg as Messages;\n // 最后一条 AI消息标识\n if (role === MessageRole.assistant) {\n lastMessageId.current = id;\n }\n // 会话内容\n const bubbleContent: any = {\n key: id,\n role,\n loading: status === MessageStatus.init,\n header: (() => messageTop || \n <ActionHeader\n execute={execute}\n thinks={thinks}\n />),\n content: (() => {\n // 文本消息\n if (type === 'TextMessage') {\n // 用户消息\n if (role === 'user') {\n return (\n <div\n className=\"markdown-body\"\n style={{\n minWidth: 0,\n maxWidth: 600,\n }}\n >\n {msg.content?.text}\n </div>\n );\n }\n // 输出html字符串\n const html = md.render(msg.content?.text || '');\n // 生成React节点\n const htmlString = reactHtmlParser(html);\n return (\n <>\n <div\n className=\"markdown-body\"\n style={{\n minWidth: 0,\n maxWidth: 600,\n }}\n >\n {htmlString}\n </div>\n </>\n );\n }\n // 提示类型\n if (type === 'SuggestionMessage') {\n return (\n <Prompts\n vertical\n items={msg.content as any}\n onItemClick={(info) => {\n onSuggestMessageClick?.(info.data, id, 'text');\n if (info.data.description) {\n onSend?.('text', info.data.description as string);\n }\n }}\n />\n );\n }\n // 其他类型...\n return null;\n })(),\n };\n\n if (!extra.noFooter) {\n bubbleContent.footer = (() => {\n return (\n role === MessageRole.assistant && status !== MessageStatus.failed && (\n <>\n <MessageFooter data={msg as Messages} lastMessage={lastMessageId.current === id} />\n </>\n )\n );\n });\n }\n\n return bubbleContent;\n })}\n />\n )\n : (\n <EmptyState />\n )\n }\n </div>\n {/* 输入框 */}\n { inputShow && <XAiSender\n value={content}\n loading={loading}\n footerTips={footerTips}\n clearBtnShow={clearBtnShow}\n onChange={handleChange}\n onSubmit={handleSend}\n onStop={handleStop}\n onClear={confirmClear}\n /> }\n </div>\n </>\n );\n};\n\nexport default XAiChatbot;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["// 文件: components/XAiChatbot/index.tsx\n\nimport React, {\n useRef,\n useState,\n useMemo,\n} from 'react';\nimport {\n Tooltip,\n GetProp,\n} from 'antd';\nimport {\n Bubble,\n Prompts,\n} from '@ant-design/x';\nimport {\n UserOutlined,\n RedoOutlined,\n CopyOutlined,\n DeleteOutlined,\n} from '@ant-design/icons';\nimport clsx from 'clsx';\nimport MarkdownIt from 'markdown-it';\nimport reactHtmlParser from 'react-html-parser';\nimport MarkdownGlobalStyle from '@/styles/markdown';\nimport {\n MessageStatus,\n MessageRole,\n Messages,\n} from '@/types/XAiMessage';\nimport {\n XAiChatbotProps,\n ActionItem,\n} from '@/types/XAiChatbot';\nimport emptyIcon from '@/assets/empty.png';\nimport arrowUp from '@/assets/arrow-up.png';\nimport arrowDown from '@/assets/arrow-down.png';\nimport thinkIcon from '@/assets/think.png';\nimport groupIcon from '@/assets/group.png';\nimport arrowDownBlue from '@/assets/arrow-down-blue.png';\nimport { useChatbotContext } from '@/hooks/useProviderContext';\nimport { useStyles, GlobalStyle } from './styles';\nimport XAiSender from '../XAiSender';\n\nconst styles = useStyles();\n\nconst md = new MarkdownIt({\n html: true,\n linkify: true,\n typographer: true,\n});\n\n// 自定义 link_open 渲染规则\nconst defaultRender = md.renderer.rules.link_open || ((tokens, idx, options, env, self) => {\n return self.renderToken(tokens, idx, options);\n});\n\n// a 标签打开规则\nmd.renderer.rules.link_open = (tokens, idx, options, env, self) => {\n // 添加 target=\"_blank\"\n const aIndex = tokens[idx].attrIndex('target');\n if (aIndex < 0) {\n tokens[idx].attrPush(['target', '_blank']);\n } else {\n tokens[idx].attrs![aIndex][1] = '_blank';\n }\n // 添加 rel=\"noopener noreferrer\"\n const relIndex = tokens[idx].attrIndex('rel');\n if (relIndex < 0) {\n tokens[idx].attrPush(['rel', 'noopener noreferrer']);\n } else {\n tokens[idx].attrs![relIndex][1] = 'noopener noreferrer';\n }\n return defaultRender(tokens, idx, options, env, self);\n};\n\nexport interface ActionHeaderProps {\n execute: any[];\n thinks: string;\n}\n\n// ActionHeader 组件\nexport const ActionHeader: React.FC<ActionHeaderProps> = ({ execute = [], thinks = '' }) => {\n const styles = useStyles();\n const [expanded, setExpanded] = useState(true);\n const [executeExpanded, setExecuteExpanded] = useState(false);\n\n // 关键修复:只要有思考内容或执行过程就显示,不要同时要求两者都有\n if (!thinks && (!execute || execute.length === 0)) return null;\n\n const last = execute[execute.length - 1] || {};\n const { name } = last;\n const icon = last?.icon || last?.extra?.icon;\n\n return (\n <div className={styles.actionHeaderWrapper}>\n {!expanded && (\n <div className={styles.actionTitle} onClick={() => setExpanded((v) => !v)}>\n <img src={thinkIcon} alt=\"icon\" className={styles.actionHeaderIcon} />\n <span className={styles.flex1}>运行过程</span>\n <img alt=\"展开icon\" src={arrowDown} className={styles.w('16px')} />\n </div>\n )}\n {expanded && (\n <div className={styles.actionHeaderDetail}>\n <div className={styles.actionDetailTitle} onClick={() => setExpanded((v) => !v)}>\n <img src={thinkIcon} alt=\"\" className={clsx(styles.w(14))} />\n <div className={clsx(styles.flex1, styles.pl(10))}>隐藏运行过程</div>\n <img alt=\"收起icon\" src={arrowUp} className={styles.w('16px')} />\n </div>\n\n {thinks && (\n <div className={styles.actionDetailContent} style={{ whiteSpace: 'pre-line' }}>\n {thinks}\n </div>\n )}\n\n {execute && execute.length > 0 && (\n <>\n {!executeExpanded && (\n <div className={styles.executeHiddenWrapper} onClick={() => setExecuteExpanded((v) => !v)}>\n {icon && <img src={icon} alt=\"icon\" className={styles.h(15)} />}\n <span className={styles.flex1}>{name}</span>\n <img alt=\"工具icon\" src={arrowDownBlue} className={styles.w('16px')} />\n </div>\n )}\n {executeExpanded && (\n <div className={styles.executeWrapper}>\n <div className={styles.executeTitle} onClick={() => setExecuteExpanded((v) => !v)}>\n <img src={groupIcon} alt=\"icon\" className={styles.executeHeaderIcon} />\n <span className={styles.flex1}>隐藏运行详情</span>\n <img alt=\"展开详情icon\" src={arrowUp} className={styles.w('16px')} />\n </div>\n <div className={styles.executeContent}>\n {execute.map((action: any, idx: number) => {\n const thinkIcon = action?.expandIcon || action?.extra?.expandIcon || action?.extra?.icon || action?.icon;\n const thinkCost = action?.cost || action?.extra?.cost;\n return (\n <div key={action.uniqueId || idx} className={styles.actionHeaderDetailItem}>\n {thinkIcon && <img src={thinkIcon} alt=\"icon\" className={styles.actionHeaderIcon} />}\n <span>{action?.name}</span>\n <span className={styles.actionHeaderCost}>{thinkCost ? `${thinkCost}s` : ''}</span>\n </div>\n );\n })}\n </div>\n </div>\n )}\n </>\n )}\n </div>\n )}\n </div>\n );\n};\n\n// 默认消息功能区\nexport const defaultActions: ActionItem[] = [\n {\n key: 'redo',\n icon: <RedoOutlined />,\n tooltip: '重新生成',\n },\n {\n key: 'copy',\n icon: <CopyOutlined />,\n tooltip: '复制',\n },\n {\n key: 'delete',\n icon: <DeleteOutlined />,\n tooltip: '删除',\n },\n];\n\nconst XAiChatbot: React.FC<XAiChatbotProps> = (props) => {\n // 使用新的 Hook 来处理 Provider 上下文\n const { mergedProps } = useChatbotContext(props);\n\n const {\n navbarShow = false,\n navbar,\n renderNavbar = null,\n clearBtnShow = true,\n inputShow = true,\n // renderMessageContent,\n // quickReplies = [],\n // quickRepliesVisible = true,\n // onQuickReplyClick,\n loading: propLoading = false,\n messageTooltip,\n avatar,\n userAvatar,\n messages: propMessages,\n text = '',\n footerTips = '',\n empty = null,\n emptyStateImage = emptyIcon,\n emptyStateText = '我的智能体',\n messageActions = defaultActions,\n onMessagesActionsCallback,\n // 点击帮助消息\n onSuggestMessageClick,\n onSend,\n onClear,\n onStop,\n providerId,\n // 消息顶部\n messageTop,\n } = mergedProps;\n\n // 如果在 Provider 中,使用 Provider 的状态\n const messages = mergedProps.messages || propMessages || [];\n const loading = mergedProps.loading || propLoading;\n\n const [content, setContent] = useState<string>(text); // 输入框文本\n const lastMessageId = useRef<string>('');\n const isScriptScrolling = useRef<boolean>(false);\n const chatId = providerId ? `za-chatbot-container-${providerId}` : 'za-chatbot-container';\n\n // 滚动到最底部\n const scrollToBottom = () => {\n isScriptScrolling.current = true;\n setTimeout(() => {\n const mainChatWrapper = document.getElementById(chatId);\n if (mainChatWrapper) {\n mainChatWrapper.scrollTop = mainChatWrapper?.scrollHeight;\n }\n isScriptScrolling.current = false;\n }, 0);\n };\n\n // 消息功能区组件\n const FooterActions: React.FC<{ data: Messages; lastMessage: boolean }> = ({ data, lastMessage = false }) => (\n <div className={clsx(styles.flex, styles.gap(13))}>\n {messageActions.map((action: ActionItem, index: number) => {\n if (!lastMessage && action.key === 'redo') return null;\n return (\n <Tooltip key={action.key} title={action.tooltip}>\n <span className={styles.cursor('pointer')} onClick={() => onMessagesActionsCallback?.(index, data)}>\n {action.icon}\n {action.render?.(index, data)}\n </span>\n </Tooltip>\n );\n })}\n </div>\n );\n\n // 消息底部区域\n const MessageFooter: React.FC<{ data: Messages; lastMessage: boolean }> = ({ data, lastMessage = false }) => (\n <>\n {messageTooltip?.(data)}\n <FooterActions data={data} lastMessage={lastMessage} />\n </>\n );\n\n // 聊天角色\n const rolesObject: GetProp<typeof Bubble.List, 'roles'> = {\n assistant: {\n placement: 'start',\n avatar: { icon: avatar || <UserOutlined className={clsx(styles.bg('#fde3cf'), styles.userAvatar)} /> },\n typing: { step: 5, interval: 20 },\n style: {\n maxWidth: 600,\n },\n classNames: {\n content: 'assistant-content',\n },\n },\n user: {\n placement: 'end',\n avatar: { icon: userAvatar || <UserOutlined className={clsx(styles.bg('#87d068'), styles.userAvatar)} /> },\n classNames: {\n content: 'user-content',\n },\n },\n suggestion: {\n placement: 'start',\n avatar: { icon: <UserOutlined />, style: { visibility: 'hidden' } },\n variant: 'borderless',\n },\n };\n\n // 触发发送\n const handleSend = (type: string, content: string) => {\n if (content.trim()) {\n // 直接使用合并后的 onSend,自动处理 Provider 和独立模式\n onSend?.(type, content);\n setContent(''); // 发送后清空输入框内容\n scrollToBottom();\n }\n };\n\n // 输出内容\n const handleChange = (content: string) => {\n setContent(content);\n };\n\n // 停止生成\n const handleStop = () => {\n onStop?.();\n };\n\n // 导航栏\n const NavBar: React.FC = () => {\n if (renderNavbar) {\n return renderNavbar();\n } if (navbar?.title) {\n return (\n <header className={styles.navbar}>\n {navbar.avatar && <img src={navbar.avatar} className={styles.avatar} alt=\"\" />}\n <div>\n <div className={styles.title}>{navbar.title}</div>\n <div className={styles.subtitle}>{navbar.subtitle}</div>\n </div>\n </header>\n );\n }\n return <></>;\n };\n\n // 确认清除\n const confirmClear = () => {\n onClear?.();\n };\n\n // 空状态\n const EmptyState = useMemo(() => () => (\n empty || (\n <div className={styles.emptyWrapper}>\n <img src={emptyStateImage} alt=\"空状态图标\" className={styles.emptyImg} />\n <div className={clsx(styles.text(16), styles.weight(600), styles.textColor('#343434'))}>{emptyStateText}</div>\n </div>\n )\n // eslint-disable-next-line react-hooks/exhaustive-deps\n ), [emptyStateImage, emptyStateText]);\n\n return (\n <>\n <GlobalStyle />\n <MarkdownGlobalStyle />\n <div id=\"x-ai-chatbot\" className={styles.wrapper}>\n { navbarShow && <NavBar /> }\n {/** 消息容器 */}\n <div className={styles.messageContainer}>\n {/* 消息列表主体 */}\n {\n messages?.length\n ? (\n <Bubble.List\n id={chatId}\n roles={rolesObject}\n className={styles.messageList}\n items={messages.map((msg: any) => {\n const { id, role, status, type, execute = [], thinks = '', extra = { noFooter: false } } = msg as Messages;\n // 最后一条 AI消息标识\n if (role === MessageRole.assistant) {\n lastMessageId.current = id;\n }\n // 会话内容\n const bubbleContent: any = {\n key: id,\n role,\n loading: status === MessageStatus.init,\n header: (() => messageTop\n || (\n <ActionHeader\n execute={execute}\n thinks={thinks}\n />\n )),\n content: (() => {\n // 文本消息\n if (type === 'TextMessage') {\n // 用户消息\n if (role === 'user') {\n return (\n <div\n className=\"markdown-body\"\n style={{\n minWidth: 0,\n maxWidth: 600,\n }}\n >\n {msg.content?.text}\n </div>\n );\n }\n // 输出html字符串\n const html = md.render(msg.content?.text || '');\n // 生成React节点\n const htmlString = reactHtmlParser(html);\n return (\n <>\n <div\n className=\"markdown-body\"\n style={{\n minWidth: 0,\n maxWidth: 600,\n }}\n >\n {htmlString}\n </div>\n </>\n );\n }\n // 提示类型\n if (type === 'SuggestionMessage') {\n return (\n <Prompts\n vertical\n items={msg.content as any}\n onItemClick={(info) => {\n onSuggestMessageClick?.(info.data, id, 'text');\n if (info.data.description) {\n onSend?.('text', info.data.description as string);\n }\n }}\n />\n );\n }\n // 其他类型...\n return null;\n })(),\n };\n\n if (!extra.noFooter) {\n bubbleContent.footer = (() => {\n return (\n role === MessageRole.assistant && status !== MessageStatus.failed && (\n <>\n <MessageFooter data={msg as Messages} lastMessage={lastMessageId.current === id} />\n </>\n )\n );\n });\n }\n\n return bubbleContent;\n })}\n />\n )\n : (\n <EmptyState />\n )\n }\n </div>\n {/* 输入框 */}\n { inputShow && (\n <XAiSender\n value={content}\n loading={loading}\n footerTips={footerTips}\n clearBtnShow={clearBtnShow}\n onChange={handleChange}\n onSubmit={handleSend}\n onStop={handleStop}\n onClear={confirmClear}\n />\n ) }\n </div>\n </>\n );\n};\n\nexport default XAiChatbot;\n"],
5
+ "mappings": "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",
6
6
  "names": ["MarkdownIt", "styles", "React", "thinkIcon", "arrowDown", "clsx", "arrowUp", "arrowDownBlue", "groupIcon", "_a", "emptyIcon", "content", "MarkdownGlobalStyle", "reactHtmlParser", "XAiSender"]
7
7
  }
@@ -32,7 +32,7 @@ __export(XAiProvider_exports, {
32
32
  default: () => XAiProvider_default
33
33
  });
34
34
  module.exports = __toCommonJS(XAiProvider_exports);
35
- var import_react = require("react");
35
+ var import_react = __toESM(require("react"));
36
36
  var import_antd = require("antd");
37
37
  var import_copy_to_clipboard = __toESM(require("copy-to-clipboard"));
38
38
  var import_x = require("@ant-design/x");
@@ -41,6 +41,10 @@ var import_AiProviderContext = require("../../context/AiProviderContext");
41
41
  var import_useAgentGenerator = __toESM(require("../../hooks/useAgentGenerator"));
42
42
  var import_constants = require("../../constants");
43
43
  var import_user = __toESM(require("../../assets/user.png"));
44
+ var import_common = require("../../styles/common");
45
+ var import_DislikeFeedback = __toESM(require("../DislikeFeedback"));
46
+ var import_api = require("../../services/api");
47
+ var import_XAiChatbot = require("../XAiChatbot");
44
48
  var { confirm } = import_antd.Modal;
45
49
  var XAiProvider = (0, import_react.forwardRef)(({
46
50
  url,
@@ -88,7 +92,7 @@ var XAiProvider = (0, import_react.forwardRef)(({
88
92
  return;
89
93
  const resizeObserver = new ResizeObserver((entries) => {
90
94
  for (const entry of entries) {
91
- const width = entry.contentRect.width;
95
+ const { width } = entry.contentRect;
92
96
  setIsNarrow(width <= import_constants.MOBILE_MAX_WIDTH);
93
97
  }
94
98
  });
@@ -105,7 +109,8 @@ var XAiProvider = (0, import_react.forwardRef)(({
105
109
  const handleCreateNewMessage = () => {
106
110
  createNewChat();
107
111
  };
108
- const handleActions = (index, actionData) => {
112
+ const handleActions = async (index, actionData) => {
113
+ var _a2;
109
114
  const { content, id } = actionData || {};
110
115
  const { text = "" } = content;
111
116
  switch (index) {
@@ -128,6 +133,35 @@ var XAiProvider = (0, import_react.forwardRef)(({
128
133
  }
129
134
  break;
130
135
  }
136
+ case 3: {
137
+ const { appNo, pt, tc } = config || {};
138
+ if (appNo && pt && tc) {
139
+ const res = await (0, import_api.addFeedback)({
140
+ url,
141
+ token,
142
+ appNo,
143
+ pt,
144
+ tc,
145
+ requestId: (_a2 = actionData.raw) == null ? void 0 : _a2.requestId,
146
+ isLike: 1
147
+ });
148
+ if (res.success) {
149
+ import_antd.message.success("感谢您的反馈");
150
+ setMessages((prev) => {
151
+ return prev.map((item) => {
152
+ if (item.id === id) {
153
+ return {
154
+ ...item,
155
+ isLike: 1
156
+ };
157
+ }
158
+ return item;
159
+ });
160
+ });
161
+ }
162
+ }
163
+ break;
164
+ }
131
165
  }
132
166
  };
133
167
  const handleSuggestMessageClick = (_item, id) => {
@@ -163,7 +197,7 @@ var XAiProvider = (0, import_react.forwardRef)(({
163
197
  confirm({
164
198
  title: "编辑对话名称",
165
199
  icon: null,
166
- content: /* @__PURE__ */ React.createElement(
200
+ content: /* @__PURE__ */ import_react.default.createElement(
167
201
  import_antd.Input,
168
202
  {
169
203
  defaultValue: inputValue,
@@ -194,7 +228,7 @@ var XAiProvider = (0, import_react.forwardRef)(({
194
228
  case "delete":
195
229
  confirm({
196
230
  title: "确认删除?",
197
- icon: /* @__PURE__ */ React.createElement(import_icons.ExclamationCircleFilled, null),
231
+ icon: /* @__PURE__ */ import_react.default.createElement(import_icons.ExclamationCircleFilled, null),
198
232
  content: "该对话内容将被删除无法恢复。",
199
233
  okText: "确认删除",
200
234
  okType: "danger",
@@ -219,54 +253,117 @@ var XAiProvider = (0, import_react.forwardRef)(({
219
253
  const { cost, token: tokenCount } = finalResult.extra || {};
220
254
  if (!cost && !token)
221
255
  return null;
222
- return /* @__PURE__ */ React.createElement("div", { style: { display: "flex", alignItems: "center", fontSize: "12px", color: "#949494", flex: 1, paddingRight: "40px" } }, cost !== void 0 && cost !== null && /* @__PURE__ */ React.createElement("div", null, cost, "s"), tokenCount && /* @__PURE__ */ React.createElement(import_antd.Divider, { type: "vertical" }), tokenCount && /* @__PURE__ */ React.createElement("div", null, tokenCount, " tokens"));
256
+ return /* @__PURE__ */ import_react.default.createElement("div", { style: { display: "flex", alignItems: "center", fontSize: "12px", color: "#949494", flex: 1, paddingRight: "40px" } }, cost !== void 0 && cost !== null && /* @__PURE__ */ import_react.default.createElement("div", null, cost, "s"), tokenCount && /* @__PURE__ */ import_react.default.createElement(import_antd.Divider, { type: "vertical" }), tokenCount && /* @__PURE__ */ import_react.default.createElement("div", null, tokenCount, " tokens"));
223
257
  };
224
258
  const clearBtnShow = typeof ((_a = config == null ? void 0 : config.chatProps) == null ? void 0 : _a.clearBtnShow) !== "undefined" ? config.chatProps.clearBtnShow : !((_b = config == null ? void 0 : config.session) == null ? void 0 : _b.showSessionList);
225
- return /* @__PURE__ */ React.createElement(import_x.XProvider, null, /* @__PURE__ */ React.createElement(
226
- import_AiProviderContext.XAiContext.Provider,
259
+ return /* @__PURE__ */ import_react.default.createElement(
260
+ import_antd.ConfigProvider,
227
261
  {
228
- value: {
229
- avatar: /* @__PURE__ */ React.createElement("img", { src: icon, alt: "智能体头像" }),
230
- userAvatar: /* @__PURE__ */ React.createElement("img", { src: import_user.default, alt: "用户头像" }),
231
- emptyStateImage: icon,
232
- emptyStateText: appName,
233
- footerTips: "内容由AI生成,无法确保真实准确,仅供参考",
234
- providerId,
235
- sessionList,
236
- sessionTotal: sessionPagination.total,
237
- token,
238
- messages,
239
- loading,
240
- error: null,
241
- activeKey: currentSessionId,
242
- clearBtnShow,
243
- inputShow: ((_c = config == null ? void 0 : config.chatProps) == null ? void 0 : _c.inputShow) || true,
244
- isNarrow,
245
- messageTooltip: ToolTip,
246
- onSend: handleSendMessage,
247
- onClear: handleCreateNewMessage,
248
- onNewChat: handleCreateNewMessage,
249
- onStop: stopChat,
250
- menu: menuConfig,
251
- onActiveChange: handleActiveChange,
252
- onSuggestMessageClick: handleSuggestMessageClick,
253
- onMessagesActionsCallback: handleActions,
254
- isInProvider: true
262
+ theme: {
263
+ token: {
264
+ colorPrimary: (appInfo == null ? void 0 : appInfo.appTheme) || import_common.primaryBlue
265
+ }
255
266
  }
256
267
  },
257
- /* @__PURE__ */ React.createElement(
258
- "div",
268
+ /* @__PURE__ */ import_react.default.createElement(import_x.XProvider, null, /* @__PURE__ */ import_react.default.createElement(
269
+ import_AiProviderContext.XAiContext.Provider,
259
270
  {
260
- ref: divRef,
261
- style: {
262
- display: "flex",
263
- height: "100%",
264
- position: "relative"
271
+ value: {
272
+ avatar: /* @__PURE__ */ import_react.default.createElement("img", { src: icon, alt: "智能体头像" }),
273
+ userAvatar: /* @__PURE__ */ import_react.default.createElement("img", { src: import_user.default, alt: "用户头像" }),
274
+ emptyStateImage: icon,
275
+ emptyStateText: appName,
276
+ footerTips: "内容由AI生成,无法确保真实准确,仅供参考",
277
+ providerId,
278
+ sessionList,
279
+ sessionTotal: sessionPagination.total,
280
+ token,
281
+ messages,
282
+ loading,
283
+ error: null,
284
+ activeKey: currentSessionId,
285
+ clearBtnShow,
286
+ inputShow: ((_c = config == null ? void 0 : config.chatProps) == null ? void 0 : _c.inputShow) || true,
287
+ isNarrow,
288
+ messageTooltip: ToolTip,
289
+ messageActions: [...import_XAiChatbot.defaultActions, {
290
+ key: "like",
291
+ tooltip: "赞",
292
+ render: (i, msg) => {
293
+ const isLike = msg.isLike === 1;
294
+ if (isLike) {
295
+ return /* @__PURE__ */ import_react.default.createElement(import_icons.LikeFilled, { style: { color: (appInfo == null ? void 0 : appInfo.appTheme) || import_common.primaryBlue } });
296
+ }
297
+ return /* @__PURE__ */ import_react.default.createElement(import_icons.LikeOutlined, null);
298
+ }
299
+ }, {
300
+ key: "dislike",
301
+ tooltip: "踩",
302
+ render: (_i, msg) => {
303
+ var _a2;
304
+ const requestId = (_a2 = msg.raw) == null ? void 0 : _a2.requestId;
305
+ return /* @__PURE__ */ import_react.default.createElement(
306
+ import_DislikeFeedback.default,
307
+ {
308
+ msg,
309
+ activeColor: (appInfo == null ? void 0 : appInfo.appTheme) || import_common.primaryBlue,
310
+ onSubmit: async (formData) => {
311
+ const res = await (0, import_api.addFeedback)({
312
+ ...formData,
313
+ requestId,
314
+ isLike: -1,
315
+ url,
316
+ appNo: config == null ? void 0 : config.appNo,
317
+ pt: config == null ? void 0 : config.pt,
318
+ tc: config == null ? void 0 : config.tc,
319
+ token
320
+ });
321
+ if (res.success) {
322
+ import_antd.message.success("已收到您的反馈,我们会努力做的更好");
323
+ setMessages((prev) => {
324
+ return prev.map((item) => {
325
+ if (item.id === msg.id) {
326
+ return {
327
+ ...item,
328
+ isLike: -1
329
+ };
330
+ }
331
+ return item;
332
+ });
333
+ });
334
+ return true;
335
+ }
336
+ return false;
337
+ }
338
+ }
339
+ );
340
+ }
341
+ }],
342
+ onSend: handleSendMessage,
343
+ onClear: handleCreateNewMessage,
344
+ onNewChat: handleCreateNewMessage,
345
+ onStop: stopChat,
346
+ menu: menuConfig,
347
+ onActiveChange: handleActiveChange,
348
+ onSuggestMessageClick: handleSuggestMessageClick,
349
+ onMessagesActionsCallback: handleActions,
350
+ isInProvider: true
265
351
  }
266
352
  },
267
- children
268
- )
269
- ));
353
+ /* @__PURE__ */ import_react.default.createElement(
354
+ "div",
355
+ {
356
+ ref: divRef,
357
+ style: {
358
+ display: "flex",
359
+ height: "100%",
360
+ position: "relative"
361
+ }
362
+ },
363
+ children
364
+ )
365
+ ))
366
+ );
270
367
  });
271
368
  var XAiProvider_default = XAiProvider;
272
369
  //# sourceMappingURL=index.js.map