@ai-group/chat-sdk 0.2.5 → 0.2.7

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 (149) hide show
  1. package/dist/cjs/assets/arrow-down.png +0 -0
  2. package/dist/cjs/assets/arrow-up.png +0 -0
  3. package/dist/cjs/assets/chatKnowledge.png +0 -0
  4. package/dist/cjs/assets/completed-black.png +0 -0
  5. package/dist/cjs/assets/completed.png +0 -0
  6. package/dist/cjs/assets/document-black.png +0 -0
  7. package/dist/cjs/assets/document.png +0 -0
  8. package/dist/cjs/assets/document.svg +16 -0
  9. package/dist/cjs/assets/empty.png +0 -0
  10. package/dist/cjs/assets/group.png +0 -0
  11. package/dist/cjs/assets/qa-black.png +0 -0
  12. package/dist/cjs/assets/qa.png +0 -0
  13. package/dist/cjs/assets/skillNo-black.png +0 -0
  14. package/dist/cjs/assets/skillNo.png +0 -0
  15. package/dist/cjs/assets/tools-black.png +0 -0
  16. package/dist/cjs/assets/tools.png +0 -0
  17. package/dist/cjs/assets/user.png +0 -0
  18. package/dist/cjs/client/base.d.ts +9 -0
  19. package/dist/cjs/client/base.js +18 -0
  20. package/dist/cjs/client/base.js.map +7 -0
  21. package/dist/cjs/client/restClient.d.ts +0 -0
  22. package/dist/cjs/client/restClient.js +1 -0
  23. package/dist/cjs/client/restClient.js.map +7 -0
  24. package/dist/cjs/client/wsClient.d.ts +0 -0
  25. package/dist/cjs/client/wsClient.js +1 -0
  26. package/dist/cjs/client/wsClient.js.map +7 -0
  27. package/dist/cjs/components/XAiChatbot/XAiChatbot.stories.d.ts +10 -0
  28. package/dist/cjs/components/XAiChatbot/XAiChatbot.stories.js +484 -0
  29. package/dist/cjs/components/XAiChatbot/XAiChatbot.stories.js.map +7 -0
  30. package/dist/cjs/components/XAiChatbot/index.d.ts +12 -0
  31. package/dist/cjs/components/XAiChatbot/index.js +365 -0
  32. package/dist/cjs/components/XAiChatbot/index.js.map +7 -0
  33. package/dist/cjs/components/XAiChatbot/styles.d.ts +71 -0
  34. package/dist/cjs/components/XAiChatbot/styles.js +409 -0
  35. package/dist/cjs/components/XAiChatbot/styles.js.map +7 -0
  36. package/dist/cjs/components/XAiProvider/XAiProvider.stories.d.ts +7 -0
  37. package/dist/cjs/components/XAiProvider/XAiProvider.stories.js +127 -0
  38. package/dist/cjs/components/XAiProvider/XAiProvider.stories.js.map +7 -0
  39. package/dist/cjs/components/XAiProvider/index.d.ts +4 -0
  40. package/dist/cjs/components/XAiProvider/index.js +113 -0
  41. package/dist/cjs/components/XAiProvider/index.js.map +7 -0
  42. package/dist/cjs/components/XAiSDK.d.ts +10 -0
  43. package/dist/cjs/components/XAiSDK.js +53 -0
  44. package/dist/cjs/components/XAiSDK.js.map +7 -0
  45. package/dist/cjs/components/XAiWebSDKWrapper.d.ts +9 -0
  46. package/dist/cjs/components/XAiWebSDKWrapper.js +64 -0
  47. package/dist/cjs/components/XAiWebSDKWrapper.js.map +7 -0
  48. package/dist/cjs/context/AiProviderContext.d.ts +12 -0
  49. package/dist/cjs/context/AiProviderContext.js +74 -0
  50. package/dist/cjs/context/AiProviderContext.js.map +7 -0
  51. package/dist/cjs/context/ThemeContext.d.ts +20 -0
  52. package/dist/cjs/context/ThemeContext.js +37 -0
  53. package/dist/cjs/context/ThemeContext.js.map +7 -0
  54. package/dist/cjs/hooks/useAgentGenerator.d.ts +67 -0
  55. package/dist/cjs/hooks/useAgentGenerator.js +445 -0
  56. package/dist/cjs/hooks/useAgentGenerator.js.map +7 -0
  57. package/dist/cjs/hooks/useEventStreamRequest.d.ts +30 -0
  58. package/dist/cjs/hooks/useEventStreamRequest.js +188 -0
  59. package/dist/cjs/hooks/useEventStreamRequest.js.map +7 -0
  60. package/dist/cjs/hooks/useProviderContext.d.ts +33 -0
  61. package/dist/cjs/hooks/useProviderContext.js +105 -0
  62. package/dist/cjs/hooks/useProviderContext.js.map +7 -0
  63. package/dist/cjs/hooks/useXAiSDK.d.ts +14 -0
  64. package/dist/cjs/hooks/useXAiSDK.js +75 -0
  65. package/dist/cjs/hooks/useXAiSDK.js.map +7 -0
  66. package/dist/cjs/index.d.ts +9 -0
  67. package/dist/cjs/index.js +61 -0
  68. package/dist/cjs/index.js.map +7 -0
  69. package/dist/cjs/services/api.d.ts +40 -0
  70. package/dist/cjs/services/api.js +49 -0
  71. package/dist/cjs/services/api.js.map +7 -0
  72. package/dist/cjs/styles/common.d.ts +64 -0
  73. package/dist/cjs/styles/common.js +144 -0
  74. package/dist/cjs/styles/common.js.map +7 -0
  75. package/dist/cjs/styles/markdown.d.ts +3 -0
  76. package/dist/cjs/styles/markdown.js +193 -0
  77. package/dist/cjs/styles/markdown.js.map +7 -0
  78. package/dist/cjs/types/XAiChatbot.d.ts +159 -0
  79. package/dist/cjs/types/XAiChatbot.js +18 -0
  80. package/dist/cjs/types/XAiChatbot.js.map +7 -0
  81. package/dist/cjs/types/XAiMessage.d.ts +121 -0
  82. package/dist/cjs/types/XAiMessage.js +55 -0
  83. package/dist/cjs/types/XAiMessage.js.map +7 -0
  84. package/dist/cjs/types/XAiProvider.d.ts +32 -0
  85. package/dist/cjs/types/XAiProvider.js +41 -0
  86. package/dist/cjs/types/XAiProvider.js.map +7 -0
  87. package/dist/cjs/types/index.d.ts +3 -0
  88. package/dist/cjs/types/index.js +28 -0
  89. package/dist/cjs/types/index.js.map +7 -0
  90. package/dist/cjs/types/mdx.d.ts +18 -0
  91. package/dist/cjs/utils/chat.d.ts +34 -0
  92. package/dist/cjs/utils/chat.js +1 -0
  93. package/dist/cjs/utils/chat.js.map +7 -0
  94. package/dist/cjs/utils/index.d.ts +2 -0
  95. package/dist/cjs/utils/index.js +49 -0
  96. package/dist/cjs/utils/index.js.map +7 -0
  97. package/dist/cjs/utils/providerManager.d.ts +22 -0
  98. package/dist/cjs/utils/providerManager.js +73 -0
  99. package/dist/cjs/utils/providerManager.js.map +7 -0
  100. package/dist/cjs/utils/request.d.ts +78 -0
  101. package/dist/cjs/utils/request.example.d.ts +39 -0
  102. package/dist/cjs/utils/request.example.js +211 -0
  103. package/dist/cjs/utils/request.example.js.map +7 -0
  104. package/dist/cjs/utils/request.js +231 -0
  105. package/dist/cjs/utils/request.js.map +7 -0
  106. package/dist/cjs/utils/umdEntry.d.ts +11 -0
  107. package/dist/cjs/utils/umdEntry.js +95 -0
  108. package/dist/cjs/utils/umdEntry.js.map +7 -0
  109. package/dist/esm/assets/user.png +0 -0
  110. package/dist/esm/client/base.d.ts +9 -0
  111. package/dist/esm/client/restClient.d.ts +0 -0
  112. package/dist/esm/client/wsClient.d.ts +0 -0
  113. package/dist/esm/components/XAiChatbot/XAiChatbot.stories.d.ts +10 -0
  114. package/dist/esm/components/XAiChatbot/index.d.ts +12 -0
  115. package/dist/esm/components/XAiChatbot/index.js +11 -3
  116. package/dist/esm/components/XAiChatbot/index.js.map +1 -1
  117. package/dist/esm/components/XAiChatbot/styles.d.ts +71 -0
  118. package/dist/esm/components/XAiChatbot/styles.js +2 -2
  119. package/dist/esm/components/XAiChatbot/styles.js.map +1 -1
  120. package/dist/esm/components/XAiProvider/XAiProvider.stories.d.ts +7 -0
  121. package/dist/esm/components/XAiProvider/index.d.ts +4 -0
  122. package/dist/esm/components/XAiProvider/index.js +3 -0
  123. package/dist/esm/components/XAiProvider/index.js.map +1 -1
  124. package/dist/esm/components/XAiSDK.d.ts +10 -0
  125. package/dist/esm/components/XAiWebSDKWrapper.d.ts +9 -0
  126. package/dist/esm/context/AiProviderContext.d.ts +12 -0
  127. package/dist/esm/context/ThemeContext.d.ts +20 -0
  128. package/dist/esm/hooks/useAgentGenerator.d.ts +67 -0
  129. package/dist/esm/hooks/useAgentGenerator.js +50 -17
  130. package/dist/esm/hooks/useAgentGenerator.js.map +1 -1
  131. package/dist/esm/hooks/useEventStreamRequest.d.ts +30 -0
  132. package/dist/esm/hooks/useProviderContext.d.ts +33 -0
  133. package/dist/esm/hooks/useXAiSDK.d.ts +14 -0
  134. package/dist/esm/index.d.ts +9 -0
  135. package/dist/esm/services/api.d.ts +40 -0
  136. package/dist/esm/styles/common.d.ts +64 -0
  137. package/dist/esm/styles/markdown.d.ts +3 -0
  138. package/dist/esm/types/XAiChatbot.d.ts +159 -0
  139. package/dist/esm/types/XAiMessage.d.ts +121 -0
  140. package/dist/esm/types/XAiProvider.d.ts +32 -0
  141. package/dist/esm/types/index.d.ts +3 -0
  142. package/dist/esm/utils/chat.d.ts +34 -0
  143. package/dist/esm/utils/index.d.ts +2 -0
  144. package/dist/esm/utils/providerManager.d.ts +22 -0
  145. package/dist/esm/utils/request.d.ts +78 -0
  146. package/dist/esm/utils/request.example.d.ts +39 -0
  147. package/dist/esm/utils/umdEntry.d.ts +11 -0
  148. package/dist/umd/chat-sdk.min.js +1 -1
  149. package/package.json +1 -1
@@ -0,0 +1,409 @@
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/XAiChatbot/styles.tsx
30
+ var styles_exports = {};
31
+ __export(styles_exports, {
32
+ GlobalStyle: () => GlobalStyle,
33
+ useStyles: () => useStyles
34
+ });
35
+ module.exports = __toCommonJS(styles_exports);
36
+ var import_react = __toESM(require("react"));
37
+ var import_css = require("@emotion/css");
38
+ var import_react2 = require("@emotion/react");
39
+ var import_common = require("../../styles/common");
40
+ var primaryBlue = "#0078FF";
41
+ var lightBlue = "#E6F0FF";
42
+ var darkGray = "#333";
43
+ var lightGray = "#888";
44
+ var borderGray = "#ddd";
45
+ var useStyles = (0, import_common.withBasicStyles)(() => ({
46
+ // 静态样式
47
+ wrapper: import_css.css`
48
+ display: flex;
49
+ flex-direction: column;
50
+ max-height: 812px;
51
+ min-height: 300px;
52
+ width: 100%;
53
+ height: 100%;
54
+ min-width: 375px;
55
+ background-color: #fff;
56
+ // border: 1px solid rgba(80,96,122,.15);
57
+ border-radius: 12px;
58
+ overflow: hidden;
59
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen,
60
+ Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
61
+ `,
62
+ navbar: import_css.css`
63
+ display: flex;
64
+ align-items: center;
65
+ justify-content: center;
66
+ padding: 12px 16px;
67
+ border-bottom: 1px solid ${borderGray};
68
+ background-color: #fff;
69
+ `,
70
+ avatar: import_css.css`
71
+ width: 40px;
72
+ height: 40px;
73
+ border-radius: 50%;
74
+ object-fit: cover;
75
+ margin-right: 12px;
76
+ border: 1px solid ${borderGray};
77
+ `,
78
+ title: import_css.css`
79
+ font-weight: 600;
80
+ font-size: 16px;
81
+ color: ${darkGray};
82
+ `,
83
+ subtitle: import_css.css`
84
+ font-size: 12px;
85
+ color: ${lightGray};
86
+ margin-top: 2px;
87
+ `,
88
+ messageContainer: import_css.css`
89
+ flex: 1;
90
+ overflow-y: auto;
91
+ padding: 16px;
92
+ background-color: #fff;
93
+ display: flex;
94
+ flex-direction: column;
95
+ gap: 10px;
96
+ min-height: 0;
97
+ position: relative;
98
+ `,
99
+ emptyWrapper: import_css.css`
100
+ height: 100%;
101
+ display: flex;
102
+ flex-direction: column;
103
+ align-items: center;
104
+ justify-content: center;
105
+ color: '#222';
106
+ userSelect: none;
107
+ `,
108
+ emptyImg: import_css.css`
109
+ width: 60px;
110
+ height: 60px;
111
+ margin-bottom: 16px;
112
+ `,
113
+ message: import_css.css`
114
+ max-width: 70%;
115
+ padding: 10px 14px;
116
+ border-radius: 20px;
117
+ background-color: ${lightBlue};
118
+ color: ${darkGray};
119
+ font-size: 14px;
120
+ line-height: 1.4;
121
+ word-break: break-word;
122
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
123
+ `,
124
+ messageRight: import_css.css`
125
+ align-self: flex-end;
126
+ background-color: ${primaryBlue};
127
+ color: white;
128
+ border-bottom-right-radius: 4px;
129
+ border-bottom-left-radius: 20px;
130
+ border-top-left-radius: 20px;
131
+ border-top-right-radius: 20px;
132
+ `,
133
+ quickReplies: import_css.css`
134
+ display: flex;
135
+ gap: 8px;
136
+ padding: 10px 16px;
137
+ border-top: 1px solid ${borderGray};
138
+ background-color: #fff;
139
+ overflow-x: auto;
140
+ `,
141
+ replyItem: import_css.css`
142
+ padding: 6px 12px;
143
+ font-size: 13px;
144
+ border: 1px solid ${primaryBlue};
145
+ border-radius: 20px;
146
+ background-color: #fff;
147
+ color: ${primaryBlue};
148
+ cursor: pointer;
149
+ white-space: nowrap;
150
+ user-select: none;
151
+ transition: all 0.2s ease;
152
+
153
+ &:hover {
154
+ background-color: ${primaryBlue};
155
+ color: #fff;
156
+ }
157
+ `,
158
+ highlight: import_css.css`
159
+ background-color: ${primaryBlue};
160
+ color: white;
161
+ border-color: ${primaryBlue};
162
+ `,
163
+ inputBar: import_css.css`
164
+ display: flex;
165
+ align-items: center;
166
+ padding: 10px 16px;
167
+ border-top: 1px solid ${borderGray};
168
+ background-color: #fff;
169
+ `,
170
+ input: import_css.css`
171
+ flex: 1;
172
+ padding: 8px 12px;
173
+ border: 1px solid ${borderGray};
174
+ border-radius: 20px;
175
+ font-size: 14px;
176
+ outline: none;
177
+
178
+ &:focus {
179
+ border-color: ${primaryBlue};
180
+ box-shadow: 0 0 3px ${primaryBlue};
181
+ }
182
+ `,
183
+ sendWrapper: import_css.css`
184
+ flex: 1;
185
+ border-radius: 26px;
186
+ `,
187
+ stopButton: import_css.css`
188
+ width: 23px !important;
189
+ height: 23px !important;
190
+ padding: 0 !important;
191
+ min-width: 23px !important;
192
+ min-height: 23px !important;
193
+ display: flex;
194
+ align-items: center;
195
+ justify-content: center;
196
+ `,
197
+ sendButton: import_css.css`
198
+ width: 23px !important;
199
+ height: 23px !important;
200
+ padding: 0 !important;
201
+ min-width: 23px !important;
202
+ min-height: 23px !important;
203
+ display: flex;
204
+ align-items: center;
205
+ justify-content: center;
206
+ background-color: ${primaryBlue};
207
+ border: none;
208
+ border-radius: 20px;
209
+ color: white;
210
+ font-weight: 600;
211
+ cursor: pointer;
212
+ transition: background-color 0.2s ease;
213
+ box-sizing: border-box;
214
+ &:hover {
215
+ background-color: #005ecb;
216
+ }
217
+ &:disabled {
218
+ background-color: ${lightBlue};
219
+ cursor: not-allowed;
220
+ }
221
+ `,
222
+ uploadBtn: import_css.css`
223
+ margin-left: 8px;
224
+ width: 32px;
225
+ height: 32px;
226
+ border-radius: 50%;
227
+ background-color: ${primaryBlue};
228
+ color: white;
229
+ font-weight: 700;
230
+ font-size: 22px;
231
+ line-height: 32px;
232
+ text-align: center;
233
+ cursor: pointer;
234
+ border: none;
235
+ user-select: none;
236
+ &:hover {
237
+ background-color: #005ecb;
238
+ }
239
+ `,
240
+ clearBtn: import_css.css`
241
+ display: flex;
242
+ align-items: center;
243
+ justify-content: center;
244
+ cursor: pointer;
245
+ border: 1px solid rgb(228, 231, 236);
246
+ border-radius: 12px;
247
+ width: 45px;
248
+ height: 45px;
249
+ box-sizing: border-box;
250
+ `,
251
+ chatFooter: import_css.css`
252
+ gap: 8px;
253
+ position: relatative;
254
+ z-index: 10;
255
+ padding: 0 20px 10px 20px;
256
+ `,
257
+ // todo 后续增加safe-bottom
258
+ flexCenterGap2: import_css.css`
259
+ display: flex;
260
+ align-items: center;
261
+ gap: 8px;
262
+ `,
263
+ iconHuihuarenqun: import_css.css`
264
+ font-family: "iconfont";
265
+ font-size: 16px;
266
+ font-weight: 300;
267
+ padding: 3px;
268
+ border-radius: 6px;
269
+ color: #181B25;
270
+ cursor: pointer;
271
+ &:hover {
272
+ background: #E1E4EA;
273
+ color: #7F56D9;
274
+ }
275
+ `,
276
+ popoverFooter: import_css.css`
277
+ display: flex;
278
+ gap: 8px;
279
+ justify-content: end;
280
+ `,
281
+ divider: import_css.css`
282
+ width: 1px;
283
+ height: 15px;
284
+ margin-left: 3px;
285
+ margin-right: 3px;
286
+ background: #D0D5DD;
287
+ `,
288
+ flexCenterGap4: import_css.css`
289
+ display: flex;
290
+ align-items: center;
291
+ gap: 4px;
292
+ color: #7F56D9;
293
+ cursor: pointer;
294
+ &:hover {
295
+ opacity: 0.8;
296
+ }
297
+ `,
298
+ iconZengjiaDisabled: import_css.css`
299
+ font-family: "iconfont";
300
+ font-size: 25px;
301
+ font-weight: 300;
302
+ color: #D0D5DD;
303
+ cursor: not-allowed;
304
+ `,
305
+ iconZengjiaNormal: import_css.css`
306
+ font-family: "iconfont";
307
+ font-size: 25px;
308
+ font-weight: 300;
309
+ color: #98A2B3;
310
+ cursor: pointer;
311
+ &:hover {
312
+ color: #7F56D9;
313
+ }
314
+ `,
315
+ actionHeaderWrapper: import_css.css`
316
+ margin-bottom: 12px;
317
+ `,
318
+ actionHeaderItem: import_css.css`
319
+ display: flex;
320
+ align-items: center;
321
+ height: 40px;
322
+ box-sizing: border-box;
323
+ padding: 10px 16px;
324
+ margin-bottom: 8px;
325
+ background: #f7fafd;
326
+ cursor: pointer;
327
+ border-radius: 8px;
328
+ box-shadow: 0 1px 3px rgba(0,0,0,0.03);
329
+ `,
330
+ actionHeaderIcon: import_css.css`
331
+ height: 14px;
332
+ `,
333
+ actionHeaderText: import_css.css`
334
+ font-weight: 400;
335
+ font-size: 14px;
336
+ color: #3961F2;
337
+ margin-left: 10px;
338
+ margin-right: 6px;
339
+ `,
340
+ actionHeaderDetail: import_css.css`
341
+ background: #F3F5FA;
342
+ border-radius: 8px;
343
+ overflow: hidden;
344
+ `,
345
+ actionDetailTitle: import_css.css`
346
+ display: flex;
347
+ align-items: center;
348
+ padding: 0 16px;
349
+ box-sizing: border-box;
350
+ background: #EDEFF5;
351
+ height: 32px;
352
+ margin-bottom: 12px;
353
+ cursor: pointer;
354
+ `,
355
+ actionHeaderDetailItem: import_css.css`
356
+ display: flex;
357
+ align-items: center;
358
+ gap: 8px;
359
+ font-size: 14px;
360
+ padding: 0 16px;
361
+ margin-bottom: 12px;
362
+ color: #949494;
363
+ `,
364
+ actionHeaderCost: import_css.css`
365
+ margin-left: auto;
366
+ color: #888;
367
+ font-size: 12px;
368
+ min-width: 32px;
369
+ text-align: right;
370
+ `
371
+ }));
372
+ var GlobalStyle = () => /* @__PURE__ */ import_react.default.createElement(
373
+ import_react2.Global,
374
+ {
375
+ styles: import_react2.css`
376
+ .ant-bubble-footer {
377
+ display: flex;
378
+ align-items: center;
379
+ min-width: 0,
380
+ max-width: 600,
381
+ /* 你想覆盖的其他样式 */
382
+ }
383
+
384
+ .ant-sender {
385
+ box-shadow: none !important;
386
+ }
387
+
388
+ .ant-prompts-item {
389
+ padding-block: 8px !important;
390
+ }
391
+
392
+ /* 用户消息气泡背景色 */
393
+ .ant-bubble .user-content {
394
+ background-color: #D8E0FD;
395
+ }
396
+
397
+ /* 助手消息气泡背景色 */
398
+ .ant-bubble .assistant-content {
399
+ background-color: #F3F5FA;
400
+ }
401
+ `
402
+ }
403
+ );
404
+ // Annotate the CommonJS export names for ESM import in node:
405
+ 0 && (module.exports = {
406
+ GlobalStyle,
407
+ useStyles
408
+ });
409
+ //# sourceMappingURL=styles.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/components/XAiChatbot/styles.tsx"],
4
+ "sourcesContent": ["import React from 'react';\nimport { css } from '@emotion/css';\nimport { css as globalCss, Global } from '@emotion/react';\nimport { withBasicStyles } from '@/styles/common';\n\nconst primaryBlue = '#0078FF'; // 主蓝色\nconst lightBlue = '#E6F0FF'; // 浅蓝色气泡背景\nconst darkGray = '#333'; // 深灰色文本\nconst lightGray = '#888'; // 浅灰文本\nconst borderGray = '#ddd'; // 边框灰色\n\nexport const useStyles = withBasicStyles(() => ({\n // 静态样式\n wrapper: css`\n display: flex;\n flex-direction: column;\n max-height: 812px;\n min-height: 300px;\n width: 100%;\n height: 100%;\n min-width: 375px;\n background-color: #fff;\n // border: 1px solid rgba(80,96,122,.15);\n border-radius: 12px;\n overflow: hidden;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen,\n Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;\n `,\n\n navbar: css`\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 12px 16px;\n border-bottom: 1px solid ${borderGray};\n background-color: #fff;\n `,\n\n avatar: css`\n width: 40px;\n height: 40px;\n border-radius: 50%;\n object-fit: cover;\n margin-right: 12px;\n border: 1px solid ${borderGray};\n `,\n\n title: css`\n font-weight: 600;\n font-size: 16px;\n color: ${darkGray};\n `,\n\n subtitle: css`\n font-size: 12px;\n color: ${lightGray};\n margin-top: 2px;\n `,\n\n messageContainer: css`\n flex: 1;\n overflow-y: auto;\n padding: 16px;\n background-color: #fff;\n display: flex;\n flex-direction: column;\n gap: 10px;\n min-height: 0;\n position: relative;\n `,\n\n emptyWrapper: css`\n height: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n color: '#222';\n userSelect: none;\n `,\n\n emptyImg: css`\n width: 60px;\n height: 60px;\n margin-bottom: 16px;\n `,\n\n message: css`\n max-width: 70%;\n padding: 10px 14px;\n border-radius: 20px;\n background-color: ${lightBlue};\n color: ${darkGray};\n font-size: 14px;\n line-height: 1.4;\n word-break: break-word;\n box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);\n `,\n\n messageRight: css`\n align-self: flex-end;\n background-color: ${primaryBlue};\n color: white;\n border-bottom-right-radius: 4px;\n border-bottom-left-radius: 20px;\n border-top-left-radius: 20px;\n border-top-right-radius: 20px;\n `,\n\n quickReplies: css`\n display: flex;\n gap: 8px;\n padding: 10px 16px;\n border-top: 1px solid ${borderGray};\n background-color: #fff;\n overflow-x: auto;\n `,\n\n replyItem: css`\n padding: 6px 12px;\n font-size: 13px;\n border: 1px solid ${primaryBlue};\n border-radius: 20px;\n background-color: #fff;\n color: ${primaryBlue};\n cursor: pointer;\n white-space: nowrap;\n user-select: none;\n transition: all 0.2s ease;\n \n &:hover {\n background-color: ${primaryBlue};\n color: #fff;\n }\n `,\n\n highlight: css`\n background-color: ${primaryBlue};\n color: white;\n border-color: ${primaryBlue};\n `,\n\n inputBar: css`\n display: flex;\n align-items: center;\n padding: 10px 16px;\n border-top: 1px solid ${borderGray};\n background-color: #fff;\n `,\n\n input: css`\n flex: 1;\n padding: 8px 12px;\n border: 1px solid ${borderGray};\n border-radius: 20px;\n font-size: 14px;\n outline: none;\n \n &:focus {\n border-color: ${primaryBlue};\n box-shadow: 0 0 3px ${primaryBlue};\n }\n `,\n\n sendWrapper: css`\n flex: 1;\n border-radius: 26px;\n `,\n\n stopButton: css`\n width: 23px !important;\n height: 23px !important;\n padding: 0 !important;\n min-width: 23px !important;\n min-height: 23px !important;\n display: flex;\n align-items: center;\n justify-content: center;\n `,\n\n sendButton: css`\n width: 23px !important;\n height: 23px !important;\n padding: 0 !important;\n min-width: 23px !important;\n min-height: 23px !important;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: ${primaryBlue};\n border: none;\n border-radius: 20px;\n color: white;\n font-weight: 600;\n cursor: pointer;\n transition: background-color 0.2s ease;\n box-sizing: border-box;\n &:hover {\n background-color: #005ecb;\n }\n &:disabled {\n background-color: ${lightBlue};\n cursor: not-allowed;\n }\n `,\n\n uploadBtn: css`\n margin-left: 8px;\n width: 32px;\n height: 32px;\n border-radius: 50%;\n background-color: ${primaryBlue};\n color: white;\n font-weight: 700;\n font-size: 22px;\n line-height: 32px;\n text-align: center;\n cursor: pointer;\n border: none;\n user-select: none;\n &:hover {\n background-color: #005ecb;\n }\n `,\n\n clearBtn: css`\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n border: 1px solid rgb(228, 231, 236);\n border-radius: 12px;\n width: 45px;\n height: 45px;\n box-sizing: border-box;\n `,\n\n chatFooter: css`\n gap: 8px;\n position: relatative;\n z-index: 10;\n padding: 0 20px 10px 20px;\n `, // todo 后续增加safe-bottom\n\n flexCenterGap2: css`\n display: flex;\n align-items: center;\n gap: 8px;\n `,\n\n iconHuihuarenqun: css`\n font-family: \"iconfont\";\n font-size: 16px;\n font-weight: 300;\n padding: 3px;\n border-radius: 6px;\n color: #181B25;\n cursor: pointer;\n &:hover {\n background: #E1E4EA;\n color: #7F56D9;\n }\n `,\n\n popoverFooter: css`\n display: flex;\n gap: 8px;\n justify-content: end;\n `,\n\n divider: css`\n width: 1px;\n height: 15px;\n margin-left: 3px;\n margin-right: 3px;\n background: #D0D5DD;\n `,\n\n flexCenterGap4: css`\n display: flex;\n align-items: center;\n gap: 4px;\n color: #7F56D9;\n cursor: pointer;\n &:hover {\n opacity: 0.8;\n }\n `,\n\n iconZengjiaDisabled: css`\n font-family: \"iconfont\";\n font-size: 25px;\n font-weight: 300;\n color: #D0D5DD;\n cursor: not-allowed;\n `,\n\n iconZengjiaNormal: css`\n font-family: \"iconfont\";\n font-size: 25px;\n font-weight: 300;\n color: #98A2B3;\n cursor: pointer;\n &:hover {\n color: #7F56D9;\n }\n `,\n actionHeaderWrapper: css`\n margin-bottom: 12px;\n `,\n actionHeaderItem: css`\n display: flex;\n align-items: center;\n height: 40px;\n box-sizing: border-box;\n padding: 10px 16px;\n margin-bottom: 8px;\n background: #f7fafd;\n cursor: pointer;\n border-radius: 8px;\n box-shadow: 0 1px 3px rgba(0,0,0,0.03);\n `,\n actionHeaderIcon: css`\n height: 14px;\n `,\n actionHeaderText: css`\n font-weight: 400;\n font-size: 14px;\n color: #3961F2;\n margin-left: 10px;\n margin-right: 6px;\n `,\n actionHeaderDetail: css`\n background: #F3F5FA;\n border-radius: 8px;\n overflow: hidden;\n `,\n actionDetailTitle: css`\n display: flex;\n align-items: center;\n padding: 0 16px;\n box-sizing: border-box;\n background: #EDEFF5;\n height: 32px;\n margin-bottom: 12px;\n cursor: pointer;\n `,\n actionHeaderDetailItem: css`\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: 14px;\n padding: 0 16px;\n margin-bottom: 12px;\n color: #949494;\n `,\n actionHeaderCost: css`\n margin-left: auto;\n color: #888;\n font-size: 12px;\n min-width: 32px;\n text-align: right;\n `,\n}));\n\nexport const GlobalStyle: React.FC = () => (\n <Global\n styles={globalCss`\n .ant-bubble-footer {\n display: flex;\n align-items: center;\n min-width: 0,\n max-width: 600,\n /* 你想覆盖的其他样式 */\n }\n\n .ant-sender {\n box-shadow: none !important;\n }\n\n .ant-prompts-item {\n padding-block: 8px !important;\n }\n\n /* 用户消息气泡背景色 */\n .ant-bubble .user-content {\n background-color: #D8E0FD;\n }\n\n /* 助手消息气泡背景色 */\n .ant-bubble .assistant-content {\n background-color: #F3F5FA;\n }\n `}\n />\n);\n"],
5
+ "mappings": "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",
6
+ "names": ["import_react", "React", "globalCss"]
7
+ }
@@ -0,0 +1,7 @@
1
+ import type { Meta, StoryObj } from '@storybook/react-vite';
2
+ import XAiProvider from './index';
3
+ declare const meta: Meta<typeof XAiProvider>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof meta>;
6
+ export declare const WithProvider: Story;
7
+ export declare const MultipleProviders: Story;
@@ -0,0 +1,127 @@
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/XAiProvider/XAiProvider.stories.tsx
30
+ var XAiProvider_stories_exports = {};
31
+ __export(XAiProvider_stories_exports, {
32
+ MultipleProviders: () => MultipleProviders,
33
+ WithProvider: () => WithProvider,
34
+ default: () => XAiProvider_stories_default
35
+ });
36
+ module.exports = __toCommonJS(XAiProvider_stories_exports);
37
+ var import_react = __toESM(require("react"));
38
+ var import_index = __toESM(require("./index"));
39
+ var import_XAiChatbot = __toESM(require("../XAiChatbot"));
40
+ var meta = {
41
+ title: "AI组件/XAiProvider AI容器",
42
+ component: import_index.default,
43
+ parameters: {
44
+ layout: "centered",
45
+ docs: {
46
+ description: {
47
+ component: "AI 聊天机器人容器组件,提供全局上下文和消息管理功能。"
48
+ }
49
+ }
50
+ },
51
+ tags: ["autodocs"],
52
+ argTypes: {
53
+ url: {
54
+ control: "text",
55
+ description: "AI 服务地址"
56
+ },
57
+ token: {
58
+ control: "text",
59
+ description: "认证 token"
60
+ },
61
+ providerId: {
62
+ control: "text",
63
+ description: "Provider 唯一标识"
64
+ }
65
+ },
66
+ // 添加装饰器,确保组件有必要的上下文
67
+ decorators: [
68
+ (Story) => /* @__PURE__ */ import_react.default.createElement("div", { style: { padding: "20px" } }, /* @__PURE__ */ import_react.default.createElement(Story, null))
69
+ ]
70
+ };
71
+ var XAiProvider_stories_default = meta;
72
+ var WithProvider = {
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
+ import_XAiChatbot.default,
75
+ {
76
+ navbarShow: true,
77
+ navbar: {
78
+ title: "Provider 聊天机器人",
79
+ subtitle: "由 Provider 管理消息",
80
+ avatar: "https://via.placeholder.com/40"
81
+ }
82
+ }
83
+ ))),
84
+ args: {
85
+ url: "http://ai-platform.xline-dev.test.xinke.biz",
86
+ token: "eyJhbGciOiJIUzUxMiJ9.eyJqdGkiOiJjYWIxYjM3Ni03MmZjLTRkNWEtOTIzMC01N2U3NmZiMGI4NmQiLCJzdWIiOiJSZXgiLCJpc3MiOiJodHRwOi8vY2hhdC10ZXN0LnpheGxpbmUuY29tIiwiYXVkIjoiTWFpblN0YXRpb24iLCJpYXQiOjE3NTQzMTc1OTAsImV4cCI6MTc1NDkyMjM5MCwidHlwZSI6InJlZnJlc2giLCJjbGllbnRfaWQiOiJBcHAxOTUwMDIwNTk0NDUyNjYwMjI0Iiwic2NvcGUiOiJhbGwiLCJwbGF0Zm9ybV90eXBlIjoiTWFpblN0YXRpb24ifQ.crZFQRycuHHA1iIIFJ5ak9kS1-04Eqro-QWWG8HZj6Dz7DkLWYuQBPCrUlCtavGu0XW5tqHZ5WW4tdST06FvEA",
87
+ config: {
88
+ appNo: "App1952213101022154752",
89
+ pt: "MainStation",
90
+ tc: "ZABX"
91
+ },
92
+ providerId: "demo-provider"
93
+ }
94
+ };
95
+ var MultipleProviders = {
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
+ import_XAiChatbot.default,
98
+ {
99
+ navbarShow: true,
100
+ navbar: {
101
+ title: "Provider 1",
102
+ subtitle: "第一个聊天机器人",
103
+ avatar: "https://via.placeholder.com/40"
104
+ }
105
+ }
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(
107
+ import_XAiChatbot.default,
108
+ {
109
+ navbarShow: true,
110
+ navbar: {
111
+ title: "Provider 2",
112
+ subtitle: "第二个聊天机器人",
113
+ avatar: "https://via.placeholder.com/40"
114
+ }
115
+ }
116
+ )))),
117
+ args: {
118
+ url: "https://api.example.com/ai",
119
+ token: "your-token-here"
120
+ }
121
+ };
122
+ // Annotate the CommonJS export names for ESM import in node:
123
+ 0 && (module.exports = {
124
+ MultipleProviders,
125
+ WithProvider
126
+ });
127
+ //# sourceMappingURL=XAiProvider.stories.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/components/XAiProvider/XAiProvider.stories.tsx"],
4
+ "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"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAkB;AAClB,mBAAwB;AACxB,wBAAuB;AAEvB,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,eAAsB;AAAA,EACjC,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;AAGO,IAAM,oBAA2B;AAAA,EACtC,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
+ "names": ["XAiProvider", "React", "XAiChatbot"]
7
+ }
@@ -0,0 +1,4 @@
1
+ import React from 'react';
2
+ import { XAiProviderProps } from "../../types/XAiProvider";
3
+ declare const XAiProvider: React.FC<XAiProviderProps>;
4
+ export default XAiProvider;