@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
|
@@ -32,19 +32,23 @@ __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
|
+
loading = false,
|
|
45
48
|
prologue,
|
|
46
49
|
suggestions,
|
|
47
50
|
messages,
|
|
51
|
+
initialized = true,
|
|
48
52
|
footer,
|
|
49
53
|
showFnCallDetail,
|
|
50
54
|
clearBtnShow = true,
|
|
@@ -54,48 +58,57 @@ var XAdkChatbot = ({
|
|
|
54
58
|
onClear
|
|
55
59
|
}) => {
|
|
56
60
|
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
61
|
const listRef = (0, import_react.useRef)(null);
|
|
61
|
-
const
|
|
62
|
-
const
|
|
63
|
-
const
|
|
64
|
-
|
|
62
|
+
const lastScrollTopRef = (0, import_react.useRef)(0);
|
|
63
|
+
const userHasScrolledRef = (0, import_react.useRef)(false);
|
|
64
|
+
const messagesEndRef = (0, import_react.useRef)(null);
|
|
65
|
+
(0, import_react.useEffect)(() => {
|
|
66
|
+
var _a;
|
|
67
|
+
if (!loading)
|
|
65
68
|
return;
|
|
66
|
-
if (
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
top: listRef.current.scrollHeight,
|
|
71
|
-
behavior: smooth ? "smooth" : "instant"
|
|
69
|
+
if (userHasScrolledRef.current)
|
|
70
|
+
return;
|
|
71
|
+
(_a = messagesEndRef.current) == null ? void 0 : _a.scrollIntoView({
|
|
72
|
+
behavior: "smooth"
|
|
72
73
|
});
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
74
|
+
}, [loading, messages]);
|
|
75
|
+
const handleScroll = (0, import_react.useCallback)(() => {
|
|
76
|
+
const el = listRef.current;
|
|
77
|
+
if (!el)
|
|
78
|
+
return;
|
|
79
|
+
const currentTop = el.scrollTop;
|
|
80
|
+
if (currentTop < lastScrollTopRef.current) {
|
|
81
|
+
userHasScrolledRef.current = true;
|
|
82
|
+
}
|
|
83
|
+
const isAtBottom = Math.abs(el.scrollHeight - currentTop - el.clientHeight) <= scrollThreshold;
|
|
84
|
+
if (isAtBottom) {
|
|
85
|
+
userHasScrolledRef.current = false;
|
|
86
|
+
}
|
|
87
|
+
lastScrollTopRef.current = currentTop;
|
|
81
88
|
}, []);
|
|
82
89
|
(0, import_react.useEffect)(() => {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
90
|
+
const listElement = listRef.current;
|
|
91
|
+
if (!listElement)
|
|
92
|
+
return;
|
|
93
|
+
listElement.addEventListener("scroll", handleScroll);
|
|
94
|
+
return () => {
|
|
95
|
+
listElement.removeEventListener("scroll", handleScroll);
|
|
96
|
+
};
|
|
97
|
+
}, []);
|
|
98
|
+
const handleSubmit = ({ text, files }) => {
|
|
91
99
|
if (loading)
|
|
92
100
|
return;
|
|
93
101
|
if (!(text == null ? void 0 : text.trim()))
|
|
94
102
|
return;
|
|
95
|
-
onSubmit == null ? void 0 : onSubmit(text);
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
103
|
+
onSubmit == null ? void 0 : onSubmit({ text, files });
|
|
104
|
+
queueMicrotask(() => {
|
|
105
|
+
var _a;
|
|
106
|
+
(_a = messagesEndRef.current) == null ? void 0 : _a.scrollIntoView({ behavior: "instant" });
|
|
107
|
+
});
|
|
108
|
+
setTimeout(() => {
|
|
109
|
+
userHasScrolledRef.current = false;
|
|
110
|
+
}, 0);
|
|
111
|
+
};
|
|
99
112
|
const lastIndex = messages.length - 1;
|
|
100
113
|
const lastMessageMap = (0, import_react.useMemo)(() => {
|
|
101
114
|
const map = /* @__PURE__ */ new Map();
|
|
@@ -162,70 +175,20 @@ var XAdkChatbot = ({
|
|
|
162
175
|
},
|
|
163
176
|
children: item
|
|
164
177
|
}
|
|
165
|
-
) }) }, item)) })
|
|
178
|
+
) }) }, item)) }),
|
|
179
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { ref: messagesEndRef })
|
|
166
180
|
] }),
|
|
167
|
-
/* @__PURE__ */ (0, import_jsx_runtime.
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.ClearOutlined, {})
|
|
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
|
-
] })
|
|
181
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
182
|
+
import_XAdkSender.default,
|
|
183
|
+
{
|
|
184
|
+
allowUpload,
|
|
185
|
+
loading,
|
|
186
|
+
clearBtnShow,
|
|
187
|
+
onSubmit: handleSubmit,
|
|
188
|
+
onClear,
|
|
189
|
+
onStop
|
|
190
|
+
}
|
|
191
|
+
)
|
|
229
192
|
] });
|
|
230
193
|
};
|
|
231
194
|
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 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;"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["FunctionCallRender", "ThinkRender", "MarkdownRender", "XAdkSender"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/components/XAdkChatbot/styles.tsx"],
|
|
4
|
-
"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
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAoB;AACpB,oBAAgC;AAEzB,IAAM,gBAAY,+BAAgB,OAAO;AAAA,EAC9C,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA
|
|
4
|
+
"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"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAoB;AACpB,oBAAgC;AAEzB,IAAM,gBAAY,+BAAgB,OAAO;AAAA,EAC9C,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA8BT,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeN,UAAU;AAAA;AAAA;AAAA,EAIV,YAAY;AAAA;AAAA;AAAA,EAIZ,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMhB,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,EAMT,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASN,QAAQ;AAAA;AAAA;AAAA,EAIR,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWR,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,EAQT,QAAQ;AAAA;AAAA;AAAA;AAAA,EAKR,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYR,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOZ,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOL,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYT,EAAE;AAEF,IAAO,iBAAQ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,93 @@
|
|
|
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 = () => {
|
|
54
|
+
console.info("submit", content);
|
|
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
|
+
onSubmit: handleSubmit,
|
|
80
|
+
onClear: handleClear,
|
|
81
|
+
onStop: handleStop
|
|
82
|
+
}
|
|
83
|
+
) });
|
|
84
|
+
};
|
|
85
|
+
var 基础用法 = {
|
|
86
|
+
render: BasicUsageStory,
|
|
87
|
+
args: {}
|
|
88
|
+
};
|
|
89
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
90
|
+
0 && (module.exports = {
|
|
91
|
+
基础用法
|
|
92
|
+
});
|
|
93
|
+
//# 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 = () => {\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"],
|
|
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,MAAM;AACzB,YAAQ,KAAK,UAAU,OAAO;AAAA,EAChC;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,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
|
+
}
|