@ai-group/chat-sdk 0.2.8 → 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/dist/cjs/components/XAiChatbot/index.js +2 -1
- package/dist/cjs/components/XAiChatbot/index.js.map +2 -2
- package/dist/cjs/components/XAiChatbot/styles.d.ts +1 -0
- package/dist/cjs/components/XAiChatbot/styles.js +13 -0
- 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 +6 -3
- package/dist/cjs/components/XAiProvider/index.js.map +3 -3
- package/dist/cjs/hooks/useAgentGenerator.d.ts +3 -0
- package/dist/cjs/hooks/useAgentGenerator.js +84 -1
- package/dist/cjs/hooks/useAgentGenerator.js.map +2 -2
- package/dist/cjs/services/api.d.ts +33 -0
- 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/index.d.ts +1 -0
- package/dist/cjs/types/index.js +3 -1
- package/dist/cjs/types/index.js.map +2 -2
- package/dist/esm/components/XAiChatbot/index.js +5 -0
- package/dist/esm/components/XAiChatbot/index.js.map +1 -1
- package/dist/esm/components/XAiChatbot/styles.d.ts +1 -0
- package/dist/esm/components/XAiChatbot/styles.js +18 -17
- 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 +12 -2
- package/dist/esm/components/XAiProvider/index.js.map +1 -1
- package/dist/esm/hooks/useAgentGenerator.d.ts +3 -0
- package/dist/esm/hooks/useAgentGenerator.js +154 -10
- package/dist/esm/hooks/useAgentGenerator.js.map +1 -1
- package/dist/esm/services/api.d.ts +33 -0
- 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/index.d.ts +1 -0
- package/dist/esm/types/index.js +1 -0
- package/dist/esm/types/index.js.map +1 -1
- package/dist/umd/chat-sdk.min.js +1 -1
- package/package.json +1 -1
|
@@ -42,7 +42,7 @@ var meta = {
|
|
|
42
42
|
};
|
|
43
43
|
export default meta;
|
|
44
44
|
// 使用 Provider 的 XAiChatbot
|
|
45
|
-
export var
|
|
45
|
+
export var 单聊天窗口 = {
|
|
46
46
|
render: function render(args) {
|
|
47
47
|
return /*#__PURE__*/_jsx("div", {
|
|
48
48
|
style: {
|
|
@@ -55,7 +55,7 @@ export var WithProvider = {
|
|
|
55
55
|
navbar: {
|
|
56
56
|
title: 'Provider 聊天机器人',
|
|
57
57
|
subtitle: '由 Provider 管理消息',
|
|
58
|
-
avatar: 'https://
|
|
58
|
+
avatar: 'https://gw.alipayobjects.com/zos/bmw-prod/b874caa9-4458-412a-9ac6-a61486180a62.svg'
|
|
59
59
|
}
|
|
60
60
|
})
|
|
61
61
|
}))
|
|
@@ -63,9 +63,9 @@ export var WithProvider = {
|
|
|
63
63
|
},
|
|
64
64
|
args: {
|
|
65
65
|
url: 'http://ai-platform.xline-dev.test.xinke.biz',
|
|
66
|
-
token: 'eyJhbGciOiJIUzUxMiJ9.
|
|
66
|
+
token: 'eyJhbGciOiJIUzUxMiJ9.eyJqdGkiOiJkZGUzOTcwOS0wMDdlLTQ5YWItYjIzMy1iMTZmYzRkMDU2N2QiLCJzdWIiOiJSZXgiLCJpc3MiOiJodHRwOi8vY2hhdC10ZXN0LnpheGxpbmUuY29tIiwiYXVkIjoiTWFpblN0YXRpb24iLCJpYXQiOjE3NTQ1Njc4NTMsImV4cCI6MTc1NDU3NTA1MywidHlwZSI6ImFjY2VzcyIsImNsaWVudF9pZCI6IkFwcDE5NTAwMjA1OTQ0NTI2NjAyMjQiLCJzY29wZSI6ImFsbCIsInBsYXRmb3JtX3R5cGUiOiJNYWluU3RhdGlvbiJ9.jH9muK_MWcE9NtWxPJRqeoeGsnRf79B2oOpQjemJ6kY5_UjAT06BWlX3bszHeRbJbk1OM_kfCeugiO3Gokpj2A',
|
|
67
67
|
config: {
|
|
68
|
-
appNo: '
|
|
68
|
+
appNo: 'App1950020594452660224',
|
|
69
69
|
pt: 'MainStation',
|
|
70
70
|
tc: 'ZABX'
|
|
71
71
|
},
|
|
@@ -73,8 +73,39 @@ export var WithProvider = {
|
|
|
73
73
|
}
|
|
74
74
|
};
|
|
75
75
|
|
|
76
|
+
// export const 带历史记录聊天窗口: Story = {
|
|
77
|
+
// render: (args) => {
|
|
78
|
+
// function WithStyles(props: any) {
|
|
79
|
+
// const styles = useStyles();
|
|
80
|
+
// return (
|
|
81
|
+
// <XAiProvider {...props}>
|
|
82
|
+
// <div className={styles.wrapper}>
|
|
83
|
+
// <div>
|
|
84
|
+
// <XAiConversations />
|
|
85
|
+
// </div>
|
|
86
|
+
// <div>
|
|
87
|
+
// <XAiChatbot />
|
|
88
|
+
// </div>
|
|
89
|
+
// </div>
|
|
90
|
+
// </XAiProvider>
|
|
91
|
+
// );
|
|
92
|
+
// }
|
|
93
|
+
// return <WithStyles {...args} />;
|
|
94
|
+
// },
|
|
95
|
+
// args: {
|
|
96
|
+
// url: 'http://ai-platform.xline-dev.test.xinke.biz',
|
|
97
|
+
// token: 'eyJhbGciOiJIUzUxMiJ9.eyJqdGkiOiJjYWIxYjM3Ni03MmZjLTRkNWEtOTIzMC01N2U3NmZiMGI4NmQiLCJzdWIiOiJSZXgiLCJpc3MiOiJodHRwOi8vY2hhdC10ZXN0LnpheGxpbmUuY29tIiwiYXVkIjoiTWFpblN0YXRpb24iLCJpYXQiOjE3NTQzMTc1OTAsImV4cCI6MTc1NDkyMjM5MCwidHlwZSI6InJlZnJlc2giLCJjbGllbnRfaWQiOiJBcHAxOTUwMDIwNTk0NDUyNjYwMjI0Iiwic2NvcGUiOiJhbGwiLCJwbGF0Zm9ybV90eXBlIjoiTWFpblN0YXRpb24ifQ.crZFQRycuHHA1iIIFJ5ak9kS1-04Eqro-QWWG8HZj6Dz7DkLWYuQBPCrUlCtavGu0XW5tqHZ5WW4tdST06FvEA',
|
|
98
|
+
// config: {
|
|
99
|
+
// appNo: 'App1952213101022154752',
|
|
100
|
+
// pt: 'MainStation',
|
|
101
|
+
// tc: 'ZABX',
|
|
102
|
+
// },
|
|
103
|
+
// providerId: 'demo-provider',
|
|
104
|
+
// },
|
|
105
|
+
// };
|
|
106
|
+
|
|
76
107
|
// 多个 Provider 示例
|
|
77
|
-
export var
|
|
108
|
+
export var 多容器示例 = {
|
|
78
109
|
render: function render(args) {
|
|
79
110
|
return /*#__PURE__*/_jsxs("div", {
|
|
80
111
|
style: {
|
|
@@ -93,7 +124,7 @@ export var MultipleProviders = {
|
|
|
93
124
|
navbar: {
|
|
94
125
|
title: 'Provider 1',
|
|
95
126
|
subtitle: '第一个聊天机器人',
|
|
96
|
-
avatar: 'https://
|
|
127
|
+
avatar: 'https://gw.alipayobjects.com/zos/bmw-prod/b874caa9-4458-412a-9ac6-a61486180a62.svg'
|
|
97
128
|
}
|
|
98
129
|
})
|
|
99
130
|
}))
|
|
@@ -109,7 +140,7 @@ export var MultipleProviders = {
|
|
|
109
140
|
navbar: {
|
|
110
141
|
title: 'Provider 2',
|
|
111
142
|
subtitle: '第二个聊天机器人',
|
|
112
|
-
avatar: 'https://
|
|
143
|
+
avatar: 'https://gw.alipayobjects.com/zos/bmw-prod/b874caa9-4458-412a-9ac6-a61486180a62.svg'
|
|
113
144
|
}
|
|
114
145
|
})
|
|
115
146
|
}))
|
|
@@ -121,177 +152,4 @@ export var MultipleProviders = {
|
|
|
121
152
|
token: 'your-token-here'
|
|
122
153
|
}
|
|
123
154
|
};
|
|
124
|
-
|
|
125
|
-
// // 自定义消息处理示例
|
|
126
|
-
// export const CustomMessageHandling: Story = {
|
|
127
|
-
// render: (args) => (
|
|
128
|
-
// <div style={{ width: '400px', height: '600px' }}>
|
|
129
|
-
// <XAiProvider {...args}>
|
|
130
|
-
// <XAiChatbot
|
|
131
|
-
// navbarShow
|
|
132
|
-
// navbar={{
|
|
133
|
-
// title: '自定义处理',
|
|
134
|
-
// subtitle: '自定义消息处理逻辑',
|
|
135
|
-
// avatar: 'https://via.placeholder.com/40',
|
|
136
|
-
// }}
|
|
137
|
-
// messageActions={[
|
|
138
|
-
// {
|
|
139
|
-
// key: 'custom',
|
|
140
|
-
// icon: <span>🔧</span>,
|
|
141
|
-
// tooltip: '自定义操作',
|
|
142
|
-
// },
|
|
143
|
-
// ]}
|
|
144
|
-
// onMessagesActionsCallback={(index, data) => {
|
|
145
|
-
// console.log('自定义操作:', index, data);
|
|
146
|
-
// }}
|
|
147
|
-
// />
|
|
148
|
-
// </XAiProvider>
|
|
149
|
-
// </div>
|
|
150
|
-
// ),
|
|
151
|
-
// args: {
|
|
152
|
-
// url: 'https://api.example.com/ai',
|
|
153
|
-
// token: 'your-token-here',
|
|
154
|
-
// providerId: 'custom-provider',
|
|
155
|
-
// },
|
|
156
|
-
// };
|
|
157
|
-
|
|
158
|
-
// // 示例 1: 使用通用 Hook 的组件
|
|
159
|
-
// const GenericComponent = React.memo<{ title: string }>(({ title }) => {
|
|
160
|
-
// const { isInProvider, getProviderValue } = useProviderContext({
|
|
161
|
-
// props: { title },
|
|
162
|
-
// });
|
|
163
|
-
|
|
164
|
-
// const providerMethods = useProviderMethods();
|
|
165
|
-
|
|
166
|
-
// const handleCustomAction = () => {
|
|
167
|
-
// if (isInProvider) {
|
|
168
|
-
// providerMethods.sendMessage?.('自定义消息');
|
|
169
|
-
// } else {
|
|
170
|
-
// console.log('独立组件动作');
|
|
171
|
-
// }
|
|
172
|
-
// };
|
|
173
|
-
|
|
174
|
-
// return (
|
|
175
|
-
// <div style={{ padding: '20px', border: '1px solid #ccc', marginBottom: '10px' }}>
|
|
176
|
-
// <h3>{title}</h3>
|
|
177
|
-
// <p>是否在 Provider 中: {isInProvider ? '是' : '否'}</p>
|
|
178
|
-
// <p>消息数量: {getProviderValue('messages')?.length || 0}</p>
|
|
179
|
-
// <button onClick={handleCustomAction}>
|
|
180
|
-
// {isInProvider ? '使用 Provider 方法' : '使用原有回调'}
|
|
181
|
-
// </button>
|
|
182
|
-
// </div>
|
|
183
|
-
// );
|
|
184
|
-
// });
|
|
185
|
-
|
|
186
|
-
// // 示例 2: 自定义聊天组件
|
|
187
|
-
// const CustomChatComponent = React.memo(() => {
|
|
188
|
-
// const { isInProvider, getProviderValue } = useProviderContext({
|
|
189
|
-
// props: {},
|
|
190
|
-
// });
|
|
191
|
-
|
|
192
|
-
// const providerMethods = useProviderMethods();
|
|
193
|
-
|
|
194
|
-
// const messageCount = getProviderValue('messages')?.length || 0;
|
|
195
|
-
// const theme = messageCount > 5 ? 'dark' : 'light';
|
|
196
|
-
|
|
197
|
-
// return (
|
|
198
|
-
// <div style={{
|
|
199
|
-
// padding: '20px',
|
|
200
|
-
// backgroundColor: theme === 'dark' ? '#333' : '#fff',
|
|
201
|
-
// color: theme === 'dark' ? '#fff' : '#333',
|
|
202
|
-
// border: '1px solid #ccc',
|
|
203
|
-
// marginBottom: '10px',
|
|
204
|
-
// }}
|
|
205
|
-
// >
|
|
206
|
-
// <h3>自定义聊天组件</h3>
|
|
207
|
-
// <p>主题: {theme}</p>
|
|
208
|
-
// <p>是否在 Provider 中: {isInProvider ? '是' : '否'}</p>
|
|
209
|
-
// <button
|
|
210
|
-
// onClick={() => providerMethods.sendMessage?.('Hello from custom component')}
|
|
211
|
-
// disabled={!isInProvider}
|
|
212
|
-
// >
|
|
213
|
-
// 发送消息
|
|
214
|
-
// </button>
|
|
215
|
-
// </div>
|
|
216
|
-
// );
|
|
217
|
-
// });
|
|
218
|
-
|
|
219
|
-
// // 展示 Hook 灵活性的示例
|
|
220
|
-
// export const HookFlexibilityExample: Story = {
|
|
221
|
-
// render: (args) => (
|
|
222
|
-
// <div style={{ width: '600px', height: '800px' }}>
|
|
223
|
-
// <XAiProvider {...args}>
|
|
224
|
-
// <div style={{ padding: '20px' }}>
|
|
225
|
-
// <h3>Hook 灵活性示例</h3>
|
|
226
|
-
// <p>展示不同组件如何使用相同的 Hook</p>
|
|
227
|
-
|
|
228
|
-
// {/* 不同的组件使用相同的 Hook */}
|
|
229
|
-
// <div style={{ marginBottom: '20px' }}>
|
|
230
|
-
// <GenericComponent title="组件 A" />
|
|
231
|
-
// <GenericComponent title="组件 B" />
|
|
232
|
-
// <CustomChatComponent />
|
|
233
|
-
// </div>
|
|
234
|
-
|
|
235
|
-
// {/* 聊天机器人 */}
|
|
236
|
-
// <XAiChatbot
|
|
237
|
-
// navbarShow
|
|
238
|
-
// navbar={{
|
|
239
|
-
// title: '灵活 Hook 示例',
|
|
240
|
-
// subtitle: '所有组件共享 Provider 状态',
|
|
241
|
-
// avatar: 'https://via.placeholder.com/40',
|
|
242
|
-
// }}
|
|
243
|
-
// />
|
|
244
|
-
// </div>
|
|
245
|
-
// </XAiProvider>
|
|
246
|
-
// </div>
|
|
247
|
-
// ),
|
|
248
|
-
// args: {
|
|
249
|
-
// url: 'https://api.example.com/ai',
|
|
250
|
-
// token: 'your-token-here',
|
|
251
|
-
// providerId: 'flexibility-example',
|
|
252
|
-
// },
|
|
253
|
-
// parameters: {
|
|
254
|
-
// docs: {
|
|
255
|
-
// description: {
|
|
256
|
-
// story: '展示如何使用 useProviderContext 和 useProviderMethods Hook 来创建可复用的组件。',
|
|
257
|
-
// },
|
|
258
|
-
// },
|
|
259
|
-
// },
|
|
260
|
-
// };
|
|
261
|
-
|
|
262
|
-
// // 展示独立组件 vs Provider 组件的对比
|
|
263
|
-
// export const ComponentComparison: Story = {
|
|
264
|
-
// render: (args) => (
|
|
265
|
-
// <div style={{ display: 'flex', gap: '20px', padding: '20px' }}>
|
|
266
|
-
// {/* 独立使用的组件 */}
|
|
267
|
-
// <div style={{ width: '300px' }}>
|
|
268
|
-
// <h4>独立组件</h4>
|
|
269
|
-
// <GenericComponent title="独立组件" />
|
|
270
|
-
// <CustomChatComponent />
|
|
271
|
-
// </div>
|
|
272
|
-
|
|
273
|
-
// {/* 在 Provider 中的组件 */}
|
|
274
|
-
// <div style={{ width: '300px' }}>
|
|
275
|
-
// <h4>Provider 中的组件</h4>
|
|
276
|
-
// <XAiProvider {...args}>
|
|
277
|
-
// <GenericComponent title="Provider 组件" />
|
|
278
|
-
// <CustomChatComponent />
|
|
279
|
-
// <XAiChatbot
|
|
280
|
-
// navbarShow
|
|
281
|
-
// navbar={{
|
|
282
|
-
// title: '示例聊天机器人',
|
|
283
|
-
// subtitle: '在 Provider 中',
|
|
284
|
-
// avatar: 'https://via.placeholder.com/40',
|
|
285
|
-
// }}
|
|
286
|
-
// />
|
|
287
|
-
// </XAiProvider>
|
|
288
|
-
// </div>
|
|
289
|
-
// </div>
|
|
290
|
-
// ),
|
|
291
|
-
// args: {
|
|
292
|
-
// url: 'https://api.example.com/ai',
|
|
293
|
-
// token: 'your-token-here',
|
|
294
|
-
// providerId: 'comparison-example',
|
|
295
|
-
// },
|
|
296
|
-
// };
|
|
297
155
|
//# sourceMappingURL=XAiProvider.stories.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","XAiProvider","XAiChatbot","jsx","_jsx","jsxs","_jsxs","meta","title","component","parameters","layout","docs","description","tags","argTypes","url","control","token","providerId","decorators","Story","style","padding","children","WithProvider","render","args","width","height","_objectSpread","navbarShow","navbar","subtitle","avatar","config","appNo","pt","tc","MultipleProviders","display","gap"],"sources":["../../../../src/components/XAiProvider/XAiProvider.stories.tsx"],"sourcesContent":["import type { Meta, StoryObj } from '@storybook/react-vite';\nimport React from 'react';\nimport XAiProvider from './index';\nimport XAiChatbot from '../XAiChatbot';\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 WithProvider: 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://via.placeholder.com/40',\n }}\n />\n </XAiProvider>\n </div>\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 MultipleProviders: 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://via.placeholder.com/40',\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://via.placeholder.com/40',\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\n// // 自定义消息处理示例\n// export const CustomMessageHandling: Story = {\n// render: (args) => (\n// <div style={{ width: '400px', height: '600px' }}>\n// <XAiProvider {...args}>\n// <XAiChatbot\n// navbarShow\n// navbar={{\n// title: '自定义处理',\n// subtitle: '自定义消息处理逻辑',\n// avatar: 'https://via.placeholder.com/40',\n// }}\n// messageActions={[\n// {\n// key: 'custom',\n// icon: <span>🔧</span>,\n// tooltip: '自定义操作',\n// },\n// ]}\n// onMessagesActionsCallback={(index, data) => {\n// console.log('自定义操作:', index, data);\n// }}\n// />\n// </XAiProvider>\n// </div>\n// ),\n// args: {\n// url: 'https://api.example.com/ai',\n// token: 'your-token-here',\n// providerId: 'custom-provider',\n// },\n// };\n\n// // 示例 1: 使用通用 Hook 的组件\n// const GenericComponent = React.memo<{ title: string }>(({ title }) => {\n// const { isInProvider, getProviderValue } = useProviderContext({\n// props: { title },\n// });\n\n// const providerMethods = useProviderMethods();\n\n// const handleCustomAction = () => {\n// if (isInProvider) {\n// providerMethods.sendMessage?.('自定义消息');\n// } else {\n// console.log('独立组件动作');\n// }\n// };\n\n// return (\n// <div style={{ padding: '20px', border: '1px solid #ccc', marginBottom: '10px' }}>\n// <h3>{title}</h3>\n// <p>是否在 Provider 中: {isInProvider ? '是' : '否'}</p>\n// <p>消息数量: {getProviderValue('messages')?.length || 0}</p>\n// <button onClick={handleCustomAction}>\n// {isInProvider ? '使用 Provider 方法' : '使用原有回调'}\n// </button>\n// </div>\n// );\n// });\n\n// // 示例 2: 自定义聊天组件\n// const CustomChatComponent = React.memo(() => {\n// const { isInProvider, getProviderValue } = useProviderContext({\n// props: {},\n// });\n\n// const providerMethods = useProviderMethods();\n\n// const messageCount = getProviderValue('messages')?.length || 0;\n// const theme = messageCount > 5 ? 'dark' : 'light';\n\n// return (\n// <div style={{\n// padding: '20px',\n// backgroundColor: theme === 'dark' ? '#333' : '#fff',\n// color: theme === 'dark' ? '#fff' : '#333',\n// border: '1px solid #ccc',\n// marginBottom: '10px',\n// }}\n// >\n// <h3>自定义聊天组件</h3>\n// <p>主题: {theme}</p>\n// <p>是否在 Provider 中: {isInProvider ? '是' : '否'}</p>\n// <button\n// onClick={() => providerMethods.sendMessage?.('Hello from custom component')}\n// disabled={!isInProvider}\n// >\n// 发送消息\n// </button>\n// </div>\n// );\n// });\n\n// // 展示 Hook 灵活性的示例\n// export const HookFlexibilityExample: Story = {\n// render: (args) => (\n// <div style={{ width: '600px', height: '800px' }}>\n// <XAiProvider {...args}>\n// <div style={{ padding: '20px' }}>\n// <h3>Hook 灵活性示例</h3>\n// <p>展示不同组件如何使用相同的 Hook</p>\n\n// {/* 不同的组件使用相同的 Hook */}\n// <div style={{ marginBottom: '20px' }}>\n// <GenericComponent title=\"组件 A\" />\n// <GenericComponent title=\"组件 B\" />\n// <CustomChatComponent />\n// </div>\n\n// {/* 聊天机器人 */}\n// <XAiChatbot\n// navbarShow\n// navbar={{\n// title: '灵活 Hook 示例',\n// subtitle: '所有组件共享 Provider 状态',\n// avatar: 'https://via.placeholder.com/40',\n// }}\n// />\n// </div>\n// </XAiProvider>\n// </div>\n// ),\n// args: {\n// url: 'https://api.example.com/ai',\n// token: 'your-token-here',\n// providerId: 'flexibility-example',\n// },\n// parameters: {\n// docs: {\n// description: {\n// story: '展示如何使用 useProviderContext 和 useProviderMethods Hook 来创建可复用的组件。',\n// },\n// },\n// },\n// };\n\n// // 展示独立组件 vs Provider 组件的对比\n// export const ComponentComparison: Story = {\n// render: (args) => (\n// <div style={{ display: 'flex', gap: '20px', padding: '20px' }}>\n// {/* 独立使用的组件 */}\n// <div style={{ width: '300px' }}>\n// <h4>独立组件</h4>\n// <GenericComponent title=\"独立组件\" />\n// <CustomChatComponent />\n// </div>\n\n// {/* 在 Provider 中的组件 */}\n// <div style={{ width: '300px' }}>\n// <h4>Provider 中的组件</h4>\n// <XAiProvider {...args}>\n// <GenericComponent title=\"Provider 组件\" />\n// <CustomChatComponent />\n// <XAiChatbot\n// navbarShow\n// navbar={{\n// title: '示例聊天机器人',\n// subtitle: '在 Provider 中',\n// avatar: 'https://via.placeholder.com/40',\n// }}\n// />\n// </XAiProvider>\n// </div>\n// </div>\n// ),\n// args: {\n// url: 'https://api.example.com/ai',\n// token: 'your-token-here',\n// providerId: 'comparison-example',\n// },\n// };\n"],"mappings":"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ACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}
|
|
1
|
+
{"version":3,"names":["React","XAiProvider","XAiChatbot","jsx","_jsx","jsxs","_jsxs","meta","title","component","parameters","layout","docs","description","tags","argTypes","url","control","token","providerId","decorators","Story","style","padding","children","单聊天窗口","render","args","width","height","_objectSpread","navbarShow","navbar","subtitle","avatar","config","appNo","pt","tc","多容器示例","display","gap"],"sources":["../../../../src/components/XAiProvider/XAiProvider.stories.tsx"],"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"],"mappings":"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"}
|
|
@@ -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,12 @@
|
|
|
1
|
+
import _taggedTemplateLiteral from "@babel/runtime/helpers/esm/taggedTemplateLiteral";
|
|
2
|
+
var _templateObject;
|
|
3
|
+
import { css } from '@emotion/css';
|
|
4
|
+
import { withBasicStyles } from "../../styles/common";
|
|
5
|
+
var useStyles = withBasicStyles(function () {
|
|
6
|
+
return {
|
|
7
|
+
// 静态样式
|
|
8
|
+
wrapper: css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n width: '100vw';\n height: '100vh';\n backgroundColor: rgb(240, 242, 245);\n display: flex;\n "])))
|
|
9
|
+
};
|
|
10
|
+
});
|
|
11
|
+
export default useStyles;
|
|
12
|
+
//# sourceMappingURL=demo.styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["css","withBasicStyles","useStyles","wrapper","_templateObject","_taggedTemplateLiteral"],"sources":["../../../../src/components/XAiProvider/demo.styles.tsx"],"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"],"mappings":";;AAAA,SAASA,GAAG,QAAQ,cAAc;AAClC,SAASC,eAAe;AAExB,IAAMC,SAAS,GAAGD,eAAe,CAAC;EAAA,OAAO;IACvC;IACAE,OAAO,EAAEH,GAAG,CAAAI,eAAA,KAAAA,eAAA,GAAAC,sBAAA;EAMd,CAAC;AAAA,CAAC,CAAC;AAEH,eAAeH,SAAS"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { message, Divider } from 'antd';
|
|
3
|
+
import { v4 as uuidV4 } from 'uuid';
|
|
3
4
|
import copy from 'copy-to-clipboard';
|
|
4
5
|
import { XProvider } from '@ant-design/x';
|
|
5
6
|
import { XAiContext } from "../../context/AiProviderContext";
|
|
@@ -30,6 +31,7 @@ var XAiProvider = function XAiProvider(_ref) {
|
|
|
30
31
|
reChat = _useAgentGenerator.reChat,
|
|
31
32
|
messages = _useAgentGenerator.messages,
|
|
32
33
|
loading = _useAgentGenerator.loading,
|
|
34
|
+
setCurrentSession = _useAgentGenerator.setCurrentSession,
|
|
33
35
|
setMessages = _useAgentGenerator.setMessages;
|
|
34
36
|
var _ref2 = appInfo || {},
|
|
35
37
|
appName = _ref2.appName,
|
|
@@ -44,6 +46,7 @@ var XAiProvider = function XAiProvider(_ref) {
|
|
|
44
46
|
var handleClearMessage = function handleClearMessage() {
|
|
45
47
|
stopChat();
|
|
46
48
|
setMessages([]);
|
|
49
|
+
setCurrentSession(uuidV4());
|
|
47
50
|
};
|
|
48
51
|
|
|
49
52
|
// 工具栏按钮点击
|
|
@@ -110,10 +113,17 @@ var XAiProvider = function XAiProvider(_ref) {
|
|
|
110
113
|
return /*#__PURE__*/_jsx(XProvider, {
|
|
111
114
|
children: /*#__PURE__*/_jsx(XAiContext.Provider, {
|
|
112
115
|
value: {
|
|
113
|
-
avatar:
|
|
114
|
-
|
|
116
|
+
avatar: /*#__PURE__*/_jsx("img", {
|
|
117
|
+
src: icon,
|
|
118
|
+
alt: "\u667A\u80FD\u4F53\u5934\u50CF"
|
|
119
|
+
}),
|
|
120
|
+
userAvatar: /*#__PURE__*/_jsx("img", {
|
|
121
|
+
src: userIcon,
|
|
122
|
+
alt: "\u7528\u6237\u5934\u50CF"
|
|
123
|
+
}),
|
|
115
124
|
emptyStateImage: icon,
|
|
116
125
|
emptyStateText: appName,
|
|
126
|
+
footerTips: '内容由AI生成,无法确保真实准确,仅供参考',
|
|
117
127
|
providerId: providerId,
|
|
118
128
|
token: token,
|
|
119
129
|
messages: messages,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","message","Divider","copy","XProvider","XAiContext","useAgentGenerator","userIcon","jsxs","_jsxs","jsx","_jsx","XAiProvider","_ref","url","token","config","_ref$providerId","providerId","onSuccess","onError","children","_useAgentGenerator","appInfo","chat","stopChat","reChat","messages","loading","setMessages","_ref2","appName","icon","handleSendMessage","_type","content","handleClearMessage","handleActions","index","actionData","_ref3","id","_content$text","text","success","prev","filter","item","handleSuggestMessageClick","_item","m","ToolTip","messageData","finalResult","think","find","actionName","_ref4","extra","cost","tokenCount","style","display","alignItems","fontSize","color","flex","paddingRight","undefined","type","Provider","value","avatar","userAvatar","emptyStateImage","emptyStateText","error","messageTooltip","onSend","onClear","onStop","onSuggestMessageClick","onMessagesActionsCallback","isInProvider"],"sources":["../../../../src/components/XAiProvider/index.tsx"],"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 onSuccess,\n onError,\n children,\n}: XAiProviderProps) => {\n // 使用 useAgentGenerator Hook 管理消息状态\n const { appInfo, chat, stopChat, reChat, messages, loading, 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 };\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
|
|
1
|
+
{"version":3,"names":["React","message","Divider","v4","uuidV4","copy","XProvider","XAiContext","useAgentGenerator","userIcon","jsxs","_jsxs","jsx","_jsx","XAiProvider","_ref","url","token","config","_ref$providerId","providerId","onSuccess","onError","children","_useAgentGenerator","appInfo","chat","stopChat","reChat","messages","loading","setCurrentSession","setMessages","_ref2","appName","icon","handleSendMessage","_type","content","handleClearMessage","handleActions","index","actionData","_ref3","id","_content$text","text","success","prev","filter","item","handleSuggestMessageClick","_item","m","ToolTip","messageData","finalResult","think","find","actionName","_ref4","extra","cost","tokenCount","style","display","alignItems","fontSize","color","flex","paddingRight","undefined","type","Provider","value","avatar","src","alt","userAvatar","emptyStateImage","emptyStateText","footerTips","error","messageTooltip","onSend","onClear","onStop","onSuggestMessageClick","onMessagesActionsCallback","isInProvider"],"sources":["../../../../src/components/XAiProvider/index.tsx"],"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"],"mappings":"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"}
|
|
@@ -63,8 +63,11 @@ declare const useAgentGenerator: ({ url, token, config, onError, onSuccess, }: U
|
|
|
63
63
|
messages: Messages[];
|
|
64
64
|
loading: boolean;
|
|
65
65
|
content: any;
|
|
66
|
+
sessionsList: any[];
|
|
67
|
+
currentSession: string;
|
|
66
68
|
reChat: () => void;
|
|
67
69
|
chat: (content: any) => Promise<void>;
|
|
70
|
+
setCurrentSession: import("react").Dispatch<import("react").SetStateAction<string>>;
|
|
68
71
|
setMessage: (messageType: string, content: any) => Promise<void>;
|
|
69
72
|
setMessages: import("react").Dispatch<import("react").SetStateAction<Messages[]>>;
|
|
70
73
|
stopChat: () => void;
|