@ai-group/chat-sdk 2.1.0 → 2.1.3

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 (76) hide show
  1. package/dist/cjs/components/XAdkChatbot/index.js +61 -98
  2. package/dist/cjs/components/XAdkChatbot/index.js.map +3 -3
  3. package/dist/cjs/components/XAdkChatbot/styles.js +0 -1
  4. package/dist/cjs/components/XAdkChatbot/styles.js.map +2 -2
  5. package/dist/cjs/components/XAdkSender/XAdkSender.stories.d.ts +6 -0
  6. package/dist/cjs/components/XAdkSender/XAdkSender.stories.js +93 -0
  7. package/dist/cjs/components/XAdkSender/XAdkSender.stories.js.map +7 -0
  8. package/dist/cjs/components/XAdkSender/index.d.ts +4 -0
  9. package/dist/cjs/components/XAdkSender/index.js +444 -0
  10. package/dist/cjs/components/XAdkSender/index.js.map +7 -0
  11. package/dist/cjs/components/XAdkSender/styles.d.ts +56 -0
  12. package/dist/cjs/components/XAdkSender/styles.js +340 -0
  13. package/dist/cjs/components/XAdkSender/styles.js.map +7 -0
  14. package/dist/cjs/components/XAdkWebProvider/XAdkWebProvider.stories.js +2 -2
  15. package/dist/cjs/components/XAdkWebProvider/XAdkWebProvider.stories.js.map +2 -2
  16. package/dist/cjs/components/XAdkWebProvider/index.js +8 -5
  17. package/dist/cjs/components/XAdkWebProvider/index.js.map +2 -2
  18. package/dist/cjs/components/XAdkWebProvider/styles.d.ts +1 -0
  19. package/dist/cjs/components/XAdkWebProvider/styles.js +7 -1
  20. package/dist/cjs/components/XAdkWebProvider/styles.js.map +2 -2
  21. package/dist/cjs/components/XAiConversations/index.js +1 -1
  22. package/dist/cjs/components/XAiConversations/index.js.map +2 -2
  23. package/dist/cjs/components/XAiConversations/styles.d.ts +1 -0
  24. package/dist/cjs/components/XAiConversations/styles.js +3 -0
  25. package/dist/cjs/components/XAiConversations/styles.js.map +2 -2
  26. package/dist/cjs/components/XAiSender/index.js +17 -35
  27. package/dist/cjs/components/XAiSender/index.js.map +2 -2
  28. package/dist/cjs/hooks/useADKChat.d.ts +2 -2
  29. package/dist/cjs/hooks/useADKChat.js +10 -6
  30. package/dist/cjs/hooks/useADKChat.js.map +2 -2
  31. package/dist/cjs/types/XAdkChatbot.d.ts +6 -1
  32. package/dist/cjs/types/XAdkChatbot.js.map +1 -1
  33. package/dist/cjs/types/XAdkProvider.d.ts +1 -0
  34. package/dist/cjs/types/XAdkProvider.js.map +1 -1
  35. package/dist/cjs/types/XAdkSender.d.ts +38 -0
  36. package/dist/cjs/types/XAdkSender.js +18 -0
  37. package/dist/cjs/types/XAdkSender.js.map +7 -0
  38. package/dist/esm/components/XAdkChatbot/index.js +74 -125
  39. package/dist/esm/components/XAdkChatbot/index.js.map +1 -1
  40. package/dist/esm/components/XAdkChatbot/styles.js +1 -1
  41. package/dist/esm/components/XAdkChatbot/styles.js.map +1 -1
  42. package/dist/esm/components/XAdkSender/XAdkSender.stories.d.ts +6 -0
  43. package/dist/esm/components/XAdkSender/XAdkSender.stories.js +77 -0
  44. package/dist/esm/components/XAdkSender/XAdkSender.stories.js.map +1 -0
  45. package/dist/esm/components/XAdkSender/index.d.ts +4 -0
  46. package/dist/esm/components/XAdkSender/index.js +611 -0
  47. package/dist/esm/components/XAdkSender/index.js.map +1 -0
  48. package/dist/esm/components/XAdkSender/styles.d.ts +56 -0
  49. package/dist/esm/components/XAdkSender/styles.js +50 -0
  50. package/dist/esm/components/XAdkSender/styles.js.map +1 -0
  51. package/dist/esm/components/XAdkWebProvider/XAdkWebProvider.stories.js +3 -2
  52. package/dist/esm/components/XAdkWebProvider/XAdkWebProvider.stories.js.map +1 -1
  53. package/dist/esm/components/XAdkWebProvider/index.js +41 -31
  54. package/dist/esm/components/XAdkWebProvider/index.js.map +1 -1
  55. package/dist/esm/components/XAdkWebProvider/styles.d.ts +1 -0
  56. package/dist/esm/components/XAdkWebProvider/styles.js +4 -2
  57. package/dist/esm/components/XAdkWebProvider/styles.js.map +1 -1
  58. package/dist/esm/components/XAiConversations/index.js +1 -0
  59. package/dist/esm/components/XAiConversations/index.js.map +1 -1
  60. package/dist/esm/components/XAiConversations/styles.d.ts +1 -0
  61. package/dist/esm/components/XAiConversations/styles.js +15 -14
  62. package/dist/esm/components/XAiConversations/styles.js.map +1 -1
  63. package/dist/esm/components/XAiSender/index.js +16 -22
  64. package/dist/esm/components/XAiSender/index.js.map +1 -1
  65. package/dist/esm/hooks/useADKChat.d.ts +2 -2
  66. package/dist/esm/hooks/useADKChat.js +38 -30
  67. package/dist/esm/hooks/useADKChat.js.map +1 -1
  68. package/dist/esm/types/XAdkChatbot.d.ts +6 -1
  69. package/dist/esm/types/XAdkChatbot.js.map +1 -1
  70. package/dist/esm/types/XAdkProvider.d.ts +1 -0
  71. package/dist/esm/types/XAdkProvider.js.map +1 -1
  72. package/dist/esm/types/XAdkSender.d.ts +38 -0
  73. package/dist/esm/types/XAdkSender.js +2 -0
  74. package/dist/esm/types/XAdkSender.js.map +1 -0
  75. package/dist/umd/chat-sdk.min.js +1 -1
  76. package/package.json +1 -1
@@ -0,0 +1,611 @@
1
+ import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
2
+ import _typeof from "@babel/runtime/helpers/esm/typeof";
3
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
4
+ import _createForOfIteratorHelper from "@babel/runtime/helpers/esm/createForOfIteratorHelper";
5
+ import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
6
+ import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
7
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
8
+ import React, { useState, useRef, useCallback } from 'react';
9
+ import { Popconfirm, message, Progress, Tooltip, Input, Modal } from 'antd';
10
+ import { ClearOutlined, LoadingOutlined, ArrowUpOutlined, PaperClipOutlined, CloseOutlined } from '@ant-design/icons';
11
+ import { useStyles } from "./styles";
12
+
13
+ // 文件类型图标映射
14
+ import { jsx as _jsx } from "react/jsx-runtime";
15
+ import { jsxs as _jsxs } from "react/jsx-runtime";
16
+ var FILE_ICONS = {
17
+ // ... 保持不变
18
+ };
19
+ var XAdkSender = function XAdkSender(_ref) {
20
+ var _ref$clearBtnShow = _ref.clearBtnShow,
21
+ clearBtnShow = _ref$clearBtnShow === void 0 ? true : _ref$clearBtnShow,
22
+ _ref$allowUpload = _ref.allowUpload,
23
+ allowUpload = _ref$allowUpload === void 0 ? false : _ref$allowUpload,
24
+ _ref$loading = _ref.loading,
25
+ loading = _ref$loading === void 0 ? false : _ref$loading,
26
+ _ref$uploadProps = _ref.uploadProps,
27
+ uploadProps = _ref$uploadProps === void 0 ? {} : _ref$uploadProps,
28
+ onClear = _ref.onClear,
29
+ onChange = _ref.onChange,
30
+ onSubmit = _ref.onSubmit,
31
+ onStop = _ref.onStop,
32
+ onFilesChange = _ref.onFilesChange,
33
+ _ref$maxFileSize = _ref.maxFileSize,
34
+ maxFileSize = _ref$maxFileSize === void 0 ? 10 : _ref$maxFileSize,
35
+ _ref$allowedFileTypes = _ref.allowedFileTypes,
36
+ allowedFileTypes = _ref$allowedFileTypes === void 0 ? ['image/*', 'application/pdf', 'text/plain'] : _ref$allowedFileTypes,
37
+ _ref$maxFiles = _ref.maxFiles,
38
+ maxFiles = _ref$maxFiles === void 0 ? 5 : _ref$maxFiles;
39
+ var styles = useStyles();
40
+ var _useState = useState(''),
41
+ _useState2 = _slicedToArray(_useState, 2),
42
+ value = _useState2[0],
43
+ setValue = _useState2[1];
44
+ var _useState3 = useState([]),
45
+ _useState4 = _slicedToArray(_useState3, 2),
46
+ files = _useState4[0],
47
+ setFiles = _useState4[1];
48
+ var _useState5 = useState(false),
49
+ _useState6 = _slicedToArray(_useState5, 2),
50
+ isDragOver = _useState6[0],
51
+ setIsDragOver = _useState6[1];
52
+ var containerRef = useRef(null);
53
+ var fileInputRef = useRef(null);
54
+ var uploadRef = useRef(null);
55
+
56
+ // 生成唯一ID
57
+ var generateId = function generateId() {
58
+ return Date.now().toString(36) + Math.random().toString(36).substr(2);
59
+ };
60
+
61
+ // 获取文件图标
62
+ var getFileIcon = function getFileIcon(fileType) {
63
+ return FILE_ICONS[fileType] || FILE_ICONS.default;
64
+ };
65
+
66
+ // 格式化文件大小
67
+ var formatFileSize = function formatFileSize(bytes) {
68
+ if (bytes < 1024) return bytes + ' Bytes';
69
+ if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + ' KB';
70
+ return (bytes / (1024 * 1024)).toFixed(1) + ' MB';
71
+ };
72
+
73
+ // 检查文件类型
74
+ var checkFileType = function checkFileType(file) {
75
+ if (!allowedFileTypes.length) return true;
76
+ return allowedFileTypes.some(function (type) {
77
+ if (type.includes('/*')) {
78
+ var mainType = type.split('/')[0];
79
+ return file.type.startsWith(mainType);
80
+ }
81
+ return file.type === type;
82
+ });
83
+ };
84
+
85
+ // 检查文件大小
86
+ var checkFileSize = function checkFileSize(file) {
87
+ var maxSize = maxFileSize * 1024 * 1024;
88
+ return file.size <= maxSize;
89
+ };
90
+
91
+ // 验证文件
92
+ var validateFile = function validateFile(file) {
93
+ if (files.length >= maxFiles) {
94
+ return {
95
+ valid: false,
96
+ message: "\u6700\u591A\u53EA\u80FD\u4E0A\u4F20 ".concat(maxFiles, " \u4E2A\u6587\u4EF6")
97
+ };
98
+ }
99
+ if (!checkFileSize(file)) {
100
+ return {
101
+ valid: false,
102
+ message: "\u6587\u4EF6\u5927\u5C0F\u4E0D\u80FD\u8D85\u8FC7 ".concat(maxFileSize, "MB")
103
+ };
104
+ }
105
+ if (!checkFileType(file)) {
106
+ return {
107
+ valid: false,
108
+ message: '不支持的文件类型'
109
+ };
110
+ }
111
+ return {
112
+ valid: true
113
+ };
114
+ };
115
+
116
+ // 获取文件扩展名
117
+ var getFileExtension = function getFileExtension(filename) {
118
+ var ext = filename.split('.').pop();
119
+ return ext ? ext.toLowerCase() : '';
120
+ };
121
+
122
+ // 处理文件选择
123
+ var handleFileSelect = useCallback(function (selectedFiles) {
124
+ var fileArray = Array.from(selectedFiles);
125
+ var validFiles = [];
126
+ fileArray.forEach(function (file) {
127
+ var validation = validateFile(file);
128
+ if (validation.valid) {
129
+ validFiles.push({
130
+ id: generateId(),
131
+ uid: generateId(),
132
+ name: file.name,
133
+ size: file.size,
134
+ type: file.type,
135
+ file: file,
136
+ progress: 0,
137
+ status: 'pending',
138
+ response: null
139
+ });
140
+ } else {
141
+ message.error(validation.message);
142
+ }
143
+ });
144
+ if (validFiles.length > 0) {
145
+ setFiles(function (prev) {
146
+ return [].concat(_toConsumableArray(prev), validFiles);
147
+ });
148
+ uploadFiles(validFiles);
149
+ }
150
+ }, [files.length, maxFiles, maxFileSize, allowedFileTypes]);
151
+
152
+ // 上传文件
153
+ var uploadFiles = /*#__PURE__*/function () {
154
+ var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(fileList) {
155
+ var _iterator, _step, _loop;
156
+ return _regeneratorRuntime().wrap(function _callee$(_context2) {
157
+ while (1) switch (_context2.prev = _context2.next) {
158
+ case 0:
159
+ _iterator = _createForOfIteratorHelper(fileList);
160
+ _context2.prev = 1;
161
+ _loop = /*#__PURE__*/_regeneratorRuntime().mark(function _loop() {
162
+ var localFile, rcFile, options;
163
+ return _regeneratorRuntime().wrap(function _loop$(_context) {
164
+ while (1) switch (_context.prev = _context.next) {
165
+ case 0:
166
+ localFile = _step.value;
167
+ // 开始上传
168
+ setFiles(function (prev) {
169
+ return prev.map(function (f) {
170
+ return f.id === localFile.id ? _objectSpread(_objectSpread({}, f), {}, {
171
+ status: 'uploading'
172
+ }) : f;
173
+ });
174
+ });
175
+ try {
176
+ // 如果外部提供了 customRequest,使用它
177
+ if (uploadProps.customRequest) {
178
+ // 构建 UploadRequestOption
179
+ rcFile = Object.assign(localFile.file, {
180
+ uid: localFile.uid
181
+ });
182
+ options = {
183
+ action: uploadProps.action,
184
+ file: rcFile,
185
+ filename: 'file',
186
+ data: uploadProps.data,
187
+ headers: uploadProps.headers,
188
+ withCredentials: uploadProps.withCredentials,
189
+ method: 'POST',
190
+ onProgress: function onProgress(event) {
191
+ setFiles(function (prev) {
192
+ return prev.map(function (f) {
193
+ return f.id === localFile.id ? _objectSpread(_objectSpread({}, f), {}, {
194
+ progress: event.percent || 0
195
+ }) : f;
196
+ });
197
+ });
198
+ },
199
+ onSuccess: function onSuccess(response, file) {
200
+ setFiles(function (prev) {
201
+ return prev.map(function (f) {
202
+ return f.id === localFile.id ? _objectSpread(_objectSpread({}, f), {}, {
203
+ status: 'success',
204
+ progress: 100,
205
+ response: response
206
+ }) : f;
207
+ });
208
+ });
209
+ },
210
+ onError: function onError(error) {
211
+ // 提取错误信息
212
+ var errorMessage = '上传失败';
213
+ if (error instanceof Error) {
214
+ errorMessage = error.message;
215
+ } else if (error && _typeof(error) === 'object' && 'status' in error) {
216
+ errorMessage = "HTTP ".concat(error.status);
217
+ }
218
+ setFiles(function (prev) {
219
+ return prev.map(function (f) {
220
+ return f.id === localFile.id ? _objectSpread(_objectSpread({}, f), {}, {
221
+ status: 'error'
222
+ }) : f;
223
+ });
224
+ });
225
+ message.error("".concat(localFile.name, " \u4E0A\u4F20\u5931\u8D25: ").concat(errorMessage));
226
+ }
227
+ }; // 调用外部传入的 customRequest
228
+ uploadProps.customRequest(options, {
229
+ defaultRequest: function defaultRequest() {
230
+ // 默认的上传逻辑
231
+ simulateUpload([localFile]);
232
+ }
233
+ });
234
+ } else {
235
+ // 使用默认的上传逻辑
236
+ simulateUpload([localFile]);
237
+ }
238
+ } catch (error) {
239
+ setFiles(function (prev) {
240
+ return prev.map(function (f) {
241
+ return f.id === localFile.id ? _objectSpread(_objectSpread({}, f), {}, {
242
+ status: 'error'
243
+ }) : f;
244
+ });
245
+ });
246
+ message.error("".concat(localFile.name, " \u4E0A\u4F20\u5931\u8D25"));
247
+ }
248
+ case 3:
249
+ case "end":
250
+ return _context.stop();
251
+ }
252
+ }, _loop);
253
+ });
254
+ _iterator.s();
255
+ case 4:
256
+ if ((_step = _iterator.n()).done) {
257
+ _context2.next = 8;
258
+ break;
259
+ }
260
+ return _context2.delegateYield(_loop(), "t0", 6);
261
+ case 6:
262
+ _context2.next = 4;
263
+ break;
264
+ case 8:
265
+ _context2.next = 13;
266
+ break;
267
+ case 10:
268
+ _context2.prev = 10;
269
+ _context2.t1 = _context2["catch"](1);
270
+ _iterator.e(_context2.t1);
271
+ case 13:
272
+ _context2.prev = 13;
273
+ _iterator.f();
274
+ return _context2.finish(13);
275
+ case 16:
276
+ case "end":
277
+ return _context2.stop();
278
+ }
279
+ }, _callee, null, [[1, 10, 13, 16]]);
280
+ }));
281
+ return function uploadFiles(_x) {
282
+ return _ref2.apply(this, arguments);
283
+ };
284
+ }();
285
+
286
+ // 模拟上传过程
287
+ var simulateUpload = /*#__PURE__*/function () {
288
+ var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(uploadFilesList) {
289
+ return _regeneratorRuntime().wrap(function _callee2$(_context3) {
290
+ while (1) switch (_context3.prev = _context3.next) {
291
+ case 0:
292
+ uploadFilesList.forEach(function (localFile) {
293
+ var progress = 0;
294
+ var interval = setInterval(function () {
295
+ progress += 10;
296
+ setFiles(function (prev) {
297
+ return prev.map(function (f) {
298
+ return f.id === localFile.id ? _objectSpread(_objectSpread({}, f), {}, {
299
+ progress: progress
300
+ }) : f;
301
+ });
302
+ });
303
+ if (progress >= 100) {
304
+ clearInterval(interval);
305
+ setTimeout(function () {
306
+ // 模拟服务器响应
307
+ var mockResponse = {
308
+ code: 200,
309
+ data: {
310
+ fileId: Math.floor(Math.random() * 1000) + 1,
311
+ tempUrl: "https://example.com/uploads/".concat(localFile.name),
312
+ fileName: localFile.name,
313
+ fileType: getFileExtension(localFile.name)
314
+ }
315
+ };
316
+ setFiles(function (prev) {
317
+ return prev.map(function (f) {
318
+ return f.id === localFile.id ? _objectSpread(_objectSpread({}, f), {}, {
319
+ status: 'success',
320
+ progress: 100,
321
+ response: mockResponse
322
+ }) : f;
323
+ });
324
+ });
325
+ }, 300);
326
+ }
327
+ }, 100);
328
+ });
329
+ case 1:
330
+ case "end":
331
+ return _context3.stop();
332
+ }
333
+ }, _callee2);
334
+ }));
335
+ return function simulateUpload(_x2) {
336
+ return _ref3.apply(this, arguments);
337
+ };
338
+ }();
339
+
340
+ // 删除文件
341
+ var handleRemoveFile = function handleRemoveFile(id) {
342
+ setFiles(function (prev) {
343
+ return prev.filter(function (file) {
344
+ return file.id !== id;
345
+ });
346
+ });
347
+ };
348
+
349
+ // 触发文件选择
350
+ var triggerFileSelect = function triggerFileSelect() {
351
+ if (fileInputRef.current) {
352
+ fileInputRef.current.click();
353
+ }
354
+ };
355
+
356
+ // 处理拖拽事件
357
+ var handleDragOver = useCallback(function (e) {
358
+ e.preventDefault();
359
+ e.stopPropagation();
360
+ if (allowUpload) {
361
+ setIsDragOver(true);
362
+ }
363
+ }, [allowUpload]);
364
+ var handleDragLeave = useCallback(function (e) {
365
+ e.preventDefault();
366
+ e.stopPropagation();
367
+ if (allowUpload) {
368
+ setIsDragOver(false);
369
+ }
370
+ }, [allowUpload]);
371
+ var handleDrop = useCallback(function (e) {
372
+ e.preventDefault();
373
+ e.stopPropagation();
374
+ setIsDragOver(false);
375
+ if (allowUpload && e.dataTransfer.files && e.dataTransfer.files.length > 0) {
376
+ handleFileSelect(Array.from(e.dataTransfer.files));
377
+ }
378
+ }, [allowUpload, handleFileSelect]);
379
+
380
+ // 处理提交
381
+ var handleSubmit = function handleSubmit() {
382
+ if (!value.trim() && files.length === 0) {
383
+ message.warning('请输入消息或选择文件');
384
+ return;
385
+ }
386
+ var successFiles = files.filter(function (file) {
387
+ return file.status === 'success';
388
+ });
389
+ var uploadingFiles = files.filter(function (file) {
390
+ return file.status === 'uploading';
391
+ });
392
+ if (uploadingFiles.length > 0) {
393
+ Modal.confirm({
394
+ title: '文件上传中',
395
+ content: "\u8FD8\u6709 ".concat(uploadingFiles.length, " \u4E2A\u6587\u4EF6\u6B63\u5728\u4E0A\u4F20\uFF0C\u662F\u5426\u7EE7\u7EED\u53D1\u9001\uFF1F"),
396
+ okText: '发送已完成的',
397
+ cancelText: '等待全部完成',
398
+ onOk: function onOk() {
399
+ var formattedFiles = formatFilesForServer(successFiles);
400
+ if (onSubmit) {
401
+ onSubmit({
402
+ text: value,
403
+ files: formattedFiles
404
+ });
405
+ }
406
+ setValue('');
407
+ setFiles(function (prev) {
408
+ return prev.filter(function (f) {
409
+ return f.status !== 'success';
410
+ });
411
+ });
412
+ },
413
+ onCancel: function onCancel() {
414
+ message.info('请等待文件上传完成后再发送');
415
+ }
416
+ });
417
+ } else {
418
+ var formattedFiles = formatFilesForServer(successFiles);
419
+ if (onSubmit) {
420
+ onSubmit({
421
+ text: value,
422
+ files: formattedFiles
423
+ });
424
+ }
425
+ setValue('');
426
+ setFiles(function (prev) {
427
+ return prev.filter(function (f) {
428
+ return f.status !== 'success';
429
+ });
430
+ });
431
+ }
432
+ };
433
+
434
+ // 格式化文件列表为服务端格式
435
+ var formatFilesForServer = function formatFilesForServer(fileList) {
436
+ return fileList.filter(function (file) {
437
+ var _file$response;
438
+ return file.status === 'success' && ((_file$response = file.response) === null || _file$response === void 0 ? void 0 : _file$response.data);
439
+ }).map(function (file) {
440
+ var responseData = file.response.data;
441
+ return {
442
+ fileName: file.name,
443
+ fileId: responseData.fileId || responseData.id || 0,
444
+ tempUrl: responseData.tempUrl || responseData.url || '',
445
+ type: responseData.fileType || getFileExtension(file.name),
446
+ mimeType: file.type
447
+ };
448
+ });
449
+ };
450
+
451
+ // 处理输入框变化
452
+ var handleInputChange = function handleInputChange(e) {
453
+ var newValue = e.target.value;
454
+ setValue(newValue);
455
+ onChange === null || onChange === void 0 || onChange(newValue);
456
+ };
457
+
458
+ // 处理回车键
459
+ var handleKeyDown = function handleKeyDown(e) {
460
+ if (e.key === 'Enter' && !e.shiftKey) {
461
+ e.preventDefault();
462
+ handleSubmit();
463
+ }
464
+ };
465
+
466
+ // 渲染文件列表
467
+ var renderFileList = function renderFileList() {
468
+ if (files.length === 0) return null;
469
+ return /*#__PURE__*/_jsx("div", {
470
+ className: styles.fileListArea,
471
+ children: /*#__PURE__*/_jsx("div", {
472
+ className: styles.fileList,
473
+ children: files.map(function (file) {
474
+ return /*#__PURE__*/_jsxs("div", {
475
+ className: styles.fileCard,
476
+ children: [/*#__PURE__*/_jsx("div", {
477
+ className: styles.fileIcon,
478
+ children: getFileIcon(file.type)
479
+ }), /*#__PURE__*/_jsxs("div", {
480
+ className: styles.fileInfo,
481
+ children: [/*#__PURE__*/_jsx("div", {
482
+ className: styles.fileName,
483
+ children: /*#__PURE__*/_jsx(Tooltip, {
484
+ title: file.name,
485
+ children: file.name.length > 15 ? "".concat(file.name.substring(0, 15), "...") : file.name
486
+ })
487
+ }), file.status === 'uploading' ? /*#__PURE__*/_jsx("div", {
488
+ className: styles.uploadProgress,
489
+ children: /*#__PURE__*/_jsx(Progress, {
490
+ percent: file.progress,
491
+ size: "small",
492
+ showInfo: false,
493
+ strokeColor: "#1890ff"
494
+ })
495
+ }) : /*#__PURE__*/_jsx("div", {
496
+ className: styles.fileSize,
497
+ children: formatFileSize(file.size)
498
+ })]
499
+ }), /*#__PURE__*/_jsx("button", {
500
+ className: styles.fileRemoveBtn,
501
+ onClick: function onClick() {
502
+ return handleRemoveFile(file.id);
503
+ },
504
+ disabled: file.status === 'uploading',
505
+ "aria-label": "\u5220\u9664\u6587\u4EF6",
506
+ children: /*#__PURE__*/_jsx(CloseOutlined, {
507
+ style: {
508
+ fontSize: 8
509
+ }
510
+ })
511
+ })]
512
+ }, file.id);
513
+ })
514
+ })
515
+ });
516
+ };
517
+ var containerClass = "".concat(styles.container, " ").concat(isDragOver ? 'drag-over' : '');
518
+ var uploading = files.some(function (f) {
519
+ return f.status === 'uploading';
520
+ });
521
+ return /*#__PURE__*/_jsxs("div", {
522
+ ref: containerRef,
523
+ className: containerClass,
524
+ onDragOver: allowUpload ? handleDragOver : undefined,
525
+ onDragLeave: allowUpload ? handleDragLeave : undefined,
526
+ onDrop: allowUpload ? handleDrop : undefined,
527
+ children: [allowUpload && files.length > 0 && renderFileList(), allowUpload && /*#__PURE__*/_jsx("input", {
528
+ ref: fileInputRef,
529
+ type: "file",
530
+ multiple: true,
531
+ accept: allowedFileTypes.join(','),
532
+ style: {
533
+ display: 'none'
534
+ },
535
+ onChange: function onChange(e) {
536
+ if (e.target.files) {
537
+ handleFileSelect(Array.from(e.target.files));
538
+ e.target.value = '';
539
+ }
540
+ }
541
+ }), /*#__PURE__*/_jsxs("div", {
542
+ className: styles.mainArea,
543
+ children: [/*#__PURE__*/_jsxs("div", {
544
+ className: styles.senderWrap,
545
+ children: [clearBtnShow && /*#__PURE__*/_jsx(Popconfirm, {
546
+ title: "\u786E\u5B9A\u8981\u6E05\u7A7A\u804A\u5929\u8BB0\u5F55\u5417\uFF1F",
547
+ onConfirm: onClear,
548
+ placement: "top",
549
+ okText: "\u786E\u5B9A",
550
+ cancelText: "\u53D6\u6D88",
551
+ disabled: uploading || loading,
552
+ children: /*#__PURE__*/_jsx("button", {
553
+ className: "".concat(styles.iconButton, " ").concat(styles.clearButton),
554
+ disabled: uploading || loading,
555
+ "aria-label": "\u6E05\u7A7A\u804A\u5929\u8BB0\u5F55",
556
+ children: /*#__PURE__*/_jsx(ClearOutlined, {})
557
+ })
558
+ }), /*#__PURE__*/_jsxs("div", {
559
+ className: styles.inputAndButtons,
560
+ children: [/*#__PURE__*/_jsx("div", {
561
+ className: styles.textAreaWrapper,
562
+ children: /*#__PURE__*/_jsx(Input.TextArea, {
563
+ className: styles.textArea,
564
+ value: value,
565
+ onChange: handleInputChange,
566
+ onKeyDown: handleKeyDown,
567
+ placeholder: "\u8BF7\u8F93\u5165\u6D88\u606F...",
568
+ disabled: uploading || loading,
569
+ autoSize: {
570
+ minRows: 1,
571
+ maxRows: 4
572
+ },
573
+ style: {
574
+ border: 'none',
575
+ boxShadow: 'none',
576
+ outline: 'none',
577
+ padding: 0
578
+ }
579
+ })
580
+ }), /*#__PURE__*/_jsxs("div", {
581
+ className: styles.buttonGroup,
582
+ children: [allowUpload && /*#__PURE__*/_jsx(Tooltip, {
583
+ title: "\u4E0A\u4F20\u6587\u4EF6",
584
+ children: /*#__PURE__*/_jsx("button", {
585
+ className: "".concat(styles.iconButton, " ").concat(styles.uploadButton),
586
+ onClick: triggerFileSelect,
587
+ disabled: uploading || loading,
588
+ "aria-label": "\u4E0A\u4F20\u6587\u4EF6",
589
+ children: /*#__PURE__*/_jsx(PaperClipOutlined, {})
590
+ })
591
+ }), /*#__PURE__*/_jsx(Tooltip, {
592
+ title: loading ? "停止生成" : "发送消息",
593
+ children: /*#__PURE__*/_jsx("button", {
594
+ className: "".concat(styles.iconButton, " ").concat(styles.sendButton, " ").concat(loading ? 'stop' : ''),
595
+ onClick: loading ? onStop : handleSubmit,
596
+ disabled: uploading,
597
+ "aria-label": loading ? "停止生成" : "发送消息",
598
+ children: loading ? /*#__PURE__*/_jsx(LoadingOutlined, {}) : /*#__PURE__*/_jsx(ArrowUpOutlined, {})
599
+ })
600
+ })]
601
+ })]
602
+ })]
603
+ }), /*#__PURE__*/_jsx("div", {
604
+ className: styles.tip,
605
+ children: "\u5185\u5BB9\u7531AI\u751F\u6210\uFF0C\u65E0\u6CD5\u786E\u4FDD\u771F\u5B9E\u51C6\u786E\uFF0C\u4EC5\u4F9B\u53C2\u8003"
606
+ })]
607
+ })]
608
+ });
609
+ };
610
+ export default XAdkSender;
611
+ //# sourceMappingURL=index.js.map