bhd-components 0.10.12 → 0.10.13

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 (116) hide show
  1. package/README.md +1 -1
  2. package/dist/index.esm.es5.development.css +768 -0
  3. package/dist/index.esm.es5.development.js +3130 -159
  4. package/dist/index.esm.es5.production.css +1 -1
  5. package/dist/index.esm.es5.production.js +1 -1
  6. package/dist/vendor.esm.es5.development.js +2515 -1100
  7. package/dist/vendor.esm.es5.production.js +136 -136
  8. package/es2017/AIMessageList/components/content/index.d.ts +4 -0
  9. package/es2017/AIMessageList/components/content/index.js +29 -0
  10. package/es2017/AIMessageList/components/content/index.module.less +8 -0
  11. package/es2017/AIMessageList/components/copyIcon/index.d.ts +7 -0
  12. package/es2017/AIMessageList/components/copyIcon/index.js +73 -0
  13. package/es2017/AIMessageList/components/copyIcon/index.module.less +23 -0
  14. package/es2017/AIMessageList/components/errorCallback/index.d.ts +3 -0
  15. package/es2017/AIMessageList/components/errorCallback/index.js +6 -0
  16. package/es2017/AIMessageList/components/fileList/fileIcon.d.ts +3 -0
  17. package/es2017/AIMessageList/components/fileList/fileIcon.js +970 -0
  18. package/es2017/AIMessageList/components/fileList/index.d.ts +4 -0
  19. package/es2017/AIMessageList/components/fileList/index.js +315 -0
  20. package/es2017/AIMessageList/components/fileList/index.module.less +95 -0
  21. package/es2017/AIMessageList/components/footer/index.d.ts +10 -0
  22. package/es2017/AIMessageList/components/footer/index.js +398 -0
  23. package/es2017/AIMessageList/components/footer/index.module.less +51 -0
  24. package/es2017/AIMessageList/components/header/index.d.ts +9 -0
  25. package/es2017/AIMessageList/components/header/index.js +94 -0
  26. package/es2017/AIMessageList/components/header/index.module.less +31 -0
  27. package/es2017/AIMessageList/components/referencesIcon/index.d.ts +9 -0
  28. package/es2017/AIMessageList/components/referencesIcon/index.js +63 -0
  29. package/es2017/AIMessageList/components/referencesIcon/index.module.less +14 -0
  30. package/es2017/AIMessageList/components/refreshBtn/index.d.ts +4 -0
  31. package/es2017/AIMessageList/components/refreshBtn/index.js +29 -0
  32. package/es2017/AIMessageList/components/refreshBtn/index.module.less +12 -0
  33. package/es2017/AIMessageList/components/remarkBtn/index.d.ts +4 -0
  34. package/es2017/AIMessageList/components/remarkBtn/index.js +51 -0
  35. package/es2017/AIMessageList/components/remarkBtn/index.module.less +13 -0
  36. package/es2017/AIMessageList/components/renderReferrnce/index.d.ts +10 -0
  37. package/es2017/AIMessageList/components/renderReferrnce/index.js +68 -0
  38. package/es2017/AIMessageList/components/renderReferrnce/index.module.less +64 -0
  39. package/es2017/AIMessageList/components/sendBtn/index.d.ts +4 -0
  40. package/es2017/AIMessageList/components/sendBtn/index.js +51 -0
  41. package/es2017/AIMessageList/components/sendBtn/index.module.less +25 -0
  42. package/es2017/AIMessageList/components/uplodaFileBtn/index.d.ts +4 -0
  43. package/es2017/AIMessageList/components/uplodaFileBtn/index.js +33 -0
  44. package/es2017/AIMessageList/components/uplodaFileBtn/index.module.less +5 -0
  45. package/es2017/AIMessageList/components/virtuosoList/index.d.ts +5 -0
  46. package/es2017/AIMessageList/components/virtuosoList/index.js +696 -0
  47. package/es2017/AIMessageList/components/virtuosoList/index.module.less +467 -0
  48. package/es2017/AIMessageList/index.d.ts +4 -0
  49. package/es2017/AIMessageList/index.js +58 -0
  50. package/es2017/AIMessageList/index.module.less +20 -0
  51. package/es2017/AIMessageList/type.d.ts +307 -0
  52. package/es2017/customerService/index.js +1 -0
  53. package/es2017/images/loading2.js +2 -0
  54. package/es2017/index.d.ts +1 -0
  55. package/es2017/index.js +1 -0
  56. package/es2017/utils/Date.d.ts +2 -1
  57. package/es2017/utils/Date.js +2 -1
  58. package/es2017/utils/dom.d.ts +4 -1
  59. package/es2017/utils/dom.js +44 -1
  60. package/es2017/utils/number.d.ts +1 -0
  61. package/es2017/utils/number.js +9 -0
  62. package/esm/AIMessageList/components/content/index.d.ts +4 -0
  63. package/esm/AIMessageList/components/content/index.js +29 -0
  64. package/esm/AIMessageList/components/content/index.module.less +8 -0
  65. package/esm/AIMessageList/components/copyIcon/index.d.ts +7 -0
  66. package/esm/AIMessageList/components/copyIcon/index.js +76 -0
  67. package/esm/AIMessageList/components/copyIcon/index.module.less +23 -0
  68. package/esm/AIMessageList/components/errorCallback/index.d.ts +3 -0
  69. package/esm/AIMessageList/components/errorCallback/index.js +6 -0
  70. package/esm/AIMessageList/components/fileList/fileIcon.d.ts +3 -0
  71. package/esm/AIMessageList/components/fileList/fileIcon.js +970 -0
  72. package/esm/AIMessageList/components/fileList/index.d.ts +4 -0
  73. package/esm/AIMessageList/components/fileList/index.js +337 -0
  74. package/esm/AIMessageList/components/fileList/index.module.less +95 -0
  75. package/esm/AIMessageList/components/footer/index.d.ts +10 -0
  76. package/esm/AIMessageList/components/footer/index.js +414 -0
  77. package/esm/AIMessageList/components/footer/index.module.less +51 -0
  78. package/esm/AIMessageList/components/header/index.d.ts +9 -0
  79. package/esm/AIMessageList/components/header/index.js +96 -0
  80. package/esm/AIMessageList/components/header/index.module.less +31 -0
  81. package/esm/AIMessageList/components/referencesIcon/index.d.ts +9 -0
  82. package/esm/AIMessageList/components/referencesIcon/index.js +65 -0
  83. package/esm/AIMessageList/components/referencesIcon/index.module.less +14 -0
  84. package/esm/AIMessageList/components/refreshBtn/index.d.ts +4 -0
  85. package/esm/AIMessageList/components/refreshBtn/index.js +31 -0
  86. package/esm/AIMessageList/components/refreshBtn/index.module.less +12 -0
  87. package/esm/AIMessageList/components/remarkBtn/index.d.ts +4 -0
  88. package/esm/AIMessageList/components/remarkBtn/index.js +51 -0
  89. package/esm/AIMessageList/components/remarkBtn/index.module.less +13 -0
  90. package/esm/AIMessageList/components/renderReferrnce/index.d.ts +10 -0
  91. package/esm/AIMessageList/components/renderReferrnce/index.js +72 -0
  92. package/esm/AIMessageList/components/renderReferrnce/index.module.less +64 -0
  93. package/esm/AIMessageList/components/sendBtn/index.d.ts +4 -0
  94. package/esm/AIMessageList/components/sendBtn/index.js +53 -0
  95. package/esm/AIMessageList/components/sendBtn/index.module.less +25 -0
  96. package/esm/AIMessageList/components/uplodaFileBtn/index.d.ts +4 -0
  97. package/esm/AIMessageList/components/uplodaFileBtn/index.js +33 -0
  98. package/esm/AIMessageList/components/uplodaFileBtn/index.module.less +5 -0
  99. package/esm/AIMessageList/components/virtuosoList/index.d.ts +5 -0
  100. package/esm/AIMessageList/components/virtuosoList/index.js +673 -0
  101. package/esm/AIMessageList/components/virtuosoList/index.module.less +467 -0
  102. package/esm/AIMessageList/index.d.ts +4 -0
  103. package/esm/AIMessageList/index.js +58 -0
  104. package/esm/AIMessageList/index.module.less +20 -0
  105. package/esm/AIMessageList/type.d.ts +307 -0
  106. package/esm/customerService/index.js +1 -0
  107. package/esm/images/loading2.js +2 -0
  108. package/esm/index.d.ts +1 -0
  109. package/esm/index.js +1 -0
  110. package/esm/utils/Date.d.ts +2 -1
  111. package/esm/utils/Date.js +2 -1
  112. package/esm/utils/dom.d.ts +4 -1
  113. package/esm/utils/dom.js +45 -1
  114. package/esm/utils/number.d.ts +1 -0
  115. package/esm/utils/number.js +9 -0
  116. package/package.json +2 -1
@@ -0,0 +1,398 @@
1
+ import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "@ice/jsx-runtime/jsx-runtime";
3
+ import React, { useState, useEffect, useImperativeHandle, forwardRef, useRef, useMemo } from "react";
4
+ import styles from "./index.module.less";
5
+ import { fetchEventSource } from "@microsoft/fetch-event-source";
6
+ import BhdEnterInput from "../../../bhdEnterInput";
7
+ import { Divider } from "antd";
8
+ import SendBtn from "../sendBtn";
9
+ import UploadFileBtn from "../uplodaFileBtn";
10
+ import FileList from "../fileList";
11
+ import References from "../renderReferrnce";
12
+ import { guidGenerator } from "../../../utils/number";
13
+ const { TextArea } = BhdEnterInput;
14
+ const defaultProps = {
15
+ placeholder: "请输入内容\n按Enter发送,Shift+Enter换行",
16
+ className: "",
17
+ maxLength: 500,
18
+ fileUpload: false
19
+ };
20
+ const defaultFileUploadProps = {
21
+ accept: ".pdf,.ppt,.pptx,.doc,.docx,.xls,.xlsx,.txt,.text,.png,.jpg,.jpeg,.gif,.webp",
22
+ maxCount: 10,
23
+ maxSize: 50 * 1024 * 1024,
24
+ mapUploadCount: 1,
25
+ multiple: true
26
+ };
27
+ const Footer = /*#__PURE__*/ forwardRef((props, ref)=>{
28
+ let { footerConfig, prefix, errorCallback, apiRef } = props;
29
+ let { placeholder = defaultProps.placeholder, className = defaultProps.className, maxLength = defaultProps.maxLength, renderAction, fileUpload, sendMsgAjaxParams, onClickStop = ()=>{}, conversionContent = (str)=>str } = footerConfig;
30
+ if (fileUpload) {
31
+ fileUpload = _object_spread({}, defaultFileUploadProps, fileUpload);
32
+ }
33
+ const footerDomRef = useRef(null);
34
+ const resizeObserverRef = useRef(null);
35
+ const fileListRef = useRef(null);
36
+ const ctrl = useRef(); //停止生成ai回答时使用
37
+ const [textValue, setTextValue] = useState("");
38
+ const [sending, setSending] = useState(false);
39
+ const [fileCanSending, setFileCanSending] = useState(true); // 是否允许发送 关联文件
40
+ const updateMsgRef = useRef(null);
41
+ // const [referencesSource, setReferencesSource] = useState<referenceType>({
42
+ // type: "file",
43
+ // value: {
44
+ // name: "文件名字.doc",
45
+ // suffix: "doc",
46
+ // fileId: "",
47
+ // url: "",
48
+ // status: undefined,
49
+ // source: undefined,
50
+ // },
51
+ // });
52
+ const [referencesSource, setReferencesSource] = useState(null);
53
+ const recordRef = useRef({
54
+ value: textValue,
55
+ referencesSource: referencesSource,
56
+ sending: sending
57
+ });
58
+ useImperativeHandle(ref, ()=>{
59
+ return _object_spread({
60
+ setTextValue,
61
+ sendMsg,
62
+ refreshSendMsg,
63
+ clearText: ()=>{
64
+ setTextValue("");
65
+ },
66
+ getCanSendMsg: ()=>{
67
+ return canSendMsg;
68
+ },
69
+ stopMessage: ()=>{
70
+ stopMessage();
71
+ },
72
+ setReferences: (reference)=>{
73
+ setReferencesSource(reference);
74
+ }
75
+ }, fileListRef.current);
76
+ });
77
+ useEffect(()=>{
78
+ listenerFooterHeight();
79
+ return ()=>{
80
+ resizeObserverRef.current && resizeObserverRef.current.disconnect();
81
+ clearTimeout(updateMsgRef.current);
82
+ };
83
+ }, []);
84
+ useEffect(()=>{
85
+ recordRef.current.value = textValue;
86
+ recordRef.current.referencesSource = referencesSource;
87
+ recordRef.current.sending = sending;
88
+ }, [
89
+ textValue,
90
+ referencesSource,
91
+ sending
92
+ ]);
93
+ // 监听footer变化
94
+ const listenerFooterHeight = ()=>{
95
+ if (!footerDomRef.current) return;
96
+ // 创建ResizeObserver实例
97
+ resizeObserverRef.current = new ResizeObserver((entries)=>{
98
+ apiRef.contentApi && apiRef.contentApi.scrollToBottom();
99
+ });
100
+ // 开始观察footer元素
101
+ resizeObserverRef.current.observe(footerDomRef.current);
102
+ };
103
+ // 是否允许发送消息
104
+ const canSendMsg = useMemo(()=>{
105
+ if (textValue.trim().length === 0) return false;
106
+ if (typeof maxLength === "function") {
107
+ if (maxLength(textValue)) return false;
108
+ }
109
+ if (textValue.trim().length > maxLength) return false;
110
+ if (sending) return false;
111
+ if (!fileCanSending) return false;
112
+ return true;
113
+ }, [
114
+ textValue,
115
+ maxLength,
116
+ sending,
117
+ fileCanSending
118
+ ]);
119
+ const stopMessage = ()=>{
120
+ ctrl.current && ctrl.current.abort();
121
+ apiRef.contentApi.clearInputing();
122
+ setSending(false);
123
+ };
124
+ const getCls = (clsName)=>{
125
+ return styles[clsName] + " " + prefix + "-" + clsName;
126
+ };
127
+ const renderBtn = ()=>{
128
+ let sendNode = /*#__PURE__*/ _jsx(SendBtn, {
129
+ prefix: prefix,
130
+ canSendMsg: canSendMsg,
131
+ sending: sending,
132
+ stopMessage: ()=>{
133
+ onClickStop();
134
+ stopMessage();
135
+ },
136
+ clickFn: ()=>{
137
+ if (textValue.trim().length === 0) return;
138
+ sendMsg(textValue);
139
+ }
140
+ });
141
+ if (fileUpload) {
142
+ let fileNode = /*#__PURE__*/ _jsx(UploadFileBtn, {
143
+ prefix: prefix,
144
+ fileUpload: fileUpload,
145
+ customRequest: (options)=>{
146
+ var _fileListRef_current;
147
+ console.log("customRequestcustomRequest", options);
148
+ (_fileListRef_current = fileListRef.current) === null || _fileListRef_current === void 0 ? void 0 : _fileListRef_current.addFile(options.file);
149
+ }
150
+ });
151
+ if (renderAction) {
152
+ return renderAction(sendNode, fileNode);
153
+ } else {
154
+ return /*#__PURE__*/ _jsxs("div", {
155
+ className: `${getCls("footerActionBtn")}`,
156
+ children: [
157
+ fileNode,
158
+ /*#__PURE__*/ _jsx(Divider, {
159
+ type: "vertical"
160
+ }),
161
+ sendNode
162
+ ]
163
+ });
164
+ }
165
+ } else {
166
+ let fileNode = null;
167
+ if (renderAction) {
168
+ return renderAction(sendNode, fileNode);
169
+ } else {
170
+ return /*#__PURE__*/ _jsx("div", {
171
+ className: `${getCls("footerActionBtn")}`,
172
+ children: sendNode
173
+ });
174
+ }
175
+ }
176
+ };
177
+ const onPressEnter = (e)=>{
178
+ // 判断是否按下了 Shift 键
179
+ if (e.shiftKey) {
180
+ // 如果按下了 Shift + Enter,则允许换行(默认行为)
181
+ return;
182
+ } else {
183
+ if (textValue.length === 0) {
184
+ // 内容为空时 执行换行操作
185
+ return;
186
+ }
187
+ // 如果只按了 Enter,则阻止默认行为并发送消息
188
+ e.preventDefault();
189
+ // 在这里添加发送消息的逻辑
190
+ sendMsg(textValue);
191
+ }
192
+ };
193
+ // 发现消息
194
+ const sendMsg = (value)=>{
195
+ if (value.trim().length === 0) return;
196
+ if (!canSendMsg) return;
197
+ console.log("发送消息:", value);
198
+ apiRef.contentApi.addMsg({
199
+ id: guidGenerator(),
200
+ createTime: new Date().getTime(),
201
+ content: value,
202
+ location: "right",
203
+ reference: recordRef.current.referencesSource,
204
+ source: null,
205
+ fileList: fileListRef.current.getFileList()
206
+ });
207
+ sendMsgAjax();
208
+ };
209
+ // 重新发送消息
210
+ const refreshSendMsg = function(msgId, value, reference, fileList) {
211
+ sendMsgAjax({
212
+ id: msgId,
213
+ value: value,
214
+ reference: reference || null,
215
+ fileList: fileList || []
216
+ });
217
+ };
218
+ const sendMsgAjax = (recordObj)=>{
219
+ const { url, method = "POST", headers = ()=>({}), params = ()=>"", onOpen = ()=>{}, onMessage = (ev)=>ev, onClose = ()=>{}, onError = ()=>{}, coverProps = {}, beforeSendMsg = ()=>Promise.resolve() } = sendMsgAjaxParams;
220
+ ctrl.current = new AbortController();
221
+ // apiRef
222
+ console.log("apiRef", apiRef);
223
+ let msgId = "inputing";
224
+ let createTime = new Date().getTime();
225
+ if (recordObj) {
226
+ apiRef.contentApi.addMsg({
227
+ id: msgId,
228
+ createTime: createTime,
229
+ content: "正在输入...",
230
+ location: "left",
231
+ reference: recordObj.reference || null,
232
+ source: null,
233
+ fileList: recordObj.fileList || []
234
+ });
235
+ } else {
236
+ apiRef.contentApi.addMsg({
237
+ id: msgId,
238
+ createTime: createTime,
239
+ content: "正在输入...",
240
+ location: "left",
241
+ reference: null,
242
+ source: null,
243
+ fileList: fileListRef.current.getFileList()
244
+ });
245
+ }
246
+ let msgContent = "";
247
+ setSending(true);
248
+ setTextValue("");
249
+ fileListRef.current.clearFileList();
250
+ setReferencesSource(null);
251
+ let recordMsgObj = {};
252
+ let arg = [
253
+ recordRef.current.value,
254
+ recordRef.current.referencesSource,
255
+ fileListRef.current ? fileListRef.current.getFileList() : []
256
+ ];
257
+ if (recordObj) {
258
+ arg = [
259
+ recordObj.value,
260
+ recordObj.reference || null,
261
+ recordObj.fileList || []
262
+ ];
263
+ } else {
264
+ arg = [
265
+ recordRef.current.value,
266
+ recordRef.current.referencesSource,
267
+ fileListRef.current ? fileListRef.current.getFileList() : []
268
+ ];
269
+ }
270
+ beforeSendMsg(...arg).then((beforeInfo)=>{
271
+ const callback = ()=>{
272
+ let isClose = false;
273
+ const closeCallback = ()=>{
274
+ if (isClose) return;
275
+ isClose = true;
276
+ onClose();
277
+ setSending(false);
278
+ if (recordMsgObj.id) {
279
+ apiRef.contentApi.recordMsg(recordMsgObj);
280
+ }
281
+ apiRef.contentApi.setSendingId("");
282
+ console.log("onclose: ", recordMsgObj);
283
+ };
284
+ fetchEventSource(url, _object_spread({
285
+ method,
286
+ headers: _object_spread({
287
+ "Content-Type": "application/json",
288
+ Accept: "text/event-stream,application/json"
289
+ }, headers()),
290
+ body: params(...arg, beforeInfo),
291
+ openWhenHidden: true,
292
+ signal: ctrl.current.signal,
293
+ onopen: (res)=>{
294
+ const retryFetch = ()=>{
295
+ callback();
296
+ };
297
+ onOpen(res, {
298
+ retryFetch,
299
+ stopMessage
300
+ });
301
+ return null;
302
+ },
303
+ onmessage: (ev)=>{
304
+ let data = onMessage(ev, closeCallback);
305
+ if (recordObj) {
306
+ data.id = recordObj.id;
307
+ }
308
+ msgContent += data.content;
309
+ let str = msgContent.replace(/\\n/g, "\n");
310
+ str = conversionContent(str);
311
+ delete data.content;
312
+ recordMsgObj = _object_spread({
313
+ createTime: createTime,
314
+ content: str || "正在输入...",
315
+ location: "left",
316
+ reference: null,
317
+ source: null
318
+ }, data);
319
+ apiRef.contentApi.setSendingId(data.id);
320
+ apiRef.contentApi.updateMsg(msgId, recordMsgObj);
321
+ msgId = data.id;
322
+ // updateMsgRef.current = setTimeout(function () {
323
+ apiRef.contentApi.scrollToBottom();
324
+ // }, 100);
325
+ },
326
+ onclose: ()=>{
327
+ closeCallback();
328
+ },
329
+ onerror: (err)=>{
330
+ onError(err);
331
+ if (recordMsgObj.id) {
332
+ apiRef.contentApi.recordMsg(recordMsgObj);
333
+ }
334
+ console.log("onerror: ", err);
335
+ }
336
+ }, coverProps));
337
+ };
338
+ callback();
339
+ }).catch(()=>{
340
+ stopMessage();
341
+ });
342
+ };
343
+ // 判断是否超出最大字数
344
+ const judegTextLengthWarn = ()=>{
345
+ if (typeof maxLength === "function") {
346
+ return maxLength(textValue);
347
+ } else {
348
+ return textValue.length > maxLength;
349
+ }
350
+ };
351
+ return /*#__PURE__*/ _jsx("div", {
352
+ className: `${getCls("footer")} ${className}`,
353
+ ref: footerDomRef,
354
+ children: /*#__PURE__*/ _jsxs("div", {
355
+ className: `${getCls("footerBody")} ${judegTextLengthWarn() ? getCls("footerBodyWarn") : ""}`,
356
+ children: [
357
+ fileUpload && /*#__PURE__*/ _jsx("div", {
358
+ className: getCls("footerFile"),
359
+ children: /*#__PURE__*/ _jsx(FileList, {
360
+ prefix: prefix,
361
+ fileUpload: fileUpload,
362
+ ref: fileListRef,
363
+ errorCallback: errorCallback,
364
+ changeFileCanSending: setFileCanSending
365
+ })
366
+ }),
367
+ /*#__PURE__*/ _jsxs("div", {
368
+ className: getCls("footerInput"),
369
+ children: [
370
+ /*#__PURE__*/ _jsx(TextArea, {
371
+ value: textValue,
372
+ onChange: (e)=>{
373
+ setTextValue(e.target.value);
374
+ },
375
+ placeholder: placeholder,
376
+ autoSize: {
377
+ minRows: 2,
378
+ maxRows: 6
379
+ },
380
+ onPressEnter: onPressEnter
381
+ }),
382
+ /*#__PURE__*/ _jsx(References, {
383
+ prefix: prefix,
384
+ referencesSource: referencesSource,
385
+ fileUpload: fileUpload,
386
+ deleteReferences: ()=>setReferencesSource(null)
387
+ })
388
+ ]
389
+ }),
390
+ /*#__PURE__*/ _jsx("div", {
391
+ className: getCls("footerAction"),
392
+ children: renderBtn()
393
+ })
394
+ ]
395
+ })
396
+ });
397
+ });
398
+ export default Footer;
@@ -0,0 +1,51 @@
1
+ .footer {
2
+ width: 100%;
3
+ padding: 16px;
4
+ box-sizing: border-box;
5
+ .footerBody {
6
+ width: 100%;
7
+ border-radius: 8px;
8
+ background: #ffffff;
9
+ border: 1px solid rgba(0, 0, 0, 0.06);
10
+ padding-bottom: 12px;
11
+ &.footerBodyWarn {
12
+ border-color: #f4523b;
13
+ }
14
+
15
+ .footerFile {
16
+ width: 100%;
17
+ }
18
+ .footerInput {
19
+ :global {
20
+ .bhd-input {
21
+ border: none;
22
+ box-shadow: none;
23
+ background: transparent;
24
+ padding: 12px 16px;
25
+ }
26
+ }
27
+ }
28
+ .footerAction {
29
+ width: 100%;
30
+ padding: 0 16px;
31
+ box-sizing: border-box;
32
+ .footerActionBtn {
33
+ width: 100%;
34
+ display: flex;
35
+ align-items: center;
36
+ justify-content: flex-end;
37
+ :global {
38
+ .bhd-divider {
39
+ border-color: rgba(0, 0, 0, 0.06);
40
+ height: 16px;
41
+ top: 0;
42
+ margin: 0 16px;
43
+ }
44
+ .bhd-upload-wrapper {
45
+ display: flex;
46
+ }
47
+ }
48
+ }
49
+ }
50
+ }
51
+ }
@@ -0,0 +1,9 @@
1
+ import React from "react";
2
+ import type { headerConfigProps, errorMessageProps } from "../../type";
3
+ interface IProps {
4
+ headerConfig: headerConfigProps;
5
+ prefix: string;
6
+ errorCallback: (error: errorMessageProps) => void;
7
+ }
8
+ declare const Header: (props: IProps) => React.JSX.Element;
9
+ export default Header;
@@ -0,0 +1,94 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "@ice/jsx-runtime/jsx-runtime";
2
+ import React from "react";
3
+ import styles from "./index.module.less";
4
+ const defaultProps = {
5
+ icon: /*#__PURE__*/ _jsx("i", {
6
+ children: /*#__PURE__*/ _jsxs("svg", {
7
+ xmlns: "http://www.w3.org/2000/svg",
8
+ width: "1em",
9
+ height: "1em",
10
+ viewBox: "0 0 16 16",
11
+ fill: "none",
12
+ children: [
13
+ /*#__PURE__*/ _jsx("path", {
14
+ d: "M12.6063 14C12.2547 13.9994 11.9095 13.9066 11.6051 13.7309C11.3006 13.5551 11.0476 13.3025 10.8714 12.9983L7.15187 6.55597L4.21122 11.6493H7.67426C7.98599 11.6493 8.28495 11.7731 8.50538 11.9935C8.7258 12.2139 8.84963 12.5129 8.84963 12.8246C8.84963 13.1364 8.7258 13.4353 8.50538 13.6557C8.28495 13.8762 7.98599 14 7.67426 14H2.17613C1.96974 14.0001 1.76696 13.9459 1.58818 13.8428C1.40939 13.7397 1.26091 13.5913 1.15766 13.4126C1.05441 13.2339 1.00003 13.0312 1 12.8248C0.999967 12.6184 1.05428 12.4157 1.15747 12.2369L6.13322 3.61754C6.23638 3.43887 6.38476 3.29051 6.56343 3.18736C6.7421 3.08421 6.94478 3.0299 7.15109 3.0299C7.3574 3.0299 7.56008 3.08421 7.73875 3.18736C7.91742 3.29051 8.0658 3.43887 8.16896 3.61754L12.2582 10.6998V4.20522C12.2582 3.8935 12.3821 3.59454 12.6025 3.37411C12.8229 3.15368 13.1219 3.02985 13.4336 3.02985C13.7453 3.02985 14.0443 3.15368 14.2647 3.37411C14.4851 3.59454 14.609 3.8935 14.609 4.20522V11.9966C14.609 12.5279 14.398 13.0373 14.0224 13.413C13.6469 13.7887 13.1375 13.9998 12.6063 14Z",
15
+ fill: "url(#paint0_linear_34_244)"
16
+ }),
17
+ /*#__PURE__*/ _jsx("path", {
18
+ d: "M13.4336 2.35075C14.0827 2.35075 14.609 1.82451 14.609 1.17537C14.609 0.526232 14.0827 0 13.4336 0C12.7845 0 12.2582 0.526232 12.2582 1.17537C12.2582 1.82451 12.7845 2.35075 13.4336 2.35075Z",
19
+ fill: "url(#paint1_linear_34_244)"
20
+ }),
21
+ /*#__PURE__*/ _jsxs("defs", {
22
+ children: [
23
+ /*#__PURE__*/ _jsxs("linearGradient", {
24
+ id: "paint0_linear_34_244",
25
+ x1: "14.609",
26
+ y1: "0",
27
+ x2: "-0.275842",
28
+ y2: "13.609",
29
+ gradientUnits: "userSpaceOnUse",
30
+ children: [
31
+ /*#__PURE__*/ _jsx("stop", {
32
+ stopColor: "#F87AFD"
33
+ }),
34
+ /*#__PURE__*/ _jsx("stop", {
35
+ offset: "1",
36
+ stopColor: "#41DAF8"
37
+ })
38
+ ]
39
+ }),
40
+ /*#__PURE__*/ _jsxs("linearGradient", {
41
+ id: "paint1_linear_34_244",
42
+ x1: "14.609",
43
+ y1: "0",
44
+ x2: "-0.275842",
45
+ y2: "13.609",
46
+ gradientUnits: "userSpaceOnUse",
47
+ children: [
48
+ /*#__PURE__*/ _jsx("stop", {
49
+ stopColor: "#F87AFD"
50
+ }),
51
+ /*#__PURE__*/ _jsx("stop", {
52
+ offset: "1",
53
+ stopColor: "#41DAF8"
54
+ })
55
+ ]
56
+ })
57
+ ]
58
+ })
59
+ ]
60
+ })
61
+ }),
62
+ className: "",
63
+ renderRightHead: ()=>null
64
+ };
65
+ const Header = (props)=>{
66
+ const { headerConfig, prefix } = props;
67
+ const { icon = defaultProps.icon, title, className = defaultProps.className, renderRightHead = defaultProps.renderRightHead } = headerConfig;
68
+ const getCls = (clsName)=>{
69
+ return styles[clsName] + " " + prefix + "-" + clsName;
70
+ };
71
+ return /*#__PURE__*/ _jsxs("div", {
72
+ className: `${getCls("header")} ${className}`,
73
+ children: [
74
+ /*#__PURE__*/ _jsxs("div", {
75
+ className: getCls("headerLeft"),
76
+ children: [
77
+ /*#__PURE__*/ _jsx("div", {
78
+ className: getCls("headerIcon"),
79
+ children: icon
80
+ }),
81
+ /*#__PURE__*/ _jsx("div", {
82
+ className: getCls("headerTitle"),
83
+ children: title
84
+ })
85
+ ]
86
+ }),
87
+ /*#__PURE__*/ _jsx("div", {
88
+ className: getCls("headerRight"),
89
+ children: renderRightHead()
90
+ })
91
+ ]
92
+ });
93
+ };
94
+ export default Header;
@@ -0,0 +1,31 @@
1
+ .header {
2
+ width: 100%;
3
+ padding: 8px 16px;
4
+ box-sizing: border-box;
5
+ display: flex;
6
+ align-items: center;
7
+ gap: 8px;
8
+ justify-content: space-between;
9
+ border-bottom: 1px solid #ebebeb;
10
+ .headerLeft {
11
+ display: flex;
12
+ align-items: center;
13
+ gap: 8px;
14
+ .headerIcon {
15
+ &>i{
16
+ line-height: 1;
17
+ font-size: 16px;
18
+ display: flex;
19
+ }
20
+ }
21
+ .headerTitle {
22
+ font-weight: 600;
23
+ color: rgba(0, 0, 0, 0.65);
24
+ font-size: 16px;
25
+ line-height: 1.5;
26
+ }
27
+ }
28
+ .headerRight {
29
+ font-size: 16px;
30
+ }
31
+ }
@@ -0,0 +1,9 @@
1
+ import React from "react";
2
+ import type { dataItemType, AIMessageListRefProps } from "../../type";
3
+ interface ReferencesIconProps {
4
+ prefix: string;
5
+ item: dataItemType;
6
+ apiRef: AIMessageListRefProps;
7
+ }
8
+ declare const ReferencesIcon: (props: ReferencesIconProps) => React.JSX.Element;
9
+ export default ReferencesIcon;
@@ -0,0 +1,63 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "@ice/jsx-runtime/jsx-runtime";
2
+ import React from "react";
3
+ import styles from "./index.module.less";
4
+ const referencesIcon = /*#__PURE__*/ _jsx("i", {
5
+ children: /*#__PURE__*/ _jsxs("svg", {
6
+ width: "1em",
7
+ height: "1em",
8
+ shapeRendering: "geometricPrecision",
9
+ fill: "currentColor",
10
+ viewBox: "0 0 14 14",
11
+ xmlns: "http://www.w3.org/2000/svg",
12
+ children: [
13
+ /*#__PURE__*/ _jsx("path", {
14
+ "fill-rule": "evenodd",
15
+ "clip-rule": "evenodd",
16
+ d: "M6.28443 3.03861C3.77423 4.65069 2.37971 6.52702 2.10085 8.66759C1.66674 12 4.6468 13.6311 6.15677 12.1655C7.66673 10.7 6.7616 8.83982 5.66823 8.33136C4.57487 7.82286 3.90623 7.99996 4.02287 7.32046C4.1395 6.64099 5.69503 4.75706 7.06163 3.87969C7.1523 3.80259 7.1868 3.65299 7.0995 3.53949C7.04207 3.46486 6.92943 3.31847 6.7616 3.10033C6.61483 2.90957 6.47423 2.91671 6.28443 3.03861Z"
17
+ }),
18
+ /*#__PURE__*/ _jsx("path", {
19
+ "fill-rule": "evenodd",
20
+ "clip-rule": "evenodd",
21
+ d: "M12.893 3.03861C10.3828 4.65069 8.98827 6.52702 8.7094 8.66759C8.2753 12 11.2554 13.6311 12.7653 12.1655C14.2753 10.7 13.3702 8.83982 12.2768 8.33136C11.1834 7.82286 10.5148 7.99996 10.6314 7.32046C10.7481 6.64099 12.3036 4.75706 13.6702 3.87969C13.7609 3.80259 13.7954 3.65299 13.708 3.53949C13.6506 3.46486 13.538 3.31847 13.3702 3.10033C13.2234 2.90957 13.0828 2.91671 12.893 3.03861Z"
22
+ })
23
+ ]
24
+ })
25
+ });
26
+ const ReferencesIcon = (props)=>{
27
+ const { prefix, apiRef, item } = props;
28
+ const getCls = (clsName)=>{
29
+ return styles[clsName] + " " + prefix + "-" + clsName;
30
+ };
31
+ const clickFn = ()=>{
32
+ console.log("apiRef", apiRef);
33
+ if (apiRef && apiRef.footerApi) {
34
+ console.log("itemitem", item);
35
+ if (item.type === "file") {
36
+ apiRef.footerApi.setReferences({
37
+ type: "file",
38
+ value: {
39
+ name: item.fileTitle,
40
+ suffix: item.suffix,
41
+ fileId: item.id,
42
+ url: "",
43
+ status: "success",
44
+ source: null
45
+ },
46
+ source: item
47
+ });
48
+ } else {
49
+ apiRef.footerApi.setReferences({
50
+ type: "text",
51
+ value: item.content,
52
+ source: item
53
+ });
54
+ }
55
+ }
56
+ };
57
+ return /*#__PURE__*/ _jsx("div", {
58
+ className: `${getCls("msgItem-action-reference")}`,
59
+ onClick: ()=>clickFn(),
60
+ children: referencesIcon
61
+ });
62
+ };
63
+ export default ReferencesIcon;
@@ -0,0 +1,14 @@
1
+ .msgItem-action-reference {
2
+ cursor: pointer;
3
+ border-radius: 2px;
4
+ display: flex;
5
+ line-height: 1;
6
+ & > i {
7
+ color: rgba(140, 140, 140, 1);
8
+ font-size: 16px;
9
+ display: flex;
10
+ }
11
+ &:hover {
12
+ background-color: rgba(0, 0, 0, 0.04);
13
+ }
14
+ }
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ import type { refreshBtnProps } from "../../type";
3
+ declare const RefreshBtn: (props: refreshBtnProps) => React.JSX.Element;
4
+ export default RefreshBtn;