@ai-group/chat-sdk 2.1.1 → 2.1.4
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/components/FunctionCallRender/index.d.ts +2 -2
- package/dist/cjs/components/XAdkChatbot/components/FunctionCallRender/index.js +3 -4
- package/dist/cjs/components/XAdkChatbot/components/FunctionCallRender/index.js.map +2 -2
- package/dist/cjs/components/XAdkChatbot/index.js +66 -99
- package/dist/cjs/components/XAdkChatbot/index.js.map +3 -3
- package/dist/cjs/components/XAdkSender/XAdkSender.stories.d.ts +6 -0
- package/dist/cjs/components/XAdkSender/XAdkSender.stories.js +119 -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 +430 -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 +5 -5
- package/dist/cjs/components/XAdkWebProvider/XAdkWebProvider.stories.js.map +2 -2
- package/dist/cjs/components/XAdkWebProvider/index.js +12 -6
- package/dist/cjs/components/XAdkWebProvider/index.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/XAiSender.stories.js +1 -1
- package/dist/cjs/components/XAiSender/XAiSender.stories.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 +7 -16
- package/dist/cjs/hooks/useADKChat.js +115 -32
- package/dist/cjs/hooks/useADKChat.js.map +2 -2
- package/dist/cjs/hooks/useAgentGenerator.js +1 -1
- package/dist/cjs/hooks/useAgentGenerator.js.map +2 -2
- package/dist/cjs/services/api.d.ts +5 -5
- package/dist/cjs/services/api.js +6 -9
- package/dist/cjs/services/api.js.map +2 -2
- package/dist/cjs/types/XAdkChatbot.d.ts +21 -3
- package/dist/cjs/types/XAdkChatbot.js.map +1 -1
- package/dist/cjs/types/XAdkProvider.d.ts +35 -9
- package/dist/cjs/types/XAdkProvider.js.map +1 -1
- package/dist/cjs/types/XAdkSender.d.ts +49 -0
- package/dist/cjs/types/XAdkSender.js +18 -0
- package/dist/cjs/types/XAdkSender.js.map +7 -0
- package/dist/cjs/types/XAiProvider.d.ts +1 -28
- package/dist/cjs/types/XAiProvider.js.map +2 -2
- package/dist/cjs/types/XAiSender.d.ts +2 -0
- package/dist/cjs/types/XAiSender.js.map +1 -1
- package/dist/cjs/types/common.d.ts +6 -0
- package/dist/cjs/types/common.js +18 -0
- package/dist/cjs/types/common.js.map +7 -0
- package/dist/cjs/types/index.d.ts +2 -0
- package/dist/cjs/types/index.js +5 -1
- package/dist/cjs/types/index.js.map +2 -2
- package/dist/cjs/utils/chat.d.ts +1 -1
- package/dist/cjs/utils/umdEntry.d.ts +9 -9
- package/dist/cjs/utils/umdEntry.js +1 -0
- package/dist/cjs/utils/umdEntry.js.map +2 -2
- package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/index.d.ts +2 -2
- package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/index.js +3 -3
- package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/index.js.map +1 -1
- package/dist/esm/components/XAdkChatbot/index.js +80 -126
- package/dist/esm/components/XAdkChatbot/index.js.map +1 -1
- package/dist/esm/components/XAdkSender/XAdkSender.stories.d.ts +6 -0
- package/dist/esm/components/XAdkSender/XAdkSender.stories.js +126 -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 +589 -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 +10 -11
- package/dist/esm/components/XAdkWebProvider/XAdkWebProvider.stories.js.map +1 -1
- package/dist/esm/components/XAdkWebProvider/index.js +25 -10
- package/dist/esm/components/XAdkWebProvider/index.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/XAiSender.stories.js +1 -1
- package/dist/esm/components/XAiSender/XAiSender.stories.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 +7 -16
- package/dist/esm/hooks/useADKChat.js +212 -88
- package/dist/esm/hooks/useADKChat.js.map +1 -1
- package/dist/esm/hooks/useAgentGenerator.js +1 -1
- package/dist/esm/hooks/useAgentGenerator.js.map +1 -1
- package/dist/esm/services/api.d.ts +5 -5
- package/dist/esm/services/api.js +8 -11
- package/dist/esm/services/api.js.map +1 -1
- package/dist/esm/types/XAdkChatbot.d.ts +21 -3
- package/dist/esm/types/XAdkChatbot.js.map +1 -1
- package/dist/esm/types/XAdkProvider.d.ts +35 -9
- package/dist/esm/types/XAdkProvider.js.map +1 -1
- package/dist/esm/types/XAdkSender.d.ts +49 -0
- package/dist/esm/types/XAdkSender.js +2 -0
- package/dist/esm/types/XAdkSender.js.map +1 -0
- package/dist/esm/types/XAiProvider.d.ts +1 -28
- package/dist/esm/types/XAiProvider.js +0 -7
- package/dist/esm/types/XAiProvider.js.map +1 -1
- package/dist/esm/types/XAiSender.d.ts +2 -0
- package/dist/esm/types/XAiSender.js.map +1 -1
- package/dist/esm/types/common.d.ts +6 -0
- package/dist/esm/types/common.js +2 -0
- package/dist/esm/types/common.js.map +1 -0
- package/dist/esm/types/index.d.ts +2 -0
- package/dist/esm/types/index.js +2 -0
- package/dist/esm/types/index.js.map +1 -1
- package/dist/esm/utils/chat.d.ts +1 -1
- package/dist/esm/utils/chat.js +4 -4
- package/dist/esm/utils/chat.js.map +1 -1
- package/dist/esm/utils/umdEntry.d.ts +9 -9
- package/dist/esm/utils/umdEntry.js +1 -1
- package/dist/esm/utils/umdEntry.js.map +1 -1
- package/dist/umd/chat-sdk.min.js +1 -1
- package/package.json +1 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import type { IMessage } from "../../../../types";
|
|
2
|
+
import type { IMessage, FunctionCall } from "../../../../types";
|
|
3
3
|
export interface FunctionCallRenderProps {
|
|
4
4
|
msg: IMessage;
|
|
5
5
|
showDetail?: boolean;
|
|
6
|
-
onConfirm?: (confirmed: boolean) => void;
|
|
6
|
+
onConfirm?: (fnCall: FunctionCall, confirmed: boolean) => void;
|
|
7
7
|
}
|
|
8
8
|
declare const FunctionCallRender: React.FC<FunctionCallRenderProps>;
|
|
9
9
|
export default FunctionCallRender;
|
|
@@ -54,12 +54,11 @@ var FunctionCallRender = ({ msg, showDetail, onConfirm }) => {
|
|
|
54
54
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.wrapper, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.confirm, children: [
|
|
55
55
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "mb-4", children: [
|
|
56
56
|
"请确认是否执行工具:",
|
|
57
|
-
originalFn == null ? void 0 : originalFn.name
|
|
58
|
-
"?"
|
|
57
|
+
originalFn == null ? void 0 : originalFn.name
|
|
59
58
|
] }),
|
|
60
59
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_antd.Flex, { justify: "end", gap: 8, children: [
|
|
61
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_antd.Button, { type: "default", onClick: () => onConfirm == null ? void 0 : onConfirm(false), children: "取消" }),
|
|
62
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_antd.Button, { type: "primary", onClick: () => onConfirm == null ? void 0 : onConfirm(true), children: "确认" })
|
|
60
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_antd.Button, { type: "default", onClick: () => onConfirm == null ? void 0 : onConfirm(fnCall, false), children: "取消" }),
|
|
61
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_antd.Button, { type: "primary", onClick: () => onConfirm == null ? void 0 : onConfirm(fnCall, true), children: "确认" })
|
|
63
62
|
] })
|
|
64
63
|
] }) }, msg.id);
|
|
65
64
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../../src/components/XAdkChatbot/components/FunctionCallRender/index.tsx"],
|
|
4
|
-
"sourcesContent": ["import React from 'react';\nimport { Alert, Button, Flex, Form, Popover, Tooltip, Typography } from 'antd';\nimport { CopyOutlined, ToolOutlined, CheckCircleTwoTone, LoadingOutlined, UserSwitchOutlined, InfoCircleOutlined } from '@ant-design/icons';\nimport type { IMessage, FunctionCall } from '@/types';\nimport { useStyles } from './styles';\nimport JsonView from '@/components/XAiJsonView';\n\nexport interface FunctionCallRenderProps {\n msg: IMessage;\n showDetail?: boolean;\n onConfirm?: (confirmed: boolean) => void;\n}\n\nconst FunctionCallRender: React.FC<FunctionCallRenderProps> = ({ msg, showDetail, onConfirm }) => {\n const styles = useStyles();\n const fnCall = msg.functionCall as FunctionCall;\n const fnRes = msg.functionResponse;\n const name = fnCall?.name || fnRes?.name;\n if (name === 'adk_request_confirmation') {\n if (fnRes) {\n if (msg.role === 'bot') return null;\n const confirmed = fnRes.response?.confirmed;\n return (\n <div key={msg.id} className={styles.wrapper}>\n {confirmed\n ? <Alert message=\"已确认\" type=\"success\" showIcon className={styles.alert} />\n : <Alert message=\"已取消\" type=\"error\" showIcon className={styles.alert} />}\n </div>\n );\n }\n const originalFn = msg?.functionCall?.args?.originalFunctionCall;\n return (\n <div key={msg.id} className={styles.wrapper}>\n <div className={styles.confirm}>\n <div className=\"mb-4\">请确认是否执行工具:{originalFn?.name}
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,kBAAwE;AACxE,mBAAwH;AAExH,oBAA0B;AAC1B,yBAAqB;AAoBP;AAZd,IAAM,qBAAwD,CAAC,EAAE,KAAK,YAAY,UAAU,MAAM;AAblG;AAcE,QAAM,aAAS,yBAAU;AACzB,QAAM,SAAS,IAAI;AACnB,QAAM,QAAQ,IAAI;AAClB,QAAM,QAAO,iCAAQ,UAAQ,+BAAO;AACpC,MAAI,SAAS,4BAA4B;AACvC,QAAI,OAAO;AACT,UAAI,IAAI,SAAS;AAAO,eAAO;AAC/B,YAAM,aAAY,WAAM,aAAN,mBAAgB;AAClC,aACE,4CAAC,SAAiB,WAAW,OAAO,SACjC,sBACG,4CAAC,qBAAM,SAAQ,OAAM,MAAK,WAAU,UAAQ,MAAC,WAAW,OAAO,OAAO,IACtE,4CAAC,qBAAM,SAAQ,OAAM,MAAK,SAAQ,UAAQ,MAAC,WAAW,OAAO,OAAO,KAHhE,IAAI,EAId;AAAA,IAEJ;AACA,UAAM,cAAa,sCAAK,iBAAL,mBAAmB,SAAnB,mBAAyB;AAC5C,WACE,4CAAC,SAAiB,WAAW,OAAO,SAClC,uDAAC,SAAI,WAAW,OAAO,SACrB;AAAA,mDAAC,SAAI,WAAU,QAAO;AAAA;AAAA,QAAW,yCAAY;AAAA,
|
|
4
|
+
"sourcesContent": ["import React from 'react';\nimport { Alert, Button, Flex, Form, Popover, Tooltip, Typography } from 'antd';\nimport { CopyOutlined, ToolOutlined, CheckCircleTwoTone, LoadingOutlined, UserSwitchOutlined, InfoCircleOutlined } from '@ant-design/icons';\nimport type { IMessage, FunctionCall } from '@/types';\nimport { useStyles } from './styles';\nimport JsonView from '@/components/XAiJsonView';\n\nexport interface FunctionCallRenderProps {\n msg: IMessage;\n showDetail?: boolean;\n onConfirm?: (fnCall: FunctionCall, confirmed: boolean) => void;\n}\n\nconst FunctionCallRender: React.FC<FunctionCallRenderProps> = ({ msg, showDetail, onConfirm }) => {\n const styles = useStyles();\n const fnCall = msg.functionCall as FunctionCall;\n const fnRes = msg.functionResponse;\n const name = fnCall?.name || fnRes?.name;\n if (name === 'adk_request_confirmation') {\n if (fnRes) {\n if (msg.role === 'bot') return null;\n const confirmed = fnRes.response?.confirmed;\n return (\n <div key={msg.id} className={styles.wrapper}>\n {confirmed\n ? <Alert message=\"已确认\" type=\"success\" showIcon className={styles.alert} />\n : <Alert message=\"已取消\" type=\"error\" showIcon className={styles.alert} />}\n </div>\n );\n }\n const originalFn = msg?.functionCall?.args?.originalFunctionCall;\n return (\n <div key={msg.id} className={styles.wrapper}>\n <div className={styles.confirm}>\n <div className=\"mb-4\">请确认是否执行工具:{originalFn?.name}</div>\n <Flex justify=\"end\" gap={8}>\n <Button type=\"default\" onClick={() => onConfirm?.(fnCall, false)}>取消</Button>\n <Button type=\"primary\" onClick={() => onConfirm?.(fnCall, true)}>\n 确认\n </Button>\n </Flex>\n </div>\n </div>\n );\n }\n if (name === 'transferToAgent') {\n const agentName = fnCall.args?.agentName;\n return (\n <div key={msg.id} className={styles.wrapper}>\n <div className={styles.fnCall}>\n <UserSwitchOutlined style={{ color: '#888' }} />\n <Typography.Text\n ellipsis={{ tooltip: agentName }}\n style={{ maxWidth: 300, lineHeight: '16px' }}\n >\n 任务转交:{agentName}\n </Typography.Text>\n {msg.functionResponse\n ? <CheckCircleTwoTone twoToneColor=\"#52c41a\" />\n : <LoadingOutlined />}\n </div>\n </div>\n );\n }\n const renderItem = (obj: any, text: string) => {\n const str = JSON.stringify(obj, null, 2);\n return (\n <Form.Item\n label={(\n <Flex align=\"center\">\n <span className=\"mr-2\">{text}</span>\n <Typography.Text\n copyable={{\n text: str,\n icon: <CopyOutlined />,\n }}\n />\n </Flex>\n )}\n style={{ marginBottom: 12 }}\n >\n <JsonView value={str} />\n </Form.Item>\n );\n };\n const renderResponse = () => {\n const res = msg.functionResponse;\n if (res) {\n if (res.response?.error) {\n return (\n <Tooltip title={res.response.error}>\n <InfoCircleOutlined style={{ color: '#faad14' }} />\n </Tooltip>\n );\n }\n return <CheckCircleTwoTone twoToneColor=\"#52c41a\" />;\n }\n return <LoadingOutlined />;\n };\n return (\n <div key={msg.id} className={styles.wrapper}>\n {showDetail ? (\n <Popover\n placement=\"left\"\n content={(\n <Form style={{ width: 400 }} layout=\"vertical\">\n {renderItem(fnCall.args, '工具参数')}\n {renderItem(msg.functionResponse?.response, '工具响应')}\n </Form>\n )}\n >\n <div className={styles.fnCall}>\n <ToolOutlined style={{ color: '#888' }} />\n <Typography.Text\n ellipsis={{ tooltip: name }}\n style={{ maxWidth: 300, lineHeight: '16px' }}\n >\n 调用工具:{name}\n </Typography.Text>\n {renderResponse()}\n </div>\n </Popover>\n ) : (\n <div className={styles.fnCall}>\n <ToolOutlined style={{ color: '#888' }} />\n <Typography.Text\n ellipsis={{ tooltip: name }}\n style={{ maxWidth: 300, lineHeight: '16px' }}\n >\n 调用工具:{name}\n </Typography.Text>\n {renderResponse()}\n </div>\n )}\n </div>\n );\n};\n\nexport default FunctionCallRender;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["JsonView", "_a"]
|
|
7
7
|
}
|
|
@@ -32,70 +32,86 @@ __export(XAdkChatbot_exports, {
|
|
|
32
32
|
default: () => XAdkChatbot_default
|
|
33
33
|
});
|
|
34
34
|
module.exports = __toCommonJS(XAdkChatbot_exports);
|
|
35
|
-
var import_react =
|
|
35
|
+
var import_react = require("react");
|
|
36
36
|
var import_antd = require("antd");
|
|
37
37
|
var import_icons = require("@ant-design/icons");
|
|
38
38
|
var import_styles = require("./styles");
|
|
39
39
|
var import_MarkdownRender = __toESM(require("./components/MarkdownRender"));
|
|
40
40
|
var import_FunctionCallRender = __toESM(require("./components/FunctionCallRender"));
|
|
41
41
|
var import_ThinkRender = __toESM(require("./components/ThinkRender"));
|
|
42
|
+
var import_XAdkSender = __toESM(require("../XAdkSender"));
|
|
42
43
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
44
|
+
var scrollThreshold = 10;
|
|
43
45
|
var XAdkChatbot = ({
|
|
44
|
-
|
|
46
|
+
allowUpload = false,
|
|
47
|
+
uploadRequest = () => {
|
|
48
|
+
},
|
|
49
|
+
loading = false,
|
|
45
50
|
prologue,
|
|
46
51
|
suggestions,
|
|
47
52
|
messages,
|
|
53
|
+
initialized = true,
|
|
48
54
|
footer,
|
|
49
55
|
showFnCallDetail,
|
|
50
56
|
clearBtnShow = true,
|
|
57
|
+
onConfirm,
|
|
51
58
|
onSubmit,
|
|
52
59
|
onSuggest,
|
|
53
60
|
onStop,
|
|
54
61
|
onClear
|
|
55
62
|
}) => {
|
|
56
63
|
const styles = (0, import_styles.useStyles)();
|
|
57
|
-
const [inputValue, setInputValue] = import_react.default.useState("");
|
|
58
|
-
const [showLog, setShowLog] = (0, import_react.useState)(false);
|
|
59
|
-
const [invocation, setInvocation] = (0, import_react.useState)();
|
|
60
64
|
const listRef = (0, import_react.useRef)(null);
|
|
61
|
-
const
|
|
62
|
-
const
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
+
const lastScrollTopRef = (0, import_react.useRef)(0);
|
|
66
|
+
const userHasScrolledRef = (0, import_react.useRef)(false);
|
|
67
|
+
const messagesEndRef = (0, import_react.useRef)(null);
|
|
68
|
+
(0, import_react.useEffect)(() => {
|
|
69
|
+
var _a;
|
|
70
|
+
if (!loading)
|
|
65
71
|
return;
|
|
66
|
-
if (
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
top: listRef.current.scrollHeight,
|
|
71
|
-
behavior: smooth ? "smooth" : "instant"
|
|
72
|
+
if (userHasScrolledRef.current)
|
|
73
|
+
return;
|
|
74
|
+
(_a = messagesEndRef.current) == null ? void 0 : _a.scrollIntoView({
|
|
75
|
+
behavior: "smooth"
|
|
72
76
|
});
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
77
|
+
}, [loading, messages]);
|
|
78
|
+
const handleScroll = (0, import_react.useCallback)(() => {
|
|
79
|
+
const el = listRef.current;
|
|
80
|
+
if (!el)
|
|
81
|
+
return;
|
|
82
|
+
const currentTop = el.scrollTop;
|
|
83
|
+
if (currentTop < lastScrollTopRef.current) {
|
|
84
|
+
userHasScrolledRef.current = true;
|
|
85
|
+
}
|
|
86
|
+
const isAtBottom = Math.abs(el.scrollHeight - currentTop - el.clientHeight) <= scrollThreshold;
|
|
87
|
+
if (isAtBottom) {
|
|
88
|
+
userHasScrolledRef.current = false;
|
|
89
|
+
}
|
|
90
|
+
lastScrollTopRef.current = currentTop;
|
|
81
91
|
}, []);
|
|
82
92
|
(0, import_react.useEffect)(() => {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
93
|
+
const listElement = listRef.current;
|
|
94
|
+
if (!listElement)
|
|
95
|
+
return;
|
|
96
|
+
listElement.addEventListener("scroll", handleScroll);
|
|
97
|
+
return () => {
|
|
98
|
+
listElement.removeEventListener("scroll", handleScroll);
|
|
99
|
+
};
|
|
100
|
+
}, []);
|
|
101
|
+
const handleSubmit = ({ text, files }) => {
|
|
91
102
|
if (loading)
|
|
92
103
|
return;
|
|
93
104
|
if (!(text == null ? void 0 : text.trim()))
|
|
94
105
|
return;
|
|
95
|
-
onSubmit == null ? void 0 : onSubmit(text);
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
106
|
+
onSubmit == null ? void 0 : onSubmit({ text, files });
|
|
107
|
+
queueMicrotask(() => {
|
|
108
|
+
var _a;
|
|
109
|
+
(_a = messagesEndRef.current) == null ? void 0 : _a.scrollIntoView({ behavior: "instant" });
|
|
110
|
+
});
|
|
111
|
+
setTimeout(() => {
|
|
112
|
+
userHasScrolledRef.current = false;
|
|
113
|
+
}, 0);
|
|
114
|
+
};
|
|
99
115
|
const lastIndex = messages.length - 1;
|
|
100
116
|
const lastMessageMap = (0, import_react.useMemo)(() => {
|
|
101
117
|
const map = /* @__PURE__ */ new Map();
|
|
@@ -143,7 +159,7 @@ var XAdkChatbot = ({
|
|
|
143
159
|
const fnCall = msg.functionCall;
|
|
144
160
|
if (fnCall) {
|
|
145
161
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.botMsg, children: [
|
|
146
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_FunctionCallRender.default, { msg, showDetail: showFnCallDetail }),
|
|
162
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_FunctionCallRender.default, { msg, showDetail: showFnCallDetail, onConfirm }),
|
|
147
163
|
!isLoading && (footer == null ? void 0 : footer({ message: msg, isLastMsg: isLast, isLastBotMsg }))
|
|
148
164
|
] }, `${msg.id}-${i}`);
|
|
149
165
|
}
|
|
@@ -162,70 +178,21 @@ var XAdkChatbot = ({
|
|
|
162
178
|
},
|
|
163
179
|
children: item
|
|
164
180
|
}
|
|
165
|
-
) }) }, item)) })
|
|
181
|
+
) }) }, item)) }),
|
|
182
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { ref: messagesEndRef })
|
|
166
183
|
] }),
|
|
167
|
-
/* @__PURE__ */ (0, import_jsx_runtime.
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
}
|
|
180
|
-
)
|
|
181
|
-
}
|
|
182
|
-
),
|
|
183
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.sender, children: [
|
|
184
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
185
|
-
import_antd.Input.TextArea,
|
|
186
|
-
{
|
|
187
|
-
className: styles.input,
|
|
188
|
-
rows: 1,
|
|
189
|
-
autoSize: { minRows: 1, maxRows: 4 },
|
|
190
|
-
value: inputValue,
|
|
191
|
-
onChange: (e) => {
|
|
192
|
-
setInputValue(e.target.value);
|
|
193
|
-
},
|
|
194
|
-
onPressEnter: async (e) => {
|
|
195
|
-
if (e.shiftKey) {
|
|
196
|
-
return;
|
|
197
|
-
}
|
|
198
|
-
e.preventDefault();
|
|
199
|
-
handleSubmit(inputValue);
|
|
200
|
-
},
|
|
201
|
-
placeholder: "请输入消息"
|
|
202
|
-
}
|
|
203
|
-
),
|
|
204
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { children: loading ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
205
|
-
import_antd.Button,
|
|
206
|
-
{
|
|
207
|
-
type: "primary",
|
|
208
|
-
shape: "circle",
|
|
209
|
-
icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.LoadingOutlined, {}),
|
|
210
|
-
onClick: () => {
|
|
211
|
-
onStop == null ? void 0 : onStop();
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
215
|
-
import_antd.Button,
|
|
216
|
-
{
|
|
217
|
-
type: "primary",
|
|
218
|
-
shape: "circle",
|
|
219
|
-
icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.ArrowUpOutlined, {}),
|
|
220
|
-
onClick: () => {
|
|
221
|
-
handleSubmit(inputValue);
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
) })
|
|
225
|
-
] })
|
|
226
|
-
] }),
|
|
227
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.tip, children: "内容由AI生成,无法确保真实准确,仅供参考" })
|
|
228
|
-
] })
|
|
184
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
185
|
+
import_XAdkSender.default,
|
|
186
|
+
{
|
|
187
|
+
allowUpload,
|
|
188
|
+
uploadRequest,
|
|
189
|
+
loading,
|
|
190
|
+
clearBtnShow,
|
|
191
|
+
onSubmit: handleSubmit,
|
|
192
|
+
onClear,
|
|
193
|
+
onStop
|
|
194
|
+
}
|
|
195
|
+
)
|
|
229
196
|
] });
|
|
230
197
|
};
|
|
231
198
|
var XAdkChatbot_default = XAdkChatbot;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/components/XAdkChatbot/index.tsx"],
|
|
4
|
-
"sourcesContent": ["import React, { useMemo, useCallback, useEffect, useRef
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,
|
|
6
|
-
"names": ["
|
|
4
|
+
"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 uploadRequest = () => {},\n loading = false,\n prologue,\n suggestions,\n messages,\n initialized = true,\n footer,\n showFnCallDetail,\n clearBtnShow = true,\n onConfirm,\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} onConfirm={onConfirm}/>\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 uploadRequest={uploadRequest}\n loading={loading}\n clearBtnShow={clearBtnShow}\n onSubmit={handleSubmit}\n onClear={onClear}\n onStop={onStop}\n />\n </div>\n );\n};\n\nexport default XAdkChatbot;"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["FunctionCallRender", "ThinkRender", "MarkdownRender", "XAdkSender"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
21
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
22
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
23
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
24
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
25
|
+
mod
|
|
26
|
+
));
|
|
27
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
28
|
+
|
|
29
|
+
// src/components/XAdkSender/XAdkSender.stories.tsx
|
|
30
|
+
var XAdkSender_stories_exports = {};
|
|
31
|
+
__export(XAdkSender_stories_exports, {
|
|
32
|
+
default: () => XAdkSender_stories_default,
|
|
33
|
+
基础用法: () => 基础用法
|
|
34
|
+
});
|
|
35
|
+
module.exports = __toCommonJS(XAdkSender_stories_exports);
|
|
36
|
+
var import_react = require("react");
|
|
37
|
+
var import__ = __toESM(require("."));
|
|
38
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
39
|
+
var meta = {
|
|
40
|
+
title: "AI组件/XAdkSender 输入框",
|
|
41
|
+
component: import__.default,
|
|
42
|
+
parameters: {
|
|
43
|
+
layout: "centered"
|
|
44
|
+
},
|
|
45
|
+
tags: ["autodocs"],
|
|
46
|
+
argTypes: {}
|
|
47
|
+
};
|
|
48
|
+
var XAdkSender_stories_default = meta;
|
|
49
|
+
var BasicUsageStory = () => {
|
|
50
|
+
const [files, setFiles] = (0, import_react.useState)([]);
|
|
51
|
+
const [content, setContent] = (0, import_react.useState)("");
|
|
52
|
+
const [loading, setLoading] = (0, import_react.useState)(false);
|
|
53
|
+
const handleSubmit = (data) => {
|
|
54
|
+
console.info("submit", data);
|
|
55
|
+
};
|
|
56
|
+
const handleClear = () => {
|
|
57
|
+
console.info("clear");
|
|
58
|
+
};
|
|
59
|
+
const handleStop = () => {
|
|
60
|
+
console.info("stop");
|
|
61
|
+
};
|
|
62
|
+
const handleChange = (text) => {
|
|
63
|
+
setContent(text);
|
|
64
|
+
};
|
|
65
|
+
const handleSendMessage = (obj) => {
|
|
66
|
+
setLoading(true);
|
|
67
|
+
setTimeout(() => {
|
|
68
|
+
setContent("");
|
|
69
|
+
setFiles([]);
|
|
70
|
+
setLoading(false);
|
|
71
|
+
}, 2e3);
|
|
72
|
+
};
|
|
73
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style: { width: 800, border: "1px solid #eee", padding: 20 }, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
74
|
+
import__.default,
|
|
75
|
+
{
|
|
76
|
+
loading,
|
|
77
|
+
clearBtnShow: true,
|
|
78
|
+
allowUpload: true,
|
|
79
|
+
uploadRequest: async ({ file, onProgress, onSuccess, onError }) => {
|
|
80
|
+
try {
|
|
81
|
+
const formData = new FormData();
|
|
82
|
+
formData.append("file", file);
|
|
83
|
+
let progress = 0;
|
|
84
|
+
const interval = setInterval(() => {
|
|
85
|
+
progress += 10;
|
|
86
|
+
onProgress == null ? void 0 : onProgress({ percent: progress });
|
|
87
|
+
if (progress >= 100) {
|
|
88
|
+
clearInterval(interval);
|
|
89
|
+
const mockResponse = {
|
|
90
|
+
code: 200,
|
|
91
|
+
data: {
|
|
92
|
+
fileId: Math.floor(Math.random() * 1e3) + 1,
|
|
93
|
+
tempUrl: `https://example.com/uploads/${file.name}`,
|
|
94
|
+
fileName: file.name,
|
|
95
|
+
fileType: file.name.split(".").pop() || ""
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
onSuccess == null ? void 0 : onSuccess(mockResponse);
|
|
99
|
+
}
|
|
100
|
+
}, 100);
|
|
101
|
+
} catch (error) {
|
|
102
|
+
onError == null ? void 0 : onError(error);
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
onSubmit: handleSubmit,
|
|
106
|
+
onClear: handleClear,
|
|
107
|
+
onStop: handleStop
|
|
108
|
+
}
|
|
109
|
+
) });
|
|
110
|
+
};
|
|
111
|
+
var 基础用法 = {
|
|
112
|
+
render: BasicUsageStory,
|
|
113
|
+
args: {}
|
|
114
|
+
};
|
|
115
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
116
|
+
0 && (module.exports = {
|
|
117
|
+
基础用法
|
|
118
|
+
});
|
|
119
|
+
//# sourceMappingURL=XAdkSender.stories.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/components/XAdkSender/XAdkSender.stories.tsx"],
|
|
4
|
+
"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 = (data: any) => {\n console.info('submit', data);\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 uploadRequest={async ({ file, onProgress, onSuccess, onError }) => {\n try {\n // 创建 FormData\n const formData = new FormData();\n formData.append('file', file);\n \n // 模拟上传进度\n let progress = 0;\n const interval = setInterval(() => {\n progress += 10;\n onProgress?.({ percent: progress });\n \n if (progress >= 100) {\n clearInterval(interval);\n // 模拟成功响应\n const mockResponse = {\n code: 200,\n data: {\n fileId: Math.floor(Math.random() * 1000) + 1,\n tempUrl: `https://example.com/uploads/${file.name}`,\n fileName: file.name,\n fileType: file.name.split('.').pop() || ''\n }\n };\n onSuccess?.(mockResponse);\n }\n }, 100);\n \n } catch (error) {\n onError?.(error as Error);\n }\n }}\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"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAyB;AAGzB,eAAuB;AAoDjB;AAlDN,IAAM,OAAgC;AAAA,EACpC,OAAO;AAAA,EACP,WAAW,SAAAA;AAAA,EACX,YAAY;AAAA,IACV,QAAQ;AAAA,EACV;AAAA,EACA,MAAM,CAAC,UAAU;AAAA,EACjB,UAAU,CAAC;AACb;AAEA,IAAO,6BAAQ;AAIf,IAAM,kBAAkB,MAAM;AAC5B,QAAM,CAAC,OAAO,QAAQ,QAAI,uBAAuB,CAAC,CAAC;AACnD,QAAM,CAAC,SAAS,UAAU,QAAI,uBAAS,EAAE;AACzC,QAAM,CAAC,SAAS,UAAU,QAAI,uBAAS,KAAK;AAG5C,QAAM,eAAe,CAAC,SAAc;AAClC,YAAQ,KAAK,UAAU,IAAI;AAAA,EAC7B;AAEA,QAAM,cAAc,MAAM;AACxB,YAAQ,KAAK,OAAO;AAAA,EACtB;AAGA,QAAM,aAAa,MAAM;AACvB,YAAQ,KAAK,MAAM;AAAA,EACrB;AAGA,QAAM,eAAe,CAAC,SAAiB;AACrC,eAAW,IAAI;AAAA,EACjB;AAGA,QAAM,oBAAoB,CAAC,QAAa;AACtC,eAAW,IAAI;AACf,eAAW,MAAM;AACf,iBAAW,EAAE;AACb,eAAS,CAAC,CAAC;AACX,iBAAW,KAAK;AAAA,IAClB,GAAG,GAAI;AAAA,EACT;AAEA,SACE,4CAAC,SAAI,OAAO,EAAE,OAAO,KAAK,QAAQ,kBAAkB,SAAS,GAAG,GAC9D;AAAA,IAAC,SAAAA;AAAA,IAAA;AAAA,MACC;AAAA,MACA,cAAc;AAAA,MACd,aAAa;AAAA,MACb,eAAe,OAAO,EAAE,MAAM,YAAY,WAAW,QAAQ,MAAM;AACjE,YAAI;AAEF,gBAAM,WAAW,IAAI,SAAS;AAC9B,mBAAS,OAAO,QAAQ,IAAI;AAG5B,cAAI,WAAW;AACf,gBAAM,WAAW,YAAY,MAAM;AACjC,wBAAY;AACZ,qDAAa,EAAE,SAAS,SAAS;AAEjC,gBAAI,YAAY,KAAK;AACnB,4BAAc,QAAQ;AAEtB,oBAAM,eAAe;AAAA,gBACnB,MAAM;AAAA,gBACN,MAAM;AAAA,kBACJ,QAAQ,KAAK,MAAM,KAAK,OAAO,IAAI,GAAI,IAAI;AAAA,kBAC3C,SAAS,+BAA+B,KAAK;AAAA,kBAC7C,UAAU,KAAK;AAAA,kBACf,UAAU,KAAK,KAAK,MAAM,GAAG,EAAE,IAAI,KAAK;AAAA,gBAC1C;AAAA,cACF;AACA,qDAAY;AAAA,YACd;AAAA,UACF,GAAG,GAAG;AAAA,QAER,SAAS,OAAP;AACA,6CAAU;AAAA,QACZ;AAAA,MACF;AAAA,MACA,UAAU;AAAA,MACV,SAAS;AAAA,MACT,QAAQ;AAAA;AAAA,EACV,GACF;AAEJ;AAEO,IAAM,OAAc;AAAA,EACzB,QAAQ;AAAA,EACR,MAAM,CAAC;AACT;",
|
|
6
|
+
"names": ["XAdkSender"]
|
|
7
|
+
}
|