@ai-group/chat-sdk 0.2.7 → 0.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +93 -214
- package/dist/cjs/components/XAiChatbot/index.js +4 -3
- package/dist/cjs/components/XAiChatbot/index.js.map +2 -2
- package/dist/cjs/components/XAiChatbot/styles.d.ts +2 -0
- package/dist/cjs/components/XAiChatbot/styles.js +31 -1
- package/dist/cjs/components/XAiChatbot/styles.js.map +2 -2
- package/dist/cjs/components/XAiConversations/XAiConversations.stories.d.ts +6 -0
- package/dist/cjs/components/XAiConversations/XAiConversations.stories.js +82 -0
- package/dist/cjs/components/XAiConversations/XAiConversations.stories.js.map +7 -0
- package/dist/cjs/components/XAiConversations/index.d.ts +4 -0
- package/dist/cjs/components/XAiConversations/index.js +59 -0
- package/dist/cjs/components/XAiConversations/index.js.map +7 -0
- package/dist/cjs/components/XAiProvider/XAiProvider.stories.d.ts +2 -2
- package/dist/cjs/components/XAiProvider/XAiProvider.stories.js +12 -12
- package/dist/cjs/components/XAiProvider/XAiProvider.stories.js.map +2 -2
- package/dist/cjs/components/XAiProvider/demo.styles.d.ts +35 -0
- package/dist/cjs/components/XAiProvider/demo.styles.js +37 -0
- package/dist/cjs/components/XAiProvider/demo.styles.js.map +7 -0
- package/dist/cjs/components/XAiProvider/index.js +8 -3
- package/dist/cjs/components/XAiProvider/index.js.map +3 -3
- package/dist/cjs/components/XAiWebSDKWrapper.js +7 -1
- package/dist/cjs/components/XAiWebSDKWrapper.js.map +2 -2
- package/dist/cjs/hooks/useAgentGenerator.d.ts +10 -2
- package/dist/cjs/hooks/useAgentGenerator.js +132 -7
- package/dist/cjs/hooks/useAgentGenerator.js.map +2 -2
- package/dist/cjs/services/api.d.ts +65 -3
- package/dist/cjs/services/api.js +33 -0
- package/dist/cjs/services/api.js.map +2 -2
- package/dist/cjs/types/XAiChatbot.d.ts +2 -0
- package/dist/cjs/types/XAiChatbot.js.map +1 -1
- package/dist/cjs/types/XAiConversations.d.ts +4 -0
- package/dist/cjs/types/XAiConversations.js +18 -0
- package/dist/cjs/types/XAiConversations.js.map +7 -0
- package/dist/cjs/types/XAiProvider.d.ts +14 -0
- package/dist/cjs/types/XAiProvider.js +9 -0
- package/dist/cjs/types/XAiProvider.js.map +3 -3
- package/dist/cjs/types/index.d.ts +1 -0
- package/dist/cjs/types/index.js +3 -1
- package/dist/cjs/types/index.js.map +2 -2
- package/dist/cjs/utils/umdEntry.d.ts +4 -1
- package/dist/cjs/utils/umdEntry.js +14 -12
- package/dist/cjs/utils/umdEntry.js.map +2 -2
- package/dist/esm/components/XAiChatbot/index.js +11 -8
- package/dist/esm/components/XAiChatbot/index.js.map +1 -1
- package/dist/esm/components/XAiChatbot/styles.d.ts +2 -0
- package/dist/esm/components/XAiChatbot/styles.js +38 -38
- package/dist/esm/components/XAiChatbot/styles.js.map +1 -1
- package/dist/esm/components/XAiConversations/XAiConversations.stories.d.ts +6 -0
- package/dist/esm/components/XAiConversations/XAiConversations.stories.js +42 -0
- package/dist/esm/components/XAiConversations/XAiConversations.stories.js.map +1 -0
- package/dist/esm/components/XAiConversations/index.d.ts +4 -0
- package/dist/esm/components/XAiConversations/index.js +27 -0
- package/dist/esm/components/XAiConversations/index.js.map +1 -0
- package/dist/esm/components/XAiProvider/XAiProvider.stories.d.ts +2 -2
- package/dist/esm/components/XAiProvider/XAiProvider.stories.js +38 -180
- package/dist/esm/components/XAiProvider/XAiProvider.stories.js.map +1 -1
- package/dist/esm/components/XAiProvider/demo.styles.d.ts +35 -0
- package/dist/esm/components/XAiProvider/demo.styles.js +12 -0
- package/dist/esm/components/XAiProvider/demo.styles.js.map +1 -0
- package/dist/esm/components/XAiProvider/index.js +17 -3
- package/dist/esm/components/XAiProvider/index.js.map +1 -1
- package/dist/esm/components/XAiWebSDKWrapper.js +4 -1
- package/dist/esm/components/XAiWebSDKWrapper.js.map +1 -1
- package/dist/esm/hooks/useAgentGenerator.d.ts +10 -2
- package/dist/esm/hooks/useAgentGenerator.js +215 -30
- package/dist/esm/hooks/useAgentGenerator.js.map +1 -1
- package/dist/esm/services/api.d.ts +65 -3
- package/dist/esm/services/api.js +75 -0
- package/dist/esm/services/api.js.map +1 -1
- package/dist/esm/types/XAiChatbot.d.ts +2 -0
- package/dist/esm/types/XAiChatbot.js.map +1 -1
- package/dist/esm/types/XAiConversations.d.ts +4 -0
- package/dist/esm/types/XAiConversations.js +2 -0
- package/dist/esm/types/XAiConversations.js.map +1 -0
- package/dist/esm/types/XAiProvider.d.ts +14 -0
- package/dist/esm/types/XAiProvider.js +7 -0
- package/dist/esm/types/XAiProvider.js.map +1 -1
- package/dist/esm/types/index.d.ts +1 -0
- package/dist/esm/types/index.js +1 -0
- package/dist/esm/types/index.js.map +1 -1
- package/dist/esm/utils/umdEntry.d.ts +4 -1
- package/dist/esm/utils/umdEntry.js +22 -18
- package/dist/esm/utils/umdEntry.js.map +1 -1
- package/dist/umd/chat-sdk.min.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,82 @@
|
|
|
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/XAiConversations/XAiConversations.stories.tsx
|
|
30
|
+
var XAiConversations_stories_exports = {};
|
|
31
|
+
__export(XAiConversations_stories_exports, {
|
|
32
|
+
default: () => XAiConversations_stories_default,
|
|
33
|
+
基础用法: () => 基础用法
|
|
34
|
+
});
|
|
35
|
+
module.exports = __toCommonJS(XAiConversations_stories_exports);
|
|
36
|
+
var import_react = __toESM(require("react"));
|
|
37
|
+
var import__ = __toESM(require("."));
|
|
38
|
+
var meta = {
|
|
39
|
+
title: "AI组件/XAiConversations 对话记录管理",
|
|
40
|
+
component: import__.default,
|
|
41
|
+
parameters: {
|
|
42
|
+
layout: "centered"
|
|
43
|
+
},
|
|
44
|
+
tags: ["autodocs"],
|
|
45
|
+
argTypes: {}
|
|
46
|
+
};
|
|
47
|
+
var XAiConversations_stories_default = meta;
|
|
48
|
+
var BasicUsageStory = (args) => {
|
|
49
|
+
const items = Array.from({ length: 4 }).map((_, index) => ({
|
|
50
|
+
key: `item${index + 1}`,
|
|
51
|
+
label: `聊天记录 ${index + 1}`,
|
|
52
|
+
disabled: index === 3
|
|
53
|
+
}));
|
|
54
|
+
return /* @__PURE__ */ import_react.default.createElement(
|
|
55
|
+
"div",
|
|
56
|
+
{
|
|
57
|
+
style: {
|
|
58
|
+
backgroundColor: "rgb(240, 242, 245)",
|
|
59
|
+
minHeight: "300px",
|
|
60
|
+
minWidth: "700px",
|
|
61
|
+
display: "flex",
|
|
62
|
+
alignItems: "center",
|
|
63
|
+
paddingInline: "50px"
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
/* @__PURE__ */ import_react.default.createElement(
|
|
67
|
+
import__.default,
|
|
68
|
+
{
|
|
69
|
+
items
|
|
70
|
+
}
|
|
71
|
+
)
|
|
72
|
+
);
|
|
73
|
+
};
|
|
74
|
+
var 基础用法 = {
|
|
75
|
+
render: BasicUsageStory,
|
|
76
|
+
args: {}
|
|
77
|
+
};
|
|
78
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
79
|
+
0 && (module.exports = {
|
|
80
|
+
基础用法
|
|
81
|
+
});
|
|
82
|
+
//# sourceMappingURL=XAiConversations.stories.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/components/XAiConversations/XAiConversations.stories.tsx"],
|
|
4
|
+
"sourcesContent": ["import React from 'react';\nimport type { ConversationsProps } from '@ant-design/x';\nimport { type GetProp } from 'antd';\nimport type { Meta, StoryObj } from '@storybook/react-vite';\nimport XAiConversations from '.';\n\nconst meta: Meta<typeof XAiConversations> = {\n title: 'AI组件/XAiConversations 对话记录管理',\n component: XAiConversations,\n parameters: {\n layout: 'centered',\n },\n tags: ['autodocs'],\n argTypes: {\n },\n};\n\nexport default meta;\n type Story = StoryObj<typeof meta>;\n\nconst BasicUsageStory = (args: any) => {\n const items: GetProp<ConversationsProps, 'items'> = Array.from({ length: 4 }).map((_, index) => ({\n key: `item${index + 1}`,\n label: `聊天记录 ${index + 1}`,\n disabled: index === 3,\n }));\n\n return (\n <div style={{\n backgroundColor: 'rgb(240, 242, 245)',\n minHeight: '300px',\n minWidth: '700px',\n display: 'flex',\n alignItems: 'center',\n paddingInline: '50px',\n }}\n >\n <XAiConversations\n items={items}\n />\n </div>\n );\n};\n\nexport const 基础用法: Story = {\n render: BasicUsageStory,\n args: {\n },\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkB;AAIlB,eAA6B;AAE7B,IAAM,OAAsC;AAAA,EAC1C,OAAO;AAAA,EACP,WAAW,SAAAA;AAAA,EACX,YAAY;AAAA,IACV,QAAQ;AAAA,EACV;AAAA,EACA,MAAM,CAAC,UAAU;AAAA,EACjB,UAAU,CACV;AACF;AAEA,IAAO,mCAAQ;AAGf,IAAM,kBAAkB,CAAC,SAAc;AACrC,QAAM,QAA8C,MAAM,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,WAAW;AAAA,IAC/F,KAAK,OAAO,QAAQ;AAAA,IACpB,OAAO,QAAQ,QAAQ;AAAA,IACvB,UAAU,UAAU;AAAA,EACtB,EAAE;AAEF,SACE,6BAAAC,QAAA;AAAA,IAAC;AAAA;AAAA,MAAI,OAAO;AAAA,QACV,iBAAiB;AAAA,QACjB,WAAW;AAAA,QACX,UAAU;AAAA,QACV,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,eAAe;AAAA,MACjB;AAAA;AAAA,IAEE,6BAAAA,QAAA;AAAA,MAAC,SAAAD;AAAA,MAAA;AAAA,QACC;AAAA;AAAA,IACF;AAAA,EACF;AAEJ;AAEO,IAAM,OAAc;AAAA,EACzB,QAAQ;AAAA,EACR,MAAM,CACN;AACF;",
|
|
6
|
+
"names": ["XAiConversations", "React"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
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/XAiConversations/index.tsx
|
|
30
|
+
var XAiConversations_exports = {};
|
|
31
|
+
__export(XAiConversations_exports, {
|
|
32
|
+
default: () => XAiConversations_default
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(XAiConversations_exports);
|
|
35
|
+
var import_react = __toESM(require("react"));
|
|
36
|
+
var import_x = require("@ant-design/x");
|
|
37
|
+
var XAiConversations = (props) => {
|
|
38
|
+
const {
|
|
39
|
+
items,
|
|
40
|
+
style
|
|
41
|
+
} = props;
|
|
42
|
+
const [activeKey, setActiveKey] = (0, import_react.useState)("");
|
|
43
|
+
return /* @__PURE__ */ import_react.default.createElement(
|
|
44
|
+
import_x.Conversations,
|
|
45
|
+
{
|
|
46
|
+
activeKey,
|
|
47
|
+
onActiveChange: (v) => setActiveKey(v),
|
|
48
|
+
items,
|
|
49
|
+
style: {
|
|
50
|
+
width: 256,
|
|
51
|
+
background: "#fff",
|
|
52
|
+
borderRadius: "6px",
|
|
53
|
+
...style
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
);
|
|
57
|
+
};
|
|
58
|
+
var XAiConversations_default = XAiConversations;
|
|
59
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/components/XAiConversations/index.tsx"],
|
|
4
|
+
"sourcesContent": ["import React, { useState } from 'react';\nimport { Conversations } from '@ant-design/x';\nimport { type XAiConversationsProps } from '@/types/XAiConversations';\n\nconst XAiConversations: React.FC<XAiConversationsProps> = (props) => {\n const {\n items,\n style,\n } = props;\n\n const [activeKey, setActiveKey] = useState('');\n\n return (\n <Conversations\n activeKey={activeKey}\n onActiveChange={(v) => setActiveKey(v)}\n items={items}\n style={{\n width: 256,\n background: '#fff',\n borderRadius: '6px',\n ...style,\n }}\n />\n );\n};\n\nexport default XAiConversations;\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAgC;AAChC,eAA8B;AAG9B,IAAM,mBAAoD,CAAC,UAAU;AACnE,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,QAAM,CAAC,WAAW,YAAY,QAAI,uBAAS,EAAE;AAE7C,SACE,6BAAAA,QAAA;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,gBAAgB,CAAC,MAAM,aAAa,CAAC;AAAA,MACrC;AAAA,MACA,OAAO;AAAA,QACL,OAAO;AAAA,QACP,YAAY;AAAA,QACZ,cAAc;AAAA,QACd,GAAG;AAAA,MACL;AAAA;AAAA,EACF;AAEJ;AAEA,IAAO,2BAAQ;",
|
|
6
|
+
"names": ["React"]
|
|
7
|
+
}
|
|
@@ -3,5 +3,5 @@ import XAiProvider from './index';
|
|
|
3
3
|
declare const meta: Meta<typeof XAiProvider>;
|
|
4
4
|
export default meta;
|
|
5
5
|
type Story = StoryObj<typeof meta>;
|
|
6
|
-
export declare const
|
|
7
|
-
export declare const
|
|
6
|
+
export declare const 单聊天窗口: Story;
|
|
7
|
+
export declare const 多容器示例: Story;
|
|
@@ -29,9 +29,9 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
29
29
|
// src/components/XAiProvider/XAiProvider.stories.tsx
|
|
30
30
|
var XAiProvider_stories_exports = {};
|
|
31
31
|
__export(XAiProvider_stories_exports, {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
default: () => XAiProvider_stories_default,
|
|
33
|
+
单聊天窗口: () => 单聊天窗口,
|
|
34
|
+
多容器示例: () => 多容器示例
|
|
35
35
|
});
|
|
36
36
|
module.exports = __toCommonJS(XAiProvider_stories_exports);
|
|
37
37
|
var import_react = __toESM(require("react"));
|
|
@@ -69,7 +69,7 @@ var meta = {
|
|
|
69
69
|
]
|
|
70
70
|
};
|
|
71
71
|
var XAiProvider_stories_default = meta;
|
|
72
|
-
var
|
|
72
|
+
var 单聊天窗口 = {
|
|
73
73
|
render: (args) => /* @__PURE__ */ import_react.default.createElement("div", { style: { width: "400px", height: "600px" } }, /* @__PURE__ */ import_react.default.createElement(import_index.default, { ...args }, /* @__PURE__ */ import_react.default.createElement(
|
|
74
74
|
import_XAiChatbot.default,
|
|
75
75
|
{
|
|
@@ -77,22 +77,22 @@ var WithProvider = {
|
|
|
77
77
|
navbar: {
|
|
78
78
|
title: "Provider 聊天机器人",
|
|
79
79
|
subtitle: "由 Provider 管理消息",
|
|
80
|
-
avatar: "https://
|
|
80
|
+
avatar: "https://gw.alipayobjects.com/zos/bmw-prod/b874caa9-4458-412a-9ac6-a61486180a62.svg"
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
83
|
))),
|
|
84
84
|
args: {
|
|
85
85
|
url: "http://ai-platform.xline-dev.test.xinke.biz",
|
|
86
|
-
token: "eyJhbGciOiJIUzUxMiJ9.
|
|
86
|
+
token: "eyJhbGciOiJIUzUxMiJ9.eyJqdGkiOiJkZGUzOTcwOS0wMDdlLTQ5YWItYjIzMy1iMTZmYzRkMDU2N2QiLCJzdWIiOiJSZXgiLCJpc3MiOiJodHRwOi8vY2hhdC10ZXN0LnpheGxpbmUuY29tIiwiYXVkIjoiTWFpblN0YXRpb24iLCJpYXQiOjE3NTQ1Njc4NTMsImV4cCI6MTc1NDU3NTA1MywidHlwZSI6ImFjY2VzcyIsImNsaWVudF9pZCI6IkFwcDE5NTAwMjA1OTQ0NTI2NjAyMjQiLCJzY29wZSI6ImFsbCIsInBsYXRmb3JtX3R5cGUiOiJNYWluU3RhdGlvbiJ9.jH9muK_MWcE9NtWxPJRqeoeGsnRf79B2oOpQjemJ6kY5_UjAT06BWlX3bszHeRbJbk1OM_kfCeugiO3Gokpj2A",
|
|
87
87
|
config: {
|
|
88
|
-
appNo: "
|
|
88
|
+
appNo: "App1950020594452660224",
|
|
89
89
|
pt: "MainStation",
|
|
90
90
|
tc: "ZABX"
|
|
91
91
|
},
|
|
92
92
|
providerId: "demo-provider"
|
|
93
93
|
}
|
|
94
94
|
};
|
|
95
|
-
var
|
|
95
|
+
var 多容器示例 = {
|
|
96
96
|
render: (args) => /* @__PURE__ */ import_react.default.createElement("div", { style: { display: "flex", gap: "20px" } }, /* @__PURE__ */ import_react.default.createElement("div", { style: { width: "400px", height: "600px" } }, /* @__PURE__ */ import_react.default.createElement(import_index.default, { ...args, providerId: "provider-1" }, /* @__PURE__ */ import_react.default.createElement(
|
|
97
97
|
import_XAiChatbot.default,
|
|
98
98
|
{
|
|
@@ -100,7 +100,7 @@ var MultipleProviders = {
|
|
|
100
100
|
navbar: {
|
|
101
101
|
title: "Provider 1",
|
|
102
102
|
subtitle: "第一个聊天机器人",
|
|
103
|
-
avatar: "https://
|
|
103
|
+
avatar: "https://gw.alipayobjects.com/zos/bmw-prod/b874caa9-4458-412a-9ac6-a61486180a62.svg"
|
|
104
104
|
}
|
|
105
105
|
}
|
|
106
106
|
))), /* @__PURE__ */ import_react.default.createElement("div", { style: { width: "400px", height: "600px" } }, /* @__PURE__ */ import_react.default.createElement(import_index.default, { ...args, providerId: "provider-2" }, /* @__PURE__ */ import_react.default.createElement(
|
|
@@ -110,7 +110,7 @@ var MultipleProviders = {
|
|
|
110
110
|
navbar: {
|
|
111
111
|
title: "Provider 2",
|
|
112
112
|
subtitle: "第二个聊天机器人",
|
|
113
|
-
avatar: "https://
|
|
113
|
+
avatar: "https://gw.alipayobjects.com/zos/bmw-prod/b874caa9-4458-412a-9ac6-a61486180a62.svg"
|
|
114
114
|
}
|
|
115
115
|
}
|
|
116
116
|
)))),
|
|
@@ -121,7 +121,7 @@ var MultipleProviders = {
|
|
|
121
121
|
};
|
|
122
122
|
// Annotate the CommonJS export names for ESM import in node:
|
|
123
123
|
0 && (module.exports = {
|
|
124
|
-
|
|
125
|
-
|
|
124
|
+
单聊天窗口,
|
|
125
|
+
多容器示例
|
|
126
126
|
});
|
|
127
127
|
//# sourceMappingURL=XAiProvider.stories.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/components/XAiProvider/XAiProvider.stories.tsx"],
|
|
4
|
-
"sourcesContent": ["import type { Meta, StoryObj } from '@storybook/react-vite';\nimport
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;
|
|
4
|
+
"sourcesContent": ["import React from 'react';\nimport type { Meta, StoryObj } from '@storybook/react-vite';\nimport XAiProvider from './index';\nimport XAiChatbot from '../XAiChatbot';\nimport XAiConversations from '../XAiConversations';\nimport useStyles from './demo.styles';\n\nconst meta: Meta<typeof XAiProvider> = {\n title: 'AI组件/XAiProvider AI容器',\n component: XAiProvider,\n parameters: {\n layout: 'centered',\n docs: {\n description: {\n component: 'AI 聊天机器人容器组件,提供全局上下文和消息管理功能。',\n },\n },\n },\n tags: ['autodocs'],\n argTypes: {\n url: {\n control: 'text',\n description: 'AI 服务地址',\n },\n token: {\n control: 'text',\n description: '认证 token',\n },\n providerId: {\n control: 'text',\n description: 'Provider 唯一标识',\n },\n },\n // 添加装饰器,确保组件有必要的上下文\n decorators: [\n (Story) => (\n <div style={{ padding: '20px' }}>\n <Story />\n </div>\n ),\n ],\n};\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\n// 使用 Provider 的 XAiChatbot\nexport const 单聊天窗口: Story = {\n render: (args) => (\n <div style={{ width: '400px', height: '600px' }}>\n <XAiProvider {...args}>\n <XAiChatbot\n navbarShow\n navbar={{\n title: 'Provider 聊天机器人',\n subtitle: '由 Provider 管理消息',\n avatar: 'https://gw.alipayobjects.com/zos/bmw-prod/b874caa9-4458-412a-9ac6-a61486180a62.svg',\n }}\n />\n </XAiProvider>\n </div>\n ),\n args: {\n url: 'http://ai-platform.xline-dev.test.xinke.biz',\n token: 'eyJhbGciOiJIUzUxMiJ9.eyJqdGkiOiJkZGUzOTcwOS0wMDdlLTQ5YWItYjIzMy1iMTZmYzRkMDU2N2QiLCJzdWIiOiJSZXgiLCJpc3MiOiJodHRwOi8vY2hhdC10ZXN0LnpheGxpbmUuY29tIiwiYXVkIjoiTWFpblN0YXRpb24iLCJpYXQiOjE3NTQ1Njc4NTMsImV4cCI6MTc1NDU3NTA1MywidHlwZSI6ImFjY2VzcyIsImNsaWVudF9pZCI6IkFwcDE5NTAwMjA1OTQ0NTI2NjAyMjQiLCJzY29wZSI6ImFsbCIsInBsYXRmb3JtX3R5cGUiOiJNYWluU3RhdGlvbiJ9.jH9muK_MWcE9NtWxPJRqeoeGsnRf79B2oOpQjemJ6kY5_UjAT06BWlX3bszHeRbJbk1OM_kfCeugiO3Gokpj2A',\n config: {\n appNo: 'App1950020594452660224',\n pt: 'MainStation',\n tc: 'ZABX',\n },\n providerId: 'demo-provider',\n },\n};\n\n// export const 带历史记录聊天窗口: Story = {\n// render: (args) => {\n// function WithStyles(props: any) {\n// const styles = useStyles();\n// return (\n// <XAiProvider {...props}>\n// <div className={styles.wrapper}>\n// <div>\n// <XAiConversations />\n// </div>\n// <div>\n// <XAiChatbot />\n// </div>\n// </div>\n// </XAiProvider>\n// );\n// }\n// return <WithStyles {...args} />;\n// },\n// args: {\n// url: 'http://ai-platform.xline-dev.test.xinke.biz',\n// token: 'eyJhbGciOiJIUzUxMiJ9.eyJqdGkiOiJjYWIxYjM3Ni03MmZjLTRkNWEtOTIzMC01N2U3NmZiMGI4NmQiLCJzdWIiOiJSZXgiLCJpc3MiOiJodHRwOi8vY2hhdC10ZXN0LnpheGxpbmUuY29tIiwiYXVkIjoiTWFpblN0YXRpb24iLCJpYXQiOjE3NTQzMTc1OTAsImV4cCI6MTc1NDkyMjM5MCwidHlwZSI6InJlZnJlc2giLCJjbGllbnRfaWQiOiJBcHAxOTUwMDIwNTk0NDUyNjYwMjI0Iiwic2NvcGUiOiJhbGwiLCJwbGF0Zm9ybV90eXBlIjoiTWFpblN0YXRpb24ifQ.crZFQRycuHHA1iIIFJ5ak9kS1-04Eqro-QWWG8HZj6Dz7DkLWYuQBPCrUlCtavGu0XW5tqHZ5WW4tdST06FvEA',\n// config: {\n// appNo: 'App1952213101022154752',\n// pt: 'MainStation',\n// tc: 'ZABX',\n// },\n// providerId: 'demo-provider',\n// },\n// };\n\n// 多个 Provider 示例\nexport const 多容器示例: Story = {\n render: (args) => (\n <div style={{ display: 'flex', gap: '20px' }}>\n <div style={{ width: '400px', height: '600px' }}>\n <XAiProvider {...args} providerId=\"provider-1\">\n <XAiChatbot\n navbarShow\n navbar={{\n title: 'Provider 1',\n subtitle: '第一个聊天机器人',\n avatar: 'https://gw.alipayobjects.com/zos/bmw-prod/b874caa9-4458-412a-9ac6-a61486180a62.svg',\n }}\n />\n </XAiProvider>\n </div>\n\n <div style={{ width: '400px', height: '600px' }}>\n <XAiProvider {...args} providerId=\"provider-2\">\n <XAiChatbot\n navbarShow\n navbar={{\n title: 'Provider 2',\n subtitle: '第二个聊天机器人',\n avatar: 'https://gw.alipayobjects.com/zos/bmw-prod/b874caa9-4458-412a-9ac6-a61486180a62.svg',\n }}\n />\n </XAiProvider>\n </div>\n </div>\n ),\n args: {\n url: 'https://api.example.com/ai',\n token: 'your-token-here',\n },\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkB;AAElB,mBAAwB;AACxB,wBAAuB;AAIvB,IAAM,OAAiC;AAAA,EACrC,OAAO;AAAA,EACP,WAAW,aAAAA;AAAA,EACX,YAAY;AAAA,IACV,QAAQ;AAAA,IACR,MAAM;AAAA,MACJ,aAAa;AAAA,QACX,WAAW;AAAA,MACb;AAAA,IACF;AAAA,EACF;AAAA,EACA,MAAM,CAAC,UAAU;AAAA,EACjB,UAAU;AAAA,IACR,KAAK;AAAA,MACH,SAAS;AAAA,MACT,aAAa;AAAA,IACf;AAAA,IACA,OAAO;AAAA,MACL,SAAS;AAAA,MACT,aAAa;AAAA,IACf;AAAA,IACA,YAAY;AAAA,MACV,SAAS;AAAA,MACT,aAAa;AAAA,IACf;AAAA,EACF;AAAA;AAAA,EAEA,YAAY;AAAA,IACV,CAAC,UACC,6BAAAC,QAAA,cAAC,SAAI,OAAO,EAAE,SAAS,OAAO,KAC5B,6BAAAA,QAAA,cAAC,WAAM,CACT;AAAA,EAEJ;AACF;AAEA,IAAO,8BAAQ;AAIR,IAAM,QAAe;AAAA,EAC1B,QAAQ,CAAC,SACP,6BAAAA,QAAA,cAAC,SAAI,OAAO,EAAE,OAAO,SAAS,QAAQ,QAAQ,KAC5C,6BAAAA,QAAA,cAAC,aAAAD,SAAA,EAAa,GAAG,QACf,6BAAAC,QAAA;AAAA,IAAC,kBAAAC;AAAA,IAAA;AAAA,MACC,YAAU;AAAA,MACV,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,UAAU;AAAA,QACV,QAAQ;AAAA,MACV;AAAA;AAAA,EACF,CACF,CACF;AAAA,EAEF,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,MACN,OAAO;AAAA,MACP,IAAI;AAAA,MACJ,IAAI;AAAA,IACN;AAAA,IACA,YAAY;AAAA,EACd;AACF;AAkCO,IAAM,QAAe;AAAA,EAC1B,QAAQ,CAAC,SACP,6BAAAD,QAAA,cAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,KAAK,OAAO,KACzC,6BAAAA,QAAA,cAAC,SAAI,OAAO,EAAE,OAAO,SAAS,QAAQ,QAAQ,KAC5C,6BAAAA,QAAA,cAAC,aAAAD,SAAA,EAAa,GAAG,MAAM,YAAW,gBAChC,6BAAAC,QAAA;AAAA,IAAC,kBAAAC;AAAA,IAAA;AAAA,MACC,YAAU;AAAA,MACV,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,UAAU;AAAA,QACV,QAAQ;AAAA,MACV;AAAA;AAAA,EACF,CACF,CACF,GAEA,6BAAAD,QAAA,cAAC,SAAI,OAAO,EAAE,OAAO,SAAS,QAAQ,QAAQ,KAC5C,6BAAAA,QAAA,cAAC,aAAAD,SAAA,EAAa,GAAG,MAAM,YAAW,gBAChC,6BAAAC,QAAA;AAAA,IAAC,kBAAAC;AAAA,IAAA;AAAA,MACC,YAAU;AAAA,MACV,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,UAAU;AAAA,QACV,QAAQ;AAAA,MACV;AAAA;AAAA,EACF,CACF,CACF,CACF;AAAA,EAEF,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,OAAO;AAAA,EACT;AACF;",
|
|
6
6
|
"names": ["XAiProvider", "React", "XAiChatbot"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
declare const useStyles: () => {
|
|
2
|
+
wrapper: string;
|
|
3
|
+
} & {
|
|
4
|
+
w: (width: string | number) => string;
|
|
5
|
+
h: (height: string | number) => string;
|
|
6
|
+
p: (padding: string) => string;
|
|
7
|
+
pb: (padding: string | number) => string;
|
|
8
|
+
pt: (padding: string | number) => string;
|
|
9
|
+
pl: (padding: string | number) => string;
|
|
10
|
+
pr: (padding: string | number) => string;
|
|
11
|
+
m: (margin: string) => string;
|
|
12
|
+
mb: (margin: string | number) => string;
|
|
13
|
+
mt: (margin: string | number) => string;
|
|
14
|
+
ml: (margin: string | number) => string;
|
|
15
|
+
mr: (margin: string | number) => string;
|
|
16
|
+
text: (size: string | number) => string;
|
|
17
|
+
weight: (size: number) => string;
|
|
18
|
+
textColor: (c: string) => string;
|
|
19
|
+
bg: (c: string) => string;
|
|
20
|
+
rs: (radius: string | number) => string;
|
|
21
|
+
gap: (g: string | number) => string;
|
|
22
|
+
flex: string;
|
|
23
|
+
flexCenter: string;
|
|
24
|
+
flexBetween: string;
|
|
25
|
+
flexColumn: string;
|
|
26
|
+
flex1: string;
|
|
27
|
+
cursor: (type: string) => string;
|
|
28
|
+
border: (color: string, width?: string) => string;
|
|
29
|
+
boxShadow: (shadow: string) => string;
|
|
30
|
+
transition: (property?: string, duration?: string) => string;
|
|
31
|
+
overflow: (type: string) => string;
|
|
32
|
+
position: (type: string) => string;
|
|
33
|
+
zIndex: (index: number) => string;
|
|
34
|
+
};
|
|
35
|
+
export default useStyles;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
|
|
19
|
+
// src/components/XAiProvider/demo.styles.tsx
|
|
20
|
+
var demo_styles_exports = {};
|
|
21
|
+
__export(demo_styles_exports, {
|
|
22
|
+
default: () => demo_styles_default
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(demo_styles_exports);
|
|
25
|
+
var import_css = require("@emotion/css");
|
|
26
|
+
var import_common = require("../../styles/common");
|
|
27
|
+
var useStyles = (0, import_common.withBasicStyles)(() => ({
|
|
28
|
+
// 静态样式
|
|
29
|
+
wrapper: import_css.css`
|
|
30
|
+
width: '100vw';
|
|
31
|
+
height: '100vh';
|
|
32
|
+
backgroundColor: rgb(240, 242, 245);
|
|
33
|
+
display: flex;
|
|
34
|
+
`
|
|
35
|
+
}));
|
|
36
|
+
var demo_styles_default = useStyles;
|
|
37
|
+
//# sourceMappingURL=demo.styles.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/components/XAiProvider/demo.styles.tsx"],
|
|
4
|
+
"sourcesContent": ["import { css } from '@emotion/css';\nimport { withBasicStyles } from '@/styles/common';\n\nconst useStyles = withBasicStyles(() => ({\n // 静态样式\n wrapper: css`\n width: '100vw';\n height: '100vh';\n backgroundColor: rgb(240, 242, 245);\n display: flex;\n `,\n}));\n\nexport default useStyles;\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAoB;AACpB,oBAAgC;AAEhC,IAAM,gBAAY,+BAAgB,OAAO;AAAA;AAAA,EAEvC,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAMX,EAAE;AAEF,IAAO,sBAAQ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -34,6 +34,7 @@ __export(XAiProvider_exports, {
|
|
|
34
34
|
module.exports = __toCommonJS(XAiProvider_exports);
|
|
35
35
|
var import_react = __toESM(require("react"));
|
|
36
36
|
var import_antd = require("antd");
|
|
37
|
+
var import_uuid = require("uuid");
|
|
37
38
|
var import_copy_to_clipboard = __toESM(require("copy-to-clipboard"));
|
|
38
39
|
var import_x = require("@ant-design/x");
|
|
39
40
|
var import_AiProviderContext = require("../../context/AiProviderContext");
|
|
@@ -44,9 +45,11 @@ var XAiProvider = ({
|
|
|
44
45
|
token,
|
|
45
46
|
config,
|
|
46
47
|
providerId = "defaultId",
|
|
48
|
+
onSuccess,
|
|
49
|
+
onError,
|
|
47
50
|
children
|
|
48
51
|
}) => {
|
|
49
|
-
const { appInfo, chat, stopChat, reChat, messages, loading, setMessages } = (0, import_useAgentGenerator.default)({ url, token, config });
|
|
52
|
+
const { appInfo, chat, stopChat, reChat, messages, loading, setCurrentSession, setMessages } = (0, import_useAgentGenerator.default)({ url, token, config, onError, onSuccess });
|
|
50
53
|
const { appName, icon } = appInfo || {};
|
|
51
54
|
const handleSendMessage = (_type, content) => {
|
|
52
55
|
chat(content);
|
|
@@ -54,6 +57,7 @@ var XAiProvider = ({
|
|
|
54
57
|
const handleClearMessage = () => {
|
|
55
58
|
stopChat();
|
|
56
59
|
setMessages([]);
|
|
60
|
+
setCurrentSession((0, import_uuid.v4)());
|
|
57
61
|
};
|
|
58
62
|
const handleActions = (index, actionData) => {
|
|
59
63
|
const { content, id } = actionData || {};
|
|
@@ -88,10 +92,11 @@ var XAiProvider = ({
|
|
|
88
92
|
import_AiProviderContext.XAiContext.Provider,
|
|
89
93
|
{
|
|
90
94
|
value: {
|
|
91
|
-
avatar: icon,
|
|
92
|
-
userAvatar: import_user.default,
|
|
95
|
+
avatar: /* @__PURE__ */ import_react.default.createElement("img", { src: icon, alt: "智能体头像" }),
|
|
96
|
+
userAvatar: /* @__PURE__ */ import_react.default.createElement("img", { src: import_user.default, alt: "用户头像" }),
|
|
93
97
|
emptyStateImage: icon,
|
|
94
98
|
emptyStateText: appName,
|
|
99
|
+
footerTips: "内容由AI生成,无法确保真实准确,仅供参考",
|
|
95
100
|
providerId,
|
|
96
101
|
token,
|
|
97
102
|
messages,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/components/XAiProvider/index.tsx"],
|
|
4
|
-
"sourcesContent": ["import React from 'react';\nimport { message, Divider } from 'antd';\nimport copy from 'copy-to-clipboard';\nimport { XProvider } from '@ant-design/x';\nimport { XAiContext } from '@/context/AiProviderContext';\nimport { XAiProviderProps } from '@/types/XAiProvider';\nimport useAgentGenerator from '@/hooks/useAgentGenerator';\nimport userIcon from '@/assets/user.png';\n\nconst XAiProvider: React.FC<XAiProviderProps> = ({\n url,\n token,\n config,\n providerId = 'defaultId',\n children,\n}: XAiProviderProps) => {\n // 使用 useAgentGenerator Hook 管理消息状态\n const { appInfo, chat, stopChat, reChat, messages, loading, setMessages } = useAgentGenerator({ url, token, config });\n\n const { appName, icon } = appInfo || {};\n\n // 发送消息\n const handleSendMessage = (_type: string, content: string) => {\n chat(content);\n };\n\n // 清空消息\n const handleClearMessage = () => {\n stopChat();\n setMessages([]);\n };\n\n // 工具栏按钮点击\n const handleActions = (index: number, actionData: any) => {\n const { content, id } = actionData || {};\n const { text = '' } = content;\n switch (index) {\n case 0:\n reChat();\n break;\n case 1:\n copy(text);\n message.success('复制成功');\n break;\n case 2:\n setMessages((prev: any[]) => prev.filter((item: any) => item.id !== id));\n message.success('删除成功');\n break;\n }\n };\n\n // 建议消息点击\n const handleSuggestMessageClick = (_item: any, id: string) => {\n setMessages((prev: any[]) => prev.filter((m: any) => m.id !== id));\n };\n\n const ToolTip = (messageData: any) => {\n const finalResult = (messageData?.think || []).find((item: any) => item.actionName === 'FINISHED');\n if (!finalResult) return null;\n const { cost, token: tokenCount } = finalResult.extra || {};\n if (!cost && !token) return null;\n return (\n <div style={{ display: 'flex', alignItems: 'center', fontSize: '12px', color: '#949494', flex: 1, paddingRight: '40px' }}>\n { (cost !== undefined && cost !== null) && <div>{cost}s</div> }\n { tokenCount && <Divider type=\"vertical\" /> }\n { tokenCount && <div>{ tokenCount } tokens</div> }\n </div>\n );\n };\n\n return (\n <XProvider>\n <XAiContext.Provider value={{\n avatar: icon
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkB;AAClB,kBAAiC;AACjC,+BAAiB;AACjB,eAA0B;AAC1B,+BAA2B;AAE3B,+BAA8B;AAC9B,kBAAqB;AAErB,IAAM,cAA0C,CAAC;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb;AACF,MAAwB;AAEtB,QAAM,EAAE,SAAS,MAAM,UAAU,QAAQ,UAAU,SAAS,YAAY,QAAI,yBAAAA,SAAkB,EAAE,KAAK,OAAO,
|
|
6
|
-
"names": ["useAgentGenerator", "copy", "React", "userIcon"]
|
|
4
|
+
"sourcesContent": ["import React from 'react';\nimport { message, Divider } from 'antd';\nimport { v4 as uuidV4 } from 'uuid';\nimport copy from 'copy-to-clipboard';\nimport { XProvider } from '@ant-design/x';\nimport { XAiContext } from '@/context/AiProviderContext';\nimport { XAiProviderProps } from '@/types/XAiProvider';\nimport useAgentGenerator from '@/hooks/useAgentGenerator';\nimport userIcon from '@/assets/user.png';\n\nconst XAiProvider: React.FC<XAiProviderProps> = ({\n url,\n token,\n config,\n providerId = 'defaultId',\n onSuccess,\n onError,\n children,\n}: XAiProviderProps) => {\n // 使用 useAgentGenerator Hook 管理消息状态\n const { appInfo, chat, stopChat, reChat, messages, loading, setCurrentSession, setMessages } = useAgentGenerator({ url, token, config, onError, onSuccess });\n\n const { appName, icon } = appInfo || {};\n\n // 发送消息\n const handleSendMessage = (_type: string, content: string) => {\n chat(content);\n };\n\n // 清空消息\n const handleClearMessage = () => {\n stopChat();\n setMessages([]);\n setCurrentSession(uuidV4());\n };\n\n // 工具栏按钮点击\n const handleActions = (index: number, actionData: any) => {\n const { content, id } = actionData || {};\n const { text = '' } = content;\n switch (index) {\n case 0:\n reChat();\n break;\n case 1:\n copy(text);\n message.success('复制成功');\n break;\n case 2:\n setMessages((prev: any[]) => prev.filter((item: any) => item.id !== id));\n message.success('删除成功');\n break;\n }\n };\n\n // 建议消息点击\n const handleSuggestMessageClick = (_item: any, id: string) => {\n setMessages((prev: any[]) => prev.filter((m: any) => m.id !== id));\n };\n\n const ToolTip = (messageData: any) => {\n const finalResult = (messageData?.think || []).find((item: any) => item.actionName === 'FINISHED');\n if (!finalResult) return null;\n const { cost, token: tokenCount } = finalResult.extra || {};\n if (!cost && !token) return null;\n return (\n <div style={{ display: 'flex', alignItems: 'center', fontSize: '12px', color: '#949494', flex: 1, paddingRight: '40px' }}>\n { (cost !== undefined && cost !== null) && <div>{cost}s</div> }\n { tokenCount && <Divider type=\"vertical\" /> }\n { tokenCount && <div>{ tokenCount } tokens</div> }\n </div>\n );\n };\n\n return (\n <XProvider>\n <XAiContext.Provider value={{\n avatar: <img src={icon} alt=\"智能体头像\" />,\n userAvatar: <img src={userIcon} alt=\"用户头像\" />,\n emptyStateImage: icon,\n emptyStateText: appName,\n footerTips: '内容由AI生成,无法确保真实准确,仅供参考',\n providerId,\n token,\n messages,\n loading,\n error: null,\n messageTooltip: ToolTip,\n onSend: handleSendMessage,\n onClear: handleClearMessage,\n onStop: stopChat,\n onSuggestMessageClick: handleSuggestMessageClick,\n onMessagesActionsCallback: handleActions,\n isInProvider: true,\n }}\n >\n {children}\n </XAiContext.Provider>\n </XProvider>\n );\n};\n\nexport default XAiProvider;\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkB;AAClB,kBAAiC;AACjC,kBAA6B;AAC7B,+BAAiB;AACjB,eAA0B;AAC1B,+BAA2B;AAE3B,+BAA8B;AAC9B,kBAAqB;AAErB,IAAM,cAA0C,CAAC;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb;AAAA,EACA;AAAA,EACA;AACF,MAAwB;AAEtB,QAAM,EAAE,SAAS,MAAM,UAAU,QAAQ,UAAU,SAAS,mBAAmB,YAAY,QAAI,yBAAAA,SAAkB,EAAE,KAAK,OAAO,QAAQ,SAAS,UAAU,CAAC;AAE3J,QAAM,EAAE,SAAS,KAAK,IAAI,WAAW,CAAC;AAGtC,QAAM,oBAAoB,CAAC,OAAe,YAAoB;AAC5D,SAAK,OAAO;AAAA,EACd;AAGA,QAAM,qBAAqB,MAAM;AAC/B,aAAS;AACT,gBAAY,CAAC,CAAC;AACd,0BAAkB,YAAAC,IAAO,CAAC;AAAA,EAC5B;AAGA,QAAM,gBAAgB,CAAC,OAAe,eAAoB;AACxD,UAAM,EAAE,SAAS,GAAG,IAAI,cAAc,CAAC;AACvC,UAAM,EAAE,OAAO,GAAG,IAAI;AACtB,YAAQ,OAAO;AAAA,MACb,KAAK;AACH,eAAO;AACP;AAAA,MACF,KAAK;AACH,qCAAAC,SAAK,IAAI;AACT,4BAAQ,QAAQ,MAAM;AACtB;AAAA,MACF,KAAK;AACH,oBAAY,CAAC,SAAgB,KAAK,OAAO,CAAC,SAAc,KAAK,OAAO,EAAE,CAAC;AACvE,4BAAQ,QAAQ,MAAM;AACtB;AAAA,IACJ;AAAA,EACF;AAGA,QAAM,4BAA4B,CAAC,OAAY,OAAe;AAC5D,gBAAY,CAAC,SAAgB,KAAK,OAAO,CAAC,MAAW,EAAE,OAAO,EAAE,CAAC;AAAA,EACnE;AAEA,QAAM,UAAU,CAAC,gBAAqB;AACpC,UAAM,gBAAe,2CAAa,UAAS,CAAC,GAAG,KAAK,CAAC,SAAc,KAAK,eAAe,UAAU;AACjG,QAAI,CAAC;AAAa,aAAO;AACzB,UAAM,EAAE,MAAM,OAAO,WAAW,IAAI,YAAY,SAAS,CAAC;AAC1D,QAAI,CAAC,QAAQ,CAAC;AAAO,aAAO;AAC5B,WACE,6BAAAC,QAAA,cAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,UAAU,QAAQ,OAAO,WAAW,MAAM,GAAG,cAAc,OAAO,KAClH,SAAS,UAAa,SAAS,QAAS,6BAAAA,QAAA,cAAC,aAAK,MAAK,GAAC,GACrD,cAAc,6BAAAA,QAAA,cAAC,uBAAQ,MAAK,YAAW,GACvC,cAAc,6BAAAA,QAAA,cAAC,aAAM,YAAY,SAAO,CAC5C;AAAA,EAEJ;AAEA,SACE,6BAAAA,QAAA,cAAC,0BACC,6BAAAA,QAAA;AAAA,IAAC,oCAAW;AAAA,IAAX;AAAA,MAAoB,OAAO;AAAA,QAC1B,QAAQ,6BAAAA,QAAA,cAAC,SAAI,KAAK,MAAM,KAAI,SAAQ;AAAA,QACpC,YAAY,6BAAAA,QAAA,cAAC,SAAI,KAAK,YAAAC,SAAU,KAAI,QAAO;AAAA,QAC3C,iBAAiB;AAAA,QACjB,gBAAgB;AAAA,QAChB,YAAY;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO;AAAA,QACP,gBAAgB;AAAA,QAChB,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,uBAAuB;AAAA,QACvB,2BAA2B;AAAA,QAC3B,cAAc;AAAA,MAChB;AAAA;AAAA,IAEG;AAAA,EACH,CACF;AAEJ;AAEA,IAAO,sBAAQ;",
|
|
6
|
+
"names": ["useAgentGenerator", "uuidV4", "copy", "React", "userIcon"]
|
|
7
7
|
}
|
|
@@ -43,7 +43,13 @@ var XAiWebSDKWrapper = ({
|
|
|
43
43
|
const containerRef = (0, import_react.useRef)(null);
|
|
44
44
|
(0, import_react.useEffect)(() => {
|
|
45
45
|
if (containerRef.current && !sdkRef.current) {
|
|
46
|
-
sdkRef.current = import_umdEntry.default.initChatbot(
|
|
46
|
+
sdkRef.current = import_umdEntry.default.initChatbot({
|
|
47
|
+
...sdkProps,
|
|
48
|
+
componentProps: {
|
|
49
|
+
...sdkProps.componentProps || {}
|
|
50
|
+
// 保证容器 id 唯一或传递其它样式
|
|
51
|
+
}
|
|
52
|
+
});
|
|
47
53
|
if (onInit && sdkRef.current) {
|
|
48
54
|
onInit(sdkRef.current);
|
|
49
55
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/components/XAiWebSDKWrapper.tsx"],
|
|
4
|
-
"sourcesContent": ["import React, { useEffect, useRef } from 'react';\nimport { XAiSDKProps } from '@/types/XAiProvider';\nimport XAiWebSDK from '@/utils/umdEntry';\n\nexport interface XAiWebSDKWrapperProps extends XAiSDKProps {\n onInit?: (sdk: XAiWebSDK) => void;\n onDestroy?: () => void;\n}\n\nconst XAiWebSDKWrapper: React.FC<XAiWebSDKWrapperProps> = ({\n onInit,\n onDestroy,\n ...sdkProps\n}) => {\n const sdkRef = useRef<XAiWebSDK | null>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (containerRef.current && !sdkRef.current) {\n // 创建 SDK 实例\n sdkRef.current = XAiWebSDK.initChatbot(
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAyC;AAEzC,sBAAsB;AAOtB,IAAM,mBAAoD,CAAC;AAAA,EACzD;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAM;AACJ,QAAM,aAAS,qBAAyB,IAAI;AAC5C,QAAM,mBAAe,qBAAuB,IAAI;AAEhD,8BAAU,MAAM;AACd,QAAI,aAAa,WAAW,CAAC,OAAO,SAAS;AAE3C,aAAO,UAAU,gBAAAA,QAAU,YAAY,
|
|
4
|
+
"sourcesContent": ["import React, { useEffect, useRef } from 'react';\nimport { XAiSDKProps } from '@/types/XAiProvider';\nimport XAiWebSDK from '@/utils/umdEntry';\n\nexport interface XAiWebSDKWrapperProps extends XAiSDKProps {\n onInit?: (sdk: XAiWebSDK) => void;\n onDestroy?: () => void;\n}\n\nconst XAiWebSDKWrapper: React.FC<XAiWebSDKWrapperProps> = ({\n onInit,\n onDestroy,\n ...sdkProps\n}) => {\n const sdkRef = useRef<XAiWebSDK | null>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (containerRef.current && !sdkRef.current) {\n // 创建 SDK 实例\n sdkRef.current = XAiWebSDK.initChatbot({\n ...sdkProps,\n componentProps: {\n ...(sdkProps.componentProps || {}),\n // 保证容器 id 唯一或传递其它样式\n },\n });\n\n // 调用初始化回调\n if (onInit && sdkRef.current) {\n onInit(sdkRef.current);\n }\n }\n\n // 清理函数\n return () => {\n if (sdkRef.current) {\n sdkRef.current.unmount();\n sdkRef.current = null;\n\n // 调用销毁回调\n if (onDestroy) {\n onDestroy();\n }\n }\n };\n }, []); // 只在组件挂载时初始化\n\n return <div ref={containerRef} />;\n};\n\nexport default XAiWebSDKWrapper;\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAyC;AAEzC,sBAAsB;AAOtB,IAAM,mBAAoD,CAAC;AAAA,EACzD;AAAA,EACA;AAAA,EACA,GAAG;AACL,MAAM;AACJ,QAAM,aAAS,qBAAyB,IAAI;AAC5C,QAAM,mBAAe,qBAAuB,IAAI;AAEhD,8BAAU,MAAM;AACd,QAAI,aAAa,WAAW,CAAC,OAAO,SAAS;AAE3C,aAAO,UAAU,gBAAAA,QAAU,YAAY;AAAA,QACrC,GAAG;AAAA,QACH,gBAAgB;AAAA,UACd,GAAI,SAAS,kBAAkB,CAAC;AAAA;AAAA,QAElC;AAAA,MACF,CAAC;AAGD,UAAI,UAAU,OAAO,SAAS;AAC5B,eAAO,OAAO,OAAO;AAAA,MACvB;AAAA,IACF;AAGA,WAAO,MAAM;AACX,UAAI,OAAO,SAAS;AAClB,eAAO,QAAQ,QAAQ;AACvB,eAAO,UAAU;AAGjB,YAAI,WAAW;AACb,oBAAU;AAAA,QACZ;AAAA,MACF;AAAA,IACF;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,SAAO,6BAAAC,QAAA,cAAC,SAAI,KAAK,cAAc;AACjC;AAEA,IAAO,2BAAQ;",
|
|
6
6
|
"names": ["XAiWebSDK", "React"]
|
|
7
7
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import { Messages } from "../types/XAiMessage";
|
|
3
|
+
import { Error } from "../types/XAiProvider";
|
|
3
4
|
export type ContentType = 'TEXT' | 'IMAGE' | 'FILE';
|
|
4
5
|
export interface ImageUrl {
|
|
5
6
|
url: string;
|
|
@@ -48,18 +49,25 @@ export interface Action {
|
|
|
48
49
|
description: string;
|
|
49
50
|
jsonSchema: string;
|
|
50
51
|
available?: ActionAvailability;
|
|
52
|
+
error?: Error;
|
|
51
53
|
}
|
|
52
|
-
|
|
54
|
+
export interface UseAgentGeneratorProps {
|
|
53
55
|
url: string;
|
|
54
56
|
token: string;
|
|
55
57
|
config: any;
|
|
56
|
-
|
|
58
|
+
onError?: (error: Error) => void;
|
|
59
|
+
onSuccess?: (appInfo: any) => void;
|
|
60
|
+
}
|
|
61
|
+
declare const useAgentGenerator: ({ url, token, config, onError, onSuccess, }: UseAgentGeneratorProps) => {
|
|
57
62
|
appInfo: any;
|
|
58
63
|
messages: Messages[];
|
|
59
64
|
loading: boolean;
|
|
60
65
|
content: any;
|
|
66
|
+
sessionsList: any[];
|
|
67
|
+
currentSession: string;
|
|
61
68
|
reChat: () => void;
|
|
62
69
|
chat: (content: any) => Promise<void>;
|
|
70
|
+
setCurrentSession: import("react").Dispatch<import("react").SetStateAction<string>>;
|
|
63
71
|
setMessage: (messageType: string, content: any) => Promise<void>;
|
|
64
72
|
setMessages: import("react").Dispatch<import("react").SetStateAction<Messages[]>>;
|
|
65
73
|
stopChat: () => void;
|