@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.
- package/dist/cjs/components/XAdkChatbot/index.js +61 -98
- package/dist/cjs/components/XAdkChatbot/index.js.map +3 -3
- package/dist/cjs/components/XAdkChatbot/styles.js +0 -1
- package/dist/cjs/components/XAdkChatbot/styles.js.map +2 -2
- package/dist/cjs/components/XAdkSender/XAdkSender.stories.d.ts +6 -0
- package/dist/cjs/components/XAdkSender/XAdkSender.stories.js +93 -0
- package/dist/cjs/components/XAdkSender/XAdkSender.stories.js.map +7 -0
- package/dist/cjs/components/XAdkSender/index.d.ts +4 -0
- package/dist/cjs/components/XAdkSender/index.js +444 -0
- package/dist/cjs/components/XAdkSender/index.js.map +7 -0
- package/dist/cjs/components/XAdkSender/styles.d.ts +56 -0
- package/dist/cjs/components/XAdkSender/styles.js +340 -0
- package/dist/cjs/components/XAdkSender/styles.js.map +7 -0
- package/dist/cjs/components/XAdkWebProvider/XAdkWebProvider.stories.js +2 -2
- package/dist/cjs/components/XAdkWebProvider/XAdkWebProvider.stories.js.map +2 -2
- package/dist/cjs/components/XAdkWebProvider/index.js +8 -5
- package/dist/cjs/components/XAdkWebProvider/index.js.map +2 -2
- package/dist/cjs/components/XAdkWebProvider/styles.d.ts +1 -0
- package/dist/cjs/components/XAdkWebProvider/styles.js +7 -1
- package/dist/cjs/components/XAdkWebProvider/styles.js.map +2 -2
- package/dist/cjs/components/XAiConversations/index.js +1 -1
- package/dist/cjs/components/XAiConversations/index.js.map +2 -2
- package/dist/cjs/components/XAiConversations/styles.d.ts +1 -0
- package/dist/cjs/components/XAiConversations/styles.js +3 -0
- package/dist/cjs/components/XAiConversations/styles.js.map +2 -2
- package/dist/cjs/components/XAiSender/index.js +17 -35
- package/dist/cjs/components/XAiSender/index.js.map +2 -2
- package/dist/cjs/hooks/useADKChat.d.ts +2 -2
- package/dist/cjs/hooks/useADKChat.js +10 -6
- package/dist/cjs/hooks/useADKChat.js.map +2 -2
- package/dist/cjs/types/XAdkChatbot.d.ts +6 -1
- package/dist/cjs/types/XAdkChatbot.js.map +1 -1
- package/dist/cjs/types/XAdkProvider.d.ts +1 -0
- package/dist/cjs/types/XAdkProvider.js.map +1 -1
- package/dist/cjs/types/XAdkSender.d.ts +38 -0
- package/dist/cjs/types/XAdkSender.js +18 -0
- package/dist/cjs/types/XAdkSender.js.map +7 -0
- package/dist/esm/components/XAdkChatbot/index.js +74 -125
- package/dist/esm/components/XAdkChatbot/index.js.map +1 -1
- package/dist/esm/components/XAdkChatbot/styles.js +1 -1
- package/dist/esm/components/XAdkChatbot/styles.js.map +1 -1
- package/dist/esm/components/XAdkSender/XAdkSender.stories.d.ts +6 -0
- package/dist/esm/components/XAdkSender/XAdkSender.stories.js +77 -0
- package/dist/esm/components/XAdkSender/XAdkSender.stories.js.map +1 -0
- package/dist/esm/components/XAdkSender/index.d.ts +4 -0
- package/dist/esm/components/XAdkSender/index.js +611 -0
- package/dist/esm/components/XAdkSender/index.js.map +1 -0
- package/dist/esm/components/XAdkSender/styles.d.ts +56 -0
- package/dist/esm/components/XAdkSender/styles.js +50 -0
- package/dist/esm/components/XAdkSender/styles.js.map +1 -0
- package/dist/esm/components/XAdkWebProvider/XAdkWebProvider.stories.js +3 -2
- package/dist/esm/components/XAdkWebProvider/XAdkWebProvider.stories.js.map +1 -1
- package/dist/esm/components/XAdkWebProvider/index.js +41 -31
- package/dist/esm/components/XAdkWebProvider/index.js.map +1 -1
- package/dist/esm/components/XAdkWebProvider/styles.d.ts +1 -0
- package/dist/esm/components/XAdkWebProvider/styles.js +4 -2
- package/dist/esm/components/XAdkWebProvider/styles.js.map +1 -1
- package/dist/esm/components/XAiConversations/index.js +1 -0
- package/dist/esm/components/XAiConversations/index.js.map +1 -1
- package/dist/esm/components/XAiConversations/styles.d.ts +1 -0
- package/dist/esm/components/XAiConversations/styles.js +15 -14
- package/dist/esm/components/XAiConversations/styles.js.map +1 -1
- package/dist/esm/components/XAiSender/index.js +16 -22
- package/dist/esm/components/XAiSender/index.js.map +1 -1
- package/dist/esm/hooks/useADKChat.d.ts +2 -2
- package/dist/esm/hooks/useADKChat.js +38 -30
- package/dist/esm/hooks/useADKChat.js.map +1 -1
- package/dist/esm/types/XAdkChatbot.d.ts +6 -1
- package/dist/esm/types/XAdkChatbot.js.map +1 -1
- package/dist/esm/types/XAdkProvider.d.ts +1 -0
- package/dist/esm/types/XAdkProvider.js.map +1 -1
- package/dist/esm/types/XAdkSender.d.ts +38 -0
- package/dist/esm/types/XAdkSender.js +2 -0
- package/dist/esm/types/XAdkSender.js.map +1 -0
- package/dist/umd/chat-sdk.min.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { UploadProps } from 'antd';
|
|
2
|
+
export interface ServerFile {
|
|
3
|
+
fileName: string;
|
|
4
|
+
fileId: number;
|
|
5
|
+
tempUrl: string;
|
|
6
|
+
type: string;
|
|
7
|
+
mimeType: string;
|
|
8
|
+
}
|
|
9
|
+
export interface LocalFile {
|
|
10
|
+
id: string;
|
|
11
|
+
uid: string;
|
|
12
|
+
name: string;
|
|
13
|
+
file: File;
|
|
14
|
+
size: number;
|
|
15
|
+
type: string;
|
|
16
|
+
progress: number;
|
|
17
|
+
status: 'pending' | 'uploading' | 'success' | 'error';
|
|
18
|
+
fileId?: number;
|
|
19
|
+
tempUrl?: string;
|
|
20
|
+
response?: any;
|
|
21
|
+
}
|
|
22
|
+
export interface XAdkSenderProps {
|
|
23
|
+
clearBtnShow?: boolean;
|
|
24
|
+
allowUpload?: boolean;
|
|
25
|
+
loading?: boolean;
|
|
26
|
+
onClear?: () => void;
|
|
27
|
+
onChange?: (value: string) => void;
|
|
28
|
+
onSubmit?: (data: {
|
|
29
|
+
text: string;
|
|
30
|
+
files: ServerFile[];
|
|
31
|
+
}) => void;
|
|
32
|
+
onStop?: () => void;
|
|
33
|
+
uploadProps?: UploadProps;
|
|
34
|
+
maxFileSize?: number;
|
|
35
|
+
allowedFileTypes?: string[];
|
|
36
|
+
maxFiles?: number;
|
|
37
|
+
onFilesChange?: (files: ServerFile[]) => void;
|
|
38
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __copyProps = (to, from, except, desc) => {
|
|
6
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
7
|
+
for (let key of __getOwnPropNames(from))
|
|
8
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
9
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
10
|
+
}
|
|
11
|
+
return to;
|
|
12
|
+
};
|
|
13
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
14
|
+
|
|
15
|
+
// src/types/XAdkSender.ts
|
|
16
|
+
var XAdkSender_exports = {};
|
|
17
|
+
module.exports = __toCommonJS(XAdkSender_exports);
|
|
18
|
+
//# sourceMappingURL=XAdkSender.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/types/XAdkSender.ts"],
|
|
4
|
+
"sourcesContent": ["// types/XAdkSender.ts\nimport { UploadProps } from 'antd';\n\nexport interface ServerFile {\n fileName: string;\n fileId: number;\n tempUrl: string;\n type: string;\n mimeType: string; \n}\n\nexport interface LocalFile {\n id: string;\n uid: string;\n name: string;\n file: File;\n size: number;\n type: string;\n progress: number;\n status: 'pending' | 'uploading' | 'success' | 'error';\n // 服务器返回字段\n fileId?: number;\n tempUrl?: string;\n response?: any;\n}\n\nexport interface XAdkSenderProps {\n clearBtnShow?: boolean;\n allowUpload?: boolean;\n loading?: boolean;\n onClear?: () => void;\n onChange?: (value: string) => void;\n onSubmit?: (data: {\n text: string;\n files: ServerFile[];\n }) => void;\n onStop?: () => void;\n \n // 上传相关配置\n uploadProps?: UploadProps;\n maxFileSize?: number; // 最大文件大小(MB)\n allowedFileTypes?: string[]; // 允许的文件类型\n maxFiles?: number; // 最大文件数量\n \n // 文件状态回调\n onFilesChange?: (files: ServerFile[]) => void;\n}"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;AAAA;AAAA;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -1,21 +1,26 @@
|
|
|
1
|
-
import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
|
|
2
|
-
import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
|
|
3
1
|
import _createForOfIteratorHelper from "@babel/runtime/helpers/esm/createForOfIteratorHelper";
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import {
|
|
7
|
-
import { SwapRightOutlined, ArrowUpOutlined, ClearOutlined, LoadingOutlined } from '@ant-design/icons';
|
|
2
|
+
import React, { useMemo, useCallback, useEffect, useRef } from 'react';
|
|
3
|
+
import { Button } from 'antd';
|
|
4
|
+
import { SwapRightOutlined } from '@ant-design/icons';
|
|
8
5
|
import { useStyles } from "./styles";
|
|
9
6
|
import MarkdownRender from "./components/MarkdownRender";
|
|
10
7
|
import FunctionCallRender from "./components/FunctionCallRender";
|
|
11
8
|
import ThinkRender from "./components/ThinkRender";
|
|
9
|
+
import XAdkSender from "../XAdkSender";
|
|
12
10
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
13
11
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
12
|
+
var scrollThreshold = 10; // 滚动阈值
|
|
13
|
+
|
|
14
14
|
var XAdkChatbot = function XAdkChatbot(_ref) {
|
|
15
|
-
var
|
|
15
|
+
var _ref$allowUpload = _ref.allowUpload,
|
|
16
|
+
allowUpload = _ref$allowUpload === void 0 ? false : _ref$allowUpload,
|
|
17
|
+
_ref$loading = _ref.loading,
|
|
18
|
+
loading = _ref$loading === void 0 ? false : _ref$loading,
|
|
16
19
|
prologue = _ref.prologue,
|
|
17
20
|
suggestions = _ref.suggestions,
|
|
18
21
|
messages = _ref.messages,
|
|
22
|
+
_ref$initialized = _ref.initialized,
|
|
23
|
+
initialized = _ref$initialized === void 0 ? true : _ref$initialized,
|
|
19
24
|
footer = _ref.footer,
|
|
20
25
|
showFnCallDetail = _ref.showFnCallDetail,
|
|
21
26
|
_ref$clearBtnShow = _ref.clearBtnShow,
|
|
@@ -25,65 +30,70 @@ var XAdkChatbot = function XAdkChatbot(_ref) {
|
|
|
25
30
|
onStop = _ref.onStop,
|
|
26
31
|
onClear = _ref.onClear;
|
|
27
32
|
var styles = useStyles();
|
|
28
|
-
var _React$useState = React.useState(''),
|
|
29
|
-
_React$useState2 = _slicedToArray(_React$useState, 2),
|
|
30
|
-
inputValue = _React$useState2[0],
|
|
31
|
-
setInputValue = _React$useState2[1];
|
|
32
|
-
var _useState = useState(false),
|
|
33
|
-
_useState2 = _slicedToArray(_useState, 2),
|
|
34
|
-
showLog = _useState2[0],
|
|
35
|
-
setShowLog = _useState2[1];
|
|
36
|
-
var _useState3 = useState(),
|
|
37
|
-
_useState4 = _slicedToArray(_useState3, 2),
|
|
38
|
-
invocation = _useState4[0],
|
|
39
|
-
setInvocation = _useState4[1];
|
|
40
33
|
var listRef = useRef(null);
|
|
41
|
-
var
|
|
42
|
-
var
|
|
34
|
+
var lastScrollTopRef = useRef(0);
|
|
35
|
+
var userHasScrolledRef = useRef(false);
|
|
36
|
+
var messagesEndRef = useRef(null);
|
|
37
|
+
useEffect(function () {
|
|
38
|
+
var _messagesEndRef$curre;
|
|
39
|
+
if (!loading) return;
|
|
40
|
+
if (userHasScrolledRef.current) return;
|
|
41
|
+
(_messagesEndRef$curre = messagesEndRef.current) === null || _messagesEndRef$curre === void 0 || _messagesEndRef$curre.scrollIntoView({
|
|
42
|
+
behavior: 'smooth'
|
|
43
|
+
});
|
|
44
|
+
}, [loading, messages]);
|
|
43
45
|
|
|
44
|
-
//
|
|
45
|
-
var
|
|
46
|
-
var
|
|
47
|
-
if (!
|
|
48
|
-
|
|
49
|
-
|
|
46
|
+
// 处理滚动事件 - 检测用户是否手动滚动
|
|
47
|
+
var handleScroll = useCallback(function () {
|
|
48
|
+
var el = listRef.current;
|
|
49
|
+
if (!el) return;
|
|
50
|
+
var currentTop = el.scrollTop;
|
|
51
|
+
// 如果向上滚动,说明是手动干预
|
|
52
|
+
if (currentTop < lastScrollTopRef.current) {
|
|
53
|
+
userHasScrolledRef.current = true;
|
|
50
54
|
}
|
|
51
|
-
//
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
listRef.current.scrollTo({
|
|
60
|
-
top: listRef.current.scrollHeight,
|
|
61
|
-
behavior: smooth ? 'smooth' : 'instant'
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
}, 100);
|
|
55
|
+
// 如果向下并且已经到了底部,则恢复自动
|
|
56
|
+
var isAtBottom = Math.abs(el.scrollHeight - currentTop - el.clientHeight) <= scrollThreshold;
|
|
57
|
+
if (isAtBottom) {
|
|
58
|
+
userHasScrolledRef.current = false;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// 更新上次位置
|
|
62
|
+
lastScrollTopRef.current = currentTop;
|
|
65
63
|
}, []);
|
|
66
64
|
|
|
67
|
-
//
|
|
65
|
+
// 监听滚动事件
|
|
68
66
|
useEffect(function () {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
}
|
|
77
|
-
}, [messages, suggestions, scrollToBottom]);
|
|
67
|
+
var listElement = listRef.current;
|
|
68
|
+
if (!listElement) return;
|
|
69
|
+
listElement.addEventListener('scroll', handleScroll);
|
|
70
|
+
return function () {
|
|
71
|
+
listElement.removeEventListener('scroll', handleScroll);
|
|
72
|
+
};
|
|
73
|
+
}, []);
|
|
78
74
|
|
|
79
75
|
// 发送消息
|
|
80
|
-
var handleSubmit =
|
|
76
|
+
var handleSubmit = function handleSubmit(_ref2) {
|
|
77
|
+
var text = _ref2.text,
|
|
78
|
+
files = _ref2.files;
|
|
81
79
|
if (loading) return;
|
|
82
80
|
if (!(text !== null && text !== void 0 && text.trim())) return;
|
|
83
|
-
onSubmit === null || onSubmit === void 0 || onSubmit(
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
81
|
+
onSubmit === null || onSubmit === void 0 || onSubmit({
|
|
82
|
+
text: text,
|
|
83
|
+
files: files
|
|
84
|
+
});
|
|
85
|
+
// 滚动
|
|
86
|
+
queueMicrotask(function () {
|
|
87
|
+
var _messagesEndRef$curre2;
|
|
88
|
+
(_messagesEndRef$curre2 = messagesEndRef.current) === null || _messagesEndRef$curre2 === void 0 || _messagesEndRef$curre2.scrollIntoView({
|
|
89
|
+
behavior: 'instant'
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
// 重置用户滚动状态
|
|
93
|
+
setTimeout(function () {
|
|
94
|
+
userHasScrolledRef.current = false;
|
|
95
|
+
}, 0);
|
|
96
|
+
};
|
|
87
97
|
var lastIndex = messages.length - 1;
|
|
88
98
|
var lastMessageMap = useMemo(function () {
|
|
89
99
|
var map = new Map();
|
|
@@ -202,77 +212,16 @@ var XAdkChatbot = function XAdkChatbot(_ref) {
|
|
|
202
212
|
})
|
|
203
213
|
}, item);
|
|
204
214
|
})
|
|
205
|
-
})]
|
|
206
|
-
}), /*#__PURE__*/_jsxs("div", {
|
|
207
|
-
className: styles.footer,
|
|
208
|
-
children: [/*#__PURE__*/_jsxs("div", {
|
|
209
|
-
className: styles.senderWrap,
|
|
210
|
-
children: [clearBtnShow && /*#__PURE__*/_jsx(Popconfirm, {
|
|
211
|
-
title: "\u786E\u5B9A\u8981\u6E05\u7A7A\u804A\u5929\u8BB0\u5F55\u5417\uFF1F",
|
|
212
|
-
onConfirm: onClear,
|
|
213
|
-
children: /*#__PURE__*/_jsx(Button, {
|
|
214
|
-
shape: "circle",
|
|
215
|
-
icon: /*#__PURE__*/_jsx(ClearOutlined, {})
|
|
216
|
-
})
|
|
217
|
-
}), /*#__PURE__*/_jsxs("div", {
|
|
218
|
-
className: styles.sender,
|
|
219
|
-
children: [/*#__PURE__*/_jsx(Input.TextArea, {
|
|
220
|
-
className: styles.input,
|
|
221
|
-
rows: 1,
|
|
222
|
-
autoSize: {
|
|
223
|
-
minRows: 1,
|
|
224
|
-
maxRows: 4
|
|
225
|
-
},
|
|
226
|
-
value: inputValue,
|
|
227
|
-
onChange: function onChange(e) {
|
|
228
|
-
setInputValue(e.target.value);
|
|
229
|
-
},
|
|
230
|
-
onPressEnter: ( /*#__PURE__*/function () {
|
|
231
|
-
var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(e) {
|
|
232
|
-
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
233
|
-
while (1) switch (_context.prev = _context.next) {
|
|
234
|
-
case 0:
|
|
235
|
-
if (!e.shiftKey) {
|
|
236
|
-
_context.next = 2;
|
|
237
|
-
break;
|
|
238
|
-
}
|
|
239
|
-
return _context.abrupt("return");
|
|
240
|
-
case 2:
|
|
241
|
-
e.preventDefault();
|
|
242
|
-
handleSubmit(inputValue);
|
|
243
|
-
case 4:
|
|
244
|
-
case "end":
|
|
245
|
-
return _context.stop();
|
|
246
|
-
}
|
|
247
|
-
}, _callee);
|
|
248
|
-
}));
|
|
249
|
-
return function (_x) {
|
|
250
|
-
return _ref2.apply(this, arguments);
|
|
251
|
-
};
|
|
252
|
-
}()),
|
|
253
|
-
placeholder: "\u8BF7\u8F93\u5165\u6D88\u606F"
|
|
254
|
-
}), /*#__PURE__*/_jsx("div", {
|
|
255
|
-
children: loading ? /*#__PURE__*/_jsx(Button, {
|
|
256
|
-
type: "primary",
|
|
257
|
-
shape: "circle",
|
|
258
|
-
icon: /*#__PURE__*/_jsx(LoadingOutlined, {}),
|
|
259
|
-
onClick: function onClick() {
|
|
260
|
-
onStop === null || onStop === void 0 || onStop();
|
|
261
|
-
}
|
|
262
|
-
}) : /*#__PURE__*/_jsx(Button, {
|
|
263
|
-
type: "primary",
|
|
264
|
-
shape: "circle",
|
|
265
|
-
icon: /*#__PURE__*/_jsx(ArrowUpOutlined, {}),
|
|
266
|
-
onClick: function onClick() {
|
|
267
|
-
handleSubmit(inputValue);
|
|
268
|
-
}
|
|
269
|
-
})
|
|
270
|
-
})]
|
|
271
|
-
})]
|
|
272
215
|
}), /*#__PURE__*/_jsx("div", {
|
|
273
|
-
|
|
274
|
-
children: "\u5185\u5BB9\u7531AI\u751F\u6210\uFF0C\u65E0\u6CD5\u786E\u4FDD\u771F\u5B9E\u51C6\u786E\uFF0C\u4EC5\u4F9B\u53C2\u8003"
|
|
216
|
+
ref: messagesEndRef
|
|
275
217
|
})]
|
|
218
|
+
}), /*#__PURE__*/_jsx(XAdkSender, {
|
|
219
|
+
allowUpload: allowUpload,
|
|
220
|
+
loading: loading,
|
|
221
|
+
clearBtnShow: clearBtnShow,
|
|
222
|
+
onSubmit: handleSubmit,
|
|
223
|
+
onClear: onClear,
|
|
224
|
+
onStop: onStop
|
|
276
225
|
})]
|
|
277
226
|
});
|
|
278
227
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useMemo","useCallback","useEffect","useRef","useState","Button","Input","Popconfirm","SwapRightOutlined","ArrowUpOutlined","ClearOutlined","LoadingOutlined","useStyles","MarkdownRender","FunctionCallRender","ThinkRender","jsx","_jsx","jsxs","_jsxs","XAdkChatbot","_ref","loading","prologue","suggestions","messages","footer","showFnCallDetail","_ref$clearBtnShow","clearBtnShow","onSubmit","onSuggest","onStop","onClear","styles","_React$useState","_React$useState2","_slicedToArray","inputValue","setInputValue","_useState","_useState2","showLog","setShowLog","_useState3","_useState4","invocation","setInvocation","listRef","scrollTimeoutRef","isFirstLoadRef","scrollToBottom","smooth","arguments","length","undefined","current","clearTimeout","scrollTo","top","scrollHeight","behavior","setTimeout","handleSubmit","text","trim","lastIndex","lastMessageMap","map","Map","_iterator","_createForOfIteratorHelper","_step","s","n","done","msg","value","role","invocationId","set","id","err","e","f","className","wrapper","children","list","ref","i","userMsg","card","concat","functionResponse","showDetail","isLast","isLoading","isLastBotMsg","get","thought","botMsg","message","isLastMsg","fnCall","functionCall","item","suggestion","suggestContent","type","icon","iconPosition","onClick","senderWrap","title","onConfirm","shape","sender","TextArea","input","rows","autoSize","minRows","maxRows","onChange","target","onPressEnter","_ref2","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_callee$","_context","prev","next","shiftKey","abrupt","preventDefault","stop","_x","apply","placeholder","tip"],"sources":["../../../../src/components/XAdkChatbot/index.tsx"],"sourcesContent":["import React, { useMemo, useCallback, useEffect, useRef, useState } from 'react';\nimport { Button, Input, Popconfirm } from 'antd';\nimport { SwapRightOutlined, ArrowUpOutlined, ClearOutlined, LoadingOutlined } from '@ant-design/icons';\nimport { useStyles } from './styles';\nimport MarkdownRender from './components/MarkdownRender';\nimport FunctionCallRender from './components/FunctionCallRender';\nimport ThinkRender from './components/ThinkRender';\nimport type { IInvocation, IMessage, XAdkChatbotProps } from '@/types';\n\nconst XAdkChatbot: React.FC<XAdkChatbotProps> = ({ \n loading,\n prologue,\n suggestions,\n messages,\n footer,\n showFnCallDetail,\n clearBtnShow = true,\n onSubmit,\n onSuggest,\n onStop,\n onClear,\n }) => {\n const styles = useStyles();\n const [inputValue, setInputValue] = React.useState<string>('');\n const [showLog, setShowLog] = useState(false);\n const [invocation, setInvocation] = useState<Partial<IInvocation>>();\n const listRef = useRef<HTMLDivElement>(null);\n const scrollTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n const isFirstLoadRef = useRef(true);\n\n // 滚动到底部函数\n const scrollToBottom = useCallback((smooth = false) => {\n if (!listRef.current) return;\n if (scrollTimeoutRef.current) {\n clearTimeout(scrollTimeoutRef.current);\n }\n // 首次尝试\n listRef.current.scrollTo({\n top: listRef.current.scrollHeight,\n behavior: smooth ? 'smooth' : 'instant',\n });\n // 重试机制:确保滚动生效\n scrollTimeoutRef.current = setTimeout(() => {\n if (listRef.current) {\n listRef.current.scrollTo({\n top: listRef.current.scrollHeight,\n behavior: smooth ? 'smooth' : 'instant',\n });\n }\n }, 100);\n }, []);\n\n // 消息更新时滚动\n useEffect(() => {\n if (isFirstLoadRef.current) {\n // 初始化\n scrollToBottom(false);\n isFirstLoadRef.current = false;\n } else {\n // 消息更新\n scrollToBottom(true);\n }\n }, [messages, suggestions, scrollToBottom]);\n\n // 发送消息\n const handleSubmit = useCallback((text: string) => {\n if (loading) return;\n if (!text?.trim()) return;\n onSubmit?.(text);\n setInputValue('');\n scrollToBottom(true);\n }, [loading, scrollToBottom]);\n\n const lastIndex = messages.length - 1;\n\n const lastMessageMap = useMemo(() => {\n const map = new Map<string, string>();\n for (const msg of messages) {\n if (msg.role === 'bot' && msg.invocationId) {\n map.set(msg.invocationId, msg.id);\n }\n }\n return map;\n }, [messages]);\n\n return (\n <div className={styles.wrapper}>\n <div className={styles.list} ref={listRef}>\n <div className={styles.prologue}>\n {prologue}\n </div>\n {messages.map((msg, i) => {\n if (msg.role === 'user') {\n if (msg.text) {\n return (\n <div key={`${msg.id}-${i}`} className={styles.userMsg}>\n <div className={styles.card}>{msg.text}</div>\n </div>\n );\n }\n if (msg.functionResponse) {\n return (\n <div key={`${msg.id}-${i}`} className={styles.userMsg}>\n <FunctionCallRender msg={msg} showDetail={showFnCallDetail} />\n </div>\n );\n }\n return null;\n }\n const isLast = i === lastIndex;\n const isLoading = isLast && loading;\n const isLastBotMsg = lastMessageMap.get(msg?.invocationId || '') === msg.id;\n \n if (msg.text) {\n if (msg.thought) {\n return (\n <div key={`${msg.id}-${i}`} className={styles.botMsg}>\n <ThinkRender\n msg={msg}\n loading={isLoading}\n />\n {!isLoading && footer?.({ message: msg as IMessage, isLastMsg: isLast, isLastBotMsg })}\n </div>\n );\n }\n return (\n <div key={`${msg.id}-${i}`} className={styles.botMsg}>\n <MarkdownRender text={msg.text} />\n {!isLoading && footer?.({ message: msg as IMessage, isLastMsg: isLast, isLastBotMsg })}\n </div>\n );\n }\n const fnCall = msg.functionCall;\n if (fnCall) {\n return (\n <div key={`${msg.id}-${i}`} className={styles.botMsg}>\n <FunctionCallRender msg={msg} showDetail={showFnCallDetail} />\n {!isLoading && footer?.({ message: msg as IMessage, isLastMsg: isLast, isLastBotMsg })}\n </div>\n );\n }\n return (\n <div key={`${msg.id}-${i}`} className={styles.botMsg}>\n {!isLoading && footer?.({ message: msg as IMessage, isLastMsg: isLast, isLastBotMsg })}\n </div>\n );\n })}\n <div>\n {suggestions?.map((item) => (\n <div key={item} className={styles.suggestion}>\n <div className={styles.suggestContent}>\n <Button\n type=\"text\"\n icon={<SwapRightOutlined />}\n iconPosition='end'\n onClick={() => {\n if (!item) return;\n onSuggest?.(item);\n }}\n >\n {item}\n </Button>\n </div>\n </div>\n ))}\n </div>\n </div>\n <div className={styles.footer}>\n <div className={styles.senderWrap}>\n { clearBtnShow && <Popconfirm\n title=\"确定要清空聊天记录吗?\"\n onConfirm={onClear}\n >\n <Button\n shape=\"circle\"\n icon={<ClearOutlined />}\n />\n </Popconfirm> }\n <div className={styles.sender}>\n <Input.TextArea\n className={styles.input}\n rows={1}\n autoSize={{ minRows: 1, maxRows: 4 }}\n value={inputValue}\n onChange={(e) => {\n setInputValue(e.target.value);\n }}\n onPressEnter={async (e) => {\n if (e.shiftKey) {\n return;\n }\n e.preventDefault();\n handleSubmit(inputValue);\n }}\n placeholder=\"请输入消息\"\n />\n <div>\n {loading\n ? (\n <Button\n type=\"primary\"\n shape=\"circle\"\n icon={<LoadingOutlined />}\n onClick={() => {\n onStop?.();\n }}\n />\n )\n : (\n <Button\n type=\"primary\"\n shape=\"circle\"\n icon={<ArrowUpOutlined />}\n onClick={() => {\n handleSubmit(inputValue);\n }}\n />\n )}\n </div>\n </div>\n </div>\n <div className={styles.tip}>内容由AI生成,无法确保真实准确,仅供参考</div>\n </div>\n {/* 智能体日志详情 */}\n {/* <AgentLogDetail\n show={showLog}\n data={invocation}\n onClose={() => setShowLog(false)}\n /> */}\n </div>\n );\n};\n\nexport default XAdkChatbot;"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["React","useMemo","useCallback","useEffect","useRef","Button","SwapRightOutlined","useStyles","MarkdownRender","FunctionCallRender","ThinkRender","XAdkSender","jsx","_jsx","jsxs","_jsxs","scrollThreshold","XAdkChatbot","_ref","_ref$allowUpload","allowUpload","_ref$loading","loading","prologue","suggestions","messages","_ref$initialized","initialized","footer","showFnCallDetail","_ref$clearBtnShow","clearBtnShow","onSubmit","onSuggest","onStop","onClear","styles","listRef","lastScrollTopRef","userHasScrolledRef","messagesEndRef","_messagesEndRef$curre","current","scrollIntoView","behavior","handleScroll","el","currentTop","scrollTop","isAtBottom","Math","abs","scrollHeight","clientHeight","listElement","addEventListener","removeEventListener","handleSubmit","_ref2","text","files","trim","queueMicrotask","_messagesEndRef$curre2","setTimeout","lastIndex","length","lastMessageMap","map","Map","_iterator","_createForOfIteratorHelper","_step","s","n","done","msg","value","role","invocationId","set","id","err","e","f","className","wrapper","children","list","ref","i","userMsg","card","concat","functionResponse","showDetail","isLast","isLoading","isLastBotMsg","get","thought","botMsg","message","isLastMsg","fnCall","functionCall","item","suggestion","suggestContent","type","icon","iconPosition","onClick"],"sources":["../../../../src/components/XAdkChatbot/index.tsx"],"sourcesContent":["import React, { useMemo, useCallback, useEffect, useRef } from 'react';\nimport { Button } from 'antd';\nimport { SwapRightOutlined } from '@ant-design/icons';\nimport { useStyles } from './styles';\nimport MarkdownRender from './components/MarkdownRender';\nimport FunctionCallRender from './components/FunctionCallRender';\nimport ThinkRender from './components/ThinkRender';\nimport XAdkSender from '../XAdkSender';\nimport type { IMessage, XAdkChatbotProps, SendContent } from '@/types';\n\nconst scrollThreshold = 10; // 滚动阈值\n\n\nconst XAdkChatbot: React.FC<XAdkChatbotProps> = ({ \n allowUpload = false,\n loading = false,\n prologue,\n suggestions,\n messages,\n initialized = true,\n footer,\n showFnCallDetail,\n clearBtnShow = true,\n onSubmit,\n onSuggest,\n onStop,\n onClear,\n }) => {\n const styles = useStyles();\n const listRef = useRef<HTMLDivElement>(null);\n const lastScrollTopRef = useRef(0);\n const userHasScrolledRef = useRef(false);\n const messagesEndRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!loading) return;\n if (userHasScrolledRef.current) return;\n messagesEndRef.current?.scrollIntoView({\n behavior: 'smooth',\n });\n }, [loading, messages]);\n\n // 处理滚动事件 - 检测用户是否手动滚动\n const handleScroll = useCallback(() => {\n const el = listRef.current;\n if (!el) return;\n const currentTop = el.scrollTop;\n // 如果向上滚动,说明是手动干预\n if (currentTop < lastScrollTopRef.current) {\n userHasScrolledRef.current = true;\n }\n // 如果向下并且已经到了底部,则恢复自动\n const isAtBottom = \n Math.abs(el.scrollHeight - currentTop - el.clientHeight) <= scrollThreshold;\n\n if (isAtBottom) {\n userHasScrolledRef.current = false;\n }\n\n // 更新上次位置\n lastScrollTopRef.current = currentTop;\n }, []);\n\n // 监听滚动事件\n useEffect(() => {\n const listElement = listRef.current\n if (!listElement) return;\n\n listElement.addEventListener('scroll', handleScroll);\n return () => {\n listElement.removeEventListener('scroll', handleScroll);\n };\n }, []);\n\n // 发送消息\n const handleSubmit = ({ text, files }: SendContent) => {\n if (loading) return;\n if (!text?.trim()) return;\n onSubmit?.({ text, files });\n // 滚动\n queueMicrotask(() => {\n messagesEndRef.current?.scrollIntoView({ behavior: 'instant' });\n });\n // 重置用户滚动状态\n setTimeout(() => {\n userHasScrolledRef.current = false;\n }, 0);\n };\n\n const lastIndex = messages.length - 1;\n\n const lastMessageMap = useMemo(() => {\n const map = new Map<string, string>();\n for (const msg of messages) {\n if (msg.role === 'bot' && msg.invocationId) {\n map.set(msg.invocationId, msg.id);\n }\n }\n return map;\n }, [messages]);\n\n return (\n <div className={styles.wrapper}>\n <div className={styles.list} ref={listRef}>\n <div className={styles.prologue}>\n {prologue}\n </div>\n {messages.map((msg, i) => {\n if (msg.role === 'user') {\n if (msg.text) {\n return (\n <div key={`${msg.id}-${i}`} className={styles.userMsg}>\n <div className={styles.card}>{msg.text}</div>\n </div>\n );\n }\n if (msg.functionResponse) {\n return (\n <div key={`${msg.id}-${i}`} className={styles.userMsg}>\n <FunctionCallRender msg={msg} showDetail={showFnCallDetail} />\n </div>\n );\n }\n return null;\n }\n const isLast = i === lastIndex;\n const isLoading = isLast && loading;\n const isLastBotMsg = lastMessageMap.get(msg?.invocationId || '') === msg.id;\n \n if (msg.text) {\n if (msg.thought) {\n return (\n <div key={`${msg.id}-${i}`} className={styles.botMsg}>\n <ThinkRender\n msg={msg}\n loading={isLoading}\n />\n {!isLoading && footer?.({ message: msg as IMessage, isLastMsg: isLast, isLastBotMsg })}\n </div>\n );\n }\n return (\n <div key={`${msg.id}-${i}`} className={styles.botMsg}>\n <MarkdownRender text={msg.text} />\n {!isLoading && footer?.({ message: msg as IMessage, isLastMsg: isLast, isLastBotMsg })}\n </div>\n );\n }\n const fnCall = msg.functionCall;\n if (fnCall) {\n return (\n <div key={`${msg.id}-${i}`} className={styles.botMsg}>\n <FunctionCallRender msg={msg} showDetail={showFnCallDetail} />\n {!isLoading && footer?.({ message: msg as IMessage, isLastMsg: isLast, isLastBotMsg })}\n </div>\n );\n }\n return (\n <div key={`${msg.id}-${i}`} className={styles.botMsg}>\n {!isLoading && footer?.({ message: msg as IMessage, isLastMsg: isLast, isLastBotMsg })}\n </div>\n );\n })}\n <div>\n {suggestions?.map((item) => (\n <div key={item} className={styles.suggestion}>\n <div className={styles.suggestContent}>\n <Button\n type=\"text\"\n icon={<SwapRightOutlined />}\n iconPosition='end'\n onClick={() => {\n if (!item) return;\n onSuggest?.(item);\n }}\n >\n {item}\n </Button>\n </div>\n </div>\n ))}\n </div>\n <div ref={messagesEndRef} />\n </div>\n <XAdkSender\n allowUpload={allowUpload}\n loading={loading}\n clearBtnShow={clearBtnShow}\n onSubmit={handleSubmit}\n onClear={onClear}\n onStop={onStop}\n />\n </div>\n );\n};\n\nexport default XAdkChatbot;"],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import { css } from '@emotion/css';
|
|
|
4
4
|
import { withBasicStyles } from "../../styles/common";
|
|
5
5
|
export var useStyles = withBasicStyles(function () {
|
|
6
6
|
return {
|
|
7
|
-
wrapper: css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n padding: 0 16px;\n min-height: 300px;\n width: 100%;\n height: 100%;\n border
|
|
7
|
+
wrapper: css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n padding: 0 16px;\n min-height: 300px;\n width: 100%;\n height: 100%;\n border-radius: 8px;\n display: flex;\n flex-direction: column;\n\n .x-markdown {\n --margin-ul-ol: 0 0 1em 1em;\n\n code {\n background: rgba(150, 150, 150, 0.2);\n border-radius: 3px;\n }\n\n .ant-highlightCode-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n color: var(--ant-highlight-code-color-text-title);\n background: var(--ant-highlight-code-color-bg-title);\n padding: var(--ant-padding-sm);\n border-top-left-radius: var(--ant-border-radius);\n border-top-right-radius: var(--ant-border-radius);\n }\n }\n "]))),
|
|
8
8
|
list: css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n flex: 1;\n margin: 16px 0;\n padding: 0 16px;\n overflow-y: auto;\n /* Chrome, Safari, Edge, Opera */\n &::-webkit-scrollbar {\n display: none;\n }\n /* Firefox */\n scrollbar-width: none;\n /* IE 10+ */\n -ms-overflow-style: none;\n "]))),
|
|
9
9
|
prologue: css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n margin-bottom: 12px;\n "]))),
|
|
10
10
|
suggestion: css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n margin-bottom: 12px;\n "]))),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["css","withBasicStyles","useStyles","wrapper","_templateObject","_taggedTemplateLiteral","list","_templateObject2","prologue","_templateObject3","suggestion","_templateObject4","suggestContent","_templateObject5","userMsg","_templateObject6","card","_templateObject7","botMsg","_templateObject8","fnCall","_templateObject9","confirm","_templateObject10","footer","_templateObject11","sender","_templateObject12","senderWrap","_templateObject13","tip","_templateObject14","input","_templateObject15"],"sources":["../../../../src/components/XAdkChatbot/styles.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport { withBasicStyles } from '@/styles/common';\n\nexport const useStyles = withBasicStyles(() => ({\n wrapper: css`\n padding: 0 16px;\n min-height: 300px;\n width: 100%;\n height: 100%;\n border
|
|
1
|
+
{"version":3,"names":["css","withBasicStyles","useStyles","wrapper","_templateObject","_taggedTemplateLiteral","list","_templateObject2","prologue","_templateObject3","suggestion","_templateObject4","suggestContent","_templateObject5","userMsg","_templateObject6","card","_templateObject7","botMsg","_templateObject8","fnCall","_templateObject9","confirm","_templateObject10","footer","_templateObject11","sender","_templateObject12","senderWrap","_templateObject13","tip","_templateObject14","input","_templateObject15"],"sources":["../../../../src/components/XAdkChatbot/styles.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport { withBasicStyles } from '@/styles/common';\n\nexport const useStyles = withBasicStyles(() => ({\n wrapper: css`\n padding: 0 16px;\n min-height: 300px;\n width: 100%;\n height: 100%;\n border-radius: 8px;\n display: flex;\n flex-direction: column;\n\n .x-markdown {\n --margin-ul-ol: 0 0 1em 1em;\n\n code {\n background: rgba(150, 150, 150, 0.2);\n border-radius: 3px;\n }\n\n .ant-highlightCode-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n color: var(--ant-highlight-code-color-text-title);\n background: var(--ant-highlight-code-color-bg-title);\n padding: var(--ant-padding-sm);\n border-top-left-radius: var(--ant-border-radius);\n border-top-right-radius: var(--ant-border-radius);\n }\n }\n `,\n\n list: css`\n flex: 1;\n margin: 16px 0;\n padding: 0 16px;\n overflow-y: auto;\n /* Chrome, Safari, Edge, Opera */\n &::-webkit-scrollbar {\n display: none;\n }\n /* Firefox */\n scrollbar-width: none;\n /* IE 10+ */\n -ms-overflow-style: none;\n `,\n\n prologue: css`\n margin-bottom: 12px;\n `,\n\n suggestion: css`\n margin-bottom: 12px;\n `,\n\n suggestContent: css`\n display: inline-flex;\n border: 2px solid #E7E7E7;\n border-radius: 8px;\n `,\n\n userMsg: css`\n display: flex;\n justify-content: flex-end;\n margin-bottom: 24px;\n `,\n\n card: css`\n padding: 12px 16px;\n background: #d5e3ff;\n border-radius: 12px;\n max-width: 80%;\n white-space: pre-line;\n word-break: break-all;\n `,\n\n botMsg: css`\n margin-bottom: 12px;\n `,\n\n fnCall: css`\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 11px;\n border-radius: 24px;\n line-height: 16px;\n border: 1px solid #e7e7e7;\n cursor: pointer;\n `,\n\n confirm: css`\n padding: 12px;\n border-radius: 12px;\n border: 1px solid #e7e7e7;\n `,\n\n \n\n footer: css`\n /* senderWrap and tip moved to top-level keys so they are\n accessible as styles.senderWrap and styles.tip in the component */\n `,\n\n sender: css`\n width: 100%;\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 8px 8px 12px;\n border: 1px solid #e7e7e7;\n border-radius: 24px;\n\n /* .input moved to top-level key so component can use styles.input */\n `,\n\n senderWrap: css`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n `,\n\n tip: css`\n padding: 4px;\n font-size: 12px;\n text-align: center;\n color: rgba(0, 0, 0, 0.4);\n `,\n\n input: css`\n padding: 0;\n margin: 5px 0;\n line-height: 22px;\n font-size: 15px;\n border-radius: 0;\n border: none;\n\n &:focus {\n box-shadow: none;\n }\n `,\n}));\n\nexport default useStyles;\n"],"mappings":";;AAAA,SAASA,GAAG,QAAQ,cAAc;AAClC,SAASC,eAAe;AAExB,OAAO,IAAMC,SAAS,GAAGD,eAAe,CAAC;EAAA,OAAO;IAC9CE,OAAO,EAAEH,GAAG,CAAAI,eAAA,KAAAA,eAAA,GAAAC,sBAAA,svBA4BX;IAEDC,IAAI,EAAEN,GAAG,CAAAO,gBAAA,KAAAA,gBAAA,GAAAF,sBAAA,4RAaR;IAEDG,QAAQ,EAAER,GAAG,CAAAS,gBAAA,KAAAA,gBAAA,GAAAJ,sBAAA,sCAEZ;IAEDK,UAAU,EAAEV,GAAG,CAAAW,gBAAA,KAAAA,gBAAA,GAAAN,sBAAA,sCAEd;IAEDO,cAAc,EAAEZ,GAAG,CAAAa,gBAAA,KAAAA,gBAAA,GAAAR,sBAAA,gGAIlB;IAEDS,OAAO,EAAEd,GAAG,CAAAe,gBAAA,KAAAA,gBAAA,GAAAV,sBAAA,0FAIX;IAEDW,IAAI,EAAEhB,GAAG,CAAAiB,gBAAA,KAAAA,gBAAA,GAAAZ,sBAAA,sKAOR;IAEDa,MAAM,EAAElB,GAAG,CAAAmB,gBAAA,KAAAA,gBAAA,GAAAd,sBAAA,sCAEV;IAEDe,MAAM,EAAEpB,GAAG,CAAAqB,gBAAA,KAAAA,gBAAA,GAAAhB,sBAAA,yMASV;IAEDiB,OAAO,EAAEtB,GAAG,CAAAuB,iBAAA,KAAAA,iBAAA,GAAAlB,sBAAA,0FAIX;IAIDmB,MAAM,EAAExB,GAAG,CAAAyB,iBAAA,KAAAA,iBAAA,GAAApB,sBAAA,sJAGV;IAEDqB,MAAM,EAAE1B,GAAG,CAAA2B,iBAAA,KAAAA,iBAAA,GAAAtB,sBAAA,kQAUV;IAEDuB,UAAU,EAAE5B,GAAG,CAAA6B,iBAAA,KAAAA,iBAAA,GAAAxB,sBAAA,8GAKd;IAEDyB,GAAG,EAAE9B,GAAG,CAAA+B,iBAAA,KAAAA,iBAAA,GAAA1B,sBAAA,8GAKP;IAED2B,KAAK,EAAEhC,GAAG,CAAAiC,iBAAA,KAAAA,iBAAA,GAAA5B,sBAAA;EAYZ,CAAC;AAAA,CAAC,CAAC;AAEH,eAAeH,SAAS"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import XAdkSender from '.';
|
|
4
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
5
|
+
var meta = {
|
|
6
|
+
title: 'AI组件/XAdkSender 输入框',
|
|
7
|
+
component: XAdkSender,
|
|
8
|
+
parameters: {
|
|
9
|
+
layout: 'centered'
|
|
10
|
+
},
|
|
11
|
+
tags: ['autodocs'],
|
|
12
|
+
argTypes: {}
|
|
13
|
+
};
|
|
14
|
+
export default meta;
|
|
15
|
+
// 基础用法
|
|
16
|
+
var BasicUsageStory = function BasicUsageStory() {
|
|
17
|
+
var _useState = useState([]),
|
|
18
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
19
|
+
files = _useState2[0],
|
|
20
|
+
setFiles = _useState2[1];
|
|
21
|
+
var _useState3 = useState(''),
|
|
22
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
23
|
+
content = _useState4[0],
|
|
24
|
+
setContent = _useState4[1];
|
|
25
|
+
var _useState5 = useState(false),
|
|
26
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
27
|
+
loading = _useState6[0],
|
|
28
|
+
setLoading = _useState6[1];
|
|
29
|
+
|
|
30
|
+
// 模拟清空数据
|
|
31
|
+
var handleSubmit = function handleSubmit() {
|
|
32
|
+
console.info('submit', content);
|
|
33
|
+
};
|
|
34
|
+
var handleClear = function handleClear() {
|
|
35
|
+
console.info('clear');
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
// 模拟停止发送
|
|
39
|
+
var handleStop = function handleStop() {
|
|
40
|
+
console.info('stop');
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
// 模拟输入
|
|
44
|
+
var handleChange = function handleChange(text) {
|
|
45
|
+
setContent(text);
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
// 模拟快捷短语点击
|
|
49
|
+
var handleSendMessage = function handleSendMessage(obj) {
|
|
50
|
+
setLoading(true);
|
|
51
|
+
setTimeout(function () {
|
|
52
|
+
setContent('');
|
|
53
|
+
setFiles([]);
|
|
54
|
+
setLoading(false);
|
|
55
|
+
}, 2000);
|
|
56
|
+
};
|
|
57
|
+
return /*#__PURE__*/_jsx("div", {
|
|
58
|
+
style: {
|
|
59
|
+
width: 800,
|
|
60
|
+
border: '1px solid #eee',
|
|
61
|
+
padding: 20
|
|
62
|
+
},
|
|
63
|
+
children: /*#__PURE__*/_jsx(XAdkSender, {
|
|
64
|
+
loading: loading,
|
|
65
|
+
clearBtnShow: true,
|
|
66
|
+
allowUpload: true,
|
|
67
|
+
onSubmit: handleSubmit,
|
|
68
|
+
onClear: handleClear,
|
|
69
|
+
onStop: handleStop
|
|
70
|
+
})
|
|
71
|
+
});
|
|
72
|
+
};
|
|
73
|
+
export var 基础用法 = {
|
|
74
|
+
render: BasicUsageStory,
|
|
75
|
+
args: {}
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=XAdkSender.stories.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useState","XAdkSender","jsx","_jsx","meta","title","component","parameters","layout","tags","argTypes","BasicUsageStory","_useState","_useState2","_slicedToArray","files","setFiles","_useState3","_useState4","content","setContent","_useState5","_useState6","loading","setLoading","handleSubmit","console","info","handleClear","handleStop","handleChange","text","handleSendMessage","obj","setTimeout","style","width","border","padding","children","clearBtnShow","allowUpload","onSubmit","onClear","onStop","基础用法","render","args"],"sources":["../../../../src/components/XAdkSender/XAdkSender.stories.tsx"],"sourcesContent":["import { useState } from 'react';\nimport type { Meta, StoryObj } from '@storybook/react-vite';\nimport type { Attachment } from '@ant-design/x/es/attachments';\nimport XAdkSender from '.';\n\nconst meta: Meta<typeof XAdkSender> = {\n title: 'AI组件/XAdkSender 输入框',\n component: XAdkSender,\n parameters: {\n layout: 'centered',\n },\n tags: ['autodocs'],\n argTypes: {},\n};\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\n// 基础用法\nconst BasicUsageStory = () => {\n const [files, setFiles] = useState<Attachment[]>([]);\n const [content, setContent] = useState('');\n const [loading, setLoading] = useState(false);\n\n // 模拟清空数据\n const handleSubmit = () => {\n console.info('submit', content);\n };\n\n const handleClear = () => {\n console.info('clear');\n };\n\n // 模拟停止发送\n const handleStop = () => {\n console.info('stop');\n };\n\n // 模拟输入\n const handleChange = (text: string) => {\n setContent(text);\n };\n\n // 模拟快捷短语点击\n const handleSendMessage = (obj: any) => {\n setLoading(true);\n setTimeout(() => {\n setContent('');\n setFiles([]);\n setLoading(false);\n }, 2000);\n };\n\n return (\n <div style={{ width: 800, border: '1px solid #eee', padding: 20 }}>\n <XAdkSender\n loading={loading}\n clearBtnShow={true}\n allowUpload={true}\n onSubmit={handleSubmit}\n onClear={handleClear}\n onStop={handleStop}\n />\n </div>\n );\n};\n\nexport const 基础用法: Story = {\n render: BasicUsageStory,\n args: {},\n};\n"],"mappings":";AAAA,SAASA,QAAQ,QAAQ,OAAO;AAGhC,OAAOC,UAAU,MAAM,GAAG;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAE3B,IAAMC,IAA6B,GAAG;EACpCC,KAAK,EAAE,qBAAqB;EAC5BC,SAAS,EAAEL,UAAU;EACrBM,UAAU,EAAE;IACVC,MAAM,EAAE;EACV,CAAC;EACDC,IAAI,EAAE,CAAC,UAAU,CAAC;EAClBC,QAAQ,EAAE,CAAC;AACb,CAAC;AAED,eAAeN,IAAI;AAGnB;AACA,IAAMO,eAAe,GAAG,SAAlBA,eAAeA,CAAA,EAAS;EAC5B,IAAAC,SAAA,GAA0BZ,QAAQ,CAAe,EAAE,CAAC;IAAAa,UAAA,GAAAC,cAAA,CAAAF,SAAA;IAA7CG,KAAK,GAAAF,UAAA;IAAEG,QAAQ,GAAAH,UAAA;EACtB,IAAAI,UAAA,GAA8BjB,QAAQ,CAAC,EAAE,CAAC;IAAAkB,UAAA,GAAAJ,cAAA,CAAAG,UAAA;IAAnCE,OAAO,GAAAD,UAAA;IAAEE,UAAU,GAAAF,UAAA;EAC1B,IAAAG,UAAA,GAA8BrB,QAAQ,CAAC,KAAK,CAAC;IAAAsB,UAAA,GAAAR,cAAA,CAAAO,UAAA;IAAtCE,OAAO,GAAAD,UAAA;IAAEE,UAAU,GAAAF,UAAA;;EAE1B;EACA,IAAMG,YAAY,GAAG,SAAfA,YAAYA,CAAA,EAAS;IACzBC,OAAO,CAACC,IAAI,CAAC,QAAQ,EAAER,OAAO,CAAC;EACjC,CAAC;EAED,IAAMS,WAAW,GAAG,SAAdA,WAAWA,CAAA,EAAS;IACxBF,OAAO,CAACC,IAAI,CAAC,OAAO,CAAC;EACvB,CAAC;;EAED;EACA,IAAME,UAAU,GAAG,SAAbA,UAAUA,CAAA,EAAS;IACvBH,OAAO,CAACC,IAAI,CAAC,MAAM,CAAC;EACtB,CAAC;;EAED;EACA,IAAMG,YAAY,GAAG,SAAfA,YAAYA,CAAIC,IAAY,EAAK;IACrCX,UAAU,CAACW,IAAI,CAAC;EAClB,CAAC;;EAED;EACA,IAAMC,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAIC,GAAQ,EAAK;IACtCT,UAAU,CAAC,IAAI,CAAC;IAChBU,UAAU,CAAC,YAAM;MACfd,UAAU,CAAC,EAAE,CAAC;MACdJ,QAAQ,CAAC,EAAE,CAAC;MACZQ,UAAU,CAAC,KAAK,CAAC;IACnB,CAAC,EAAE,IAAI,CAAC;EACV,CAAC;EAED,oBACErB,IAAA;IAAKgC,KAAK,EAAE;MAAEC,KAAK,EAAE,GAAG;MAAEC,MAAM,EAAE,gBAAgB;MAAEC,OAAO,EAAE;IAAG,CAAE;IAAAC,QAAA,eAChEpC,IAAA,CAACF,UAAU;MACTsB,OAAO,EAAEA,OAAQ;MACjBiB,YAAY,EAAE,IAAK;MACnBC,WAAW,EAAE,IAAK;MAClBC,QAAQ,EAAEjB,YAAa;MACvBkB,OAAO,EAAEf,WAAY;MACrBgB,MAAM,EAAEf;IAAW,CACpB;EAAC,CACC,CAAC;AAEV,CAAC;AAED,OAAO,IAAMgB,IAAW,GAAG;EACzBC,MAAM,EAAEnC,eAAe;EACvBoC,IAAI,EAAE,CAAC;AACT,CAAC"}
|