@ai-group/chat-sdk 0.3.1 → 0.3.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/XAiProvider/index.d.ts +2 -2
- package/dist/cjs/components/XAiProvider/index.js +23 -6
- package/dist/cjs/components/XAiProvider/index.js.map +2 -2
- package/dist/cjs/types/XAiProvider.d.ts +9 -0
- package/dist/cjs/types/XAiProvider.js.map +2 -2
- package/dist/cjs/utils/umdEntry.d.ts +10 -1
- package/dist/cjs/utils/umdEntry.js +23 -2
- package/dist/cjs/utils/umdEntry.js.map +2 -2
- package/dist/esm/components/XAiProvider/index.d.ts +2 -2
- package/dist/esm/components/XAiProvider/index.js +41 -10
- package/dist/esm/components/XAiProvider/index.js.map +1 -1
- package/dist/esm/types/XAiProvider.d.ts +9 -0
- package/dist/esm/types/XAiProvider.js.map +1 -1
- package/dist/esm/utils/umdEntry.d.ts +10 -1
- package/dist/esm/utils/umdEntry.js +37 -3
- package/dist/esm/utils/umdEntry.js.map +1 -1
- package/dist/umd/chat-sdk.min.js +1 -1
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { XAiProviderProps } from "../../types/XAiProvider";
|
|
3
|
-
declare const XAiProvider: React.
|
|
2
|
+
import { XAiProviderProps, XAiProviderHandle } from "../../types/XAiProvider";
|
|
3
|
+
declare const XAiProvider: React.ForwardRefExoticComponent<XAiProviderProps & React.RefAttributes<XAiProviderHandle>>;
|
|
4
4
|
export default XAiProvider;
|
|
@@ -40,7 +40,7 @@ var import_x = require("@ant-design/x");
|
|
|
40
40
|
var import_AiProviderContext = require("../../context/AiProviderContext");
|
|
41
41
|
var import_useAgentGenerator = __toESM(require("../../hooks/useAgentGenerator"));
|
|
42
42
|
var import_user = __toESM(require("../../assets/user.png"));
|
|
43
|
-
var XAiProvider = ({
|
|
43
|
+
var XAiProvider = (0, import_react.forwardRef)(({
|
|
44
44
|
url,
|
|
45
45
|
token,
|
|
46
46
|
config,
|
|
@@ -48,9 +48,18 @@ var XAiProvider = ({
|
|
|
48
48
|
onSuccess,
|
|
49
49
|
onError,
|
|
50
50
|
children
|
|
51
|
-
}) => {
|
|
51
|
+
}, ref) => {
|
|
52
52
|
const { appInfo, chat, stopChat, reChat, messages, loading, setCurrentSession, setMessages } = (0, import_useAgentGenerator.default)({ url, token, config, onError, onSuccess });
|
|
53
53
|
const { appName, icon } = appInfo || {};
|
|
54
|
+
(0, import_react.useImperativeHandle)(ref, () => ({
|
|
55
|
+
chat,
|
|
56
|
+
stopChat,
|
|
57
|
+
reChat,
|
|
58
|
+
getAppInfo: () => appInfo,
|
|
59
|
+
getMessages: () => messages,
|
|
60
|
+
setMessages,
|
|
61
|
+
setCurrentSession
|
|
62
|
+
}), [appInfo, messages, chat, stopChat, reChat, setMessages, setCurrentSession]);
|
|
54
63
|
const handleSendMessage = (_type, content) => {
|
|
55
64
|
chat(content);
|
|
56
65
|
};
|
|
@@ -70,10 +79,18 @@ var XAiProvider = ({
|
|
|
70
79
|
(0, import_copy_to_clipboard.default)(text);
|
|
71
80
|
import_antd.message.success("复制成功");
|
|
72
81
|
break;
|
|
73
|
-
case 2:
|
|
74
|
-
|
|
75
|
-
|
|
82
|
+
case 2: {
|
|
83
|
+
const idx = messages.findIndex((item) => item.id === id);
|
|
84
|
+
if (idx >= 0) {
|
|
85
|
+
if (messages.length - idx <= 2) {
|
|
86
|
+
setMessages((prev) => prev.filter((item) => item.id !== id && item.type !== "SuggestionMessage"));
|
|
87
|
+
} else {
|
|
88
|
+
setMessages((prev) => prev.filter((item) => item.id !== id));
|
|
89
|
+
}
|
|
90
|
+
import_antd.message.success("删除成功");
|
|
91
|
+
}
|
|
76
92
|
break;
|
|
93
|
+
}
|
|
77
94
|
}
|
|
78
95
|
};
|
|
79
96
|
const handleSuggestMessageClick = (_item, id) => {
|
|
@@ -113,6 +130,6 @@ var XAiProvider = ({
|
|
|
113
130
|
},
|
|
114
131
|
children
|
|
115
132
|
));
|
|
116
|
-
};
|
|
133
|
+
});
|
|
117
134
|
var XAiProvider_default = XAiProvider;
|
|
118
135
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/components/XAiProvider/index.tsx"],
|
|
4
|
-
"sourcesContent": ["import React from 'react';\nimport { message, Divider } from 'antd';\nimport { v4 as uuidV4 } from 'uuid';\nimport copy from 'copy-to-clipboard';\nimport { XProvider } from '@ant-design/x';\nimport { XAiContext } from '@/context/AiProviderContext';\nimport { XAiProviderProps } from '@/types/XAiProvider';\nimport useAgentGenerator from '@/hooks/useAgentGenerator';\nimport userIcon from '@/assets/user.png';\n\nconst XAiProvider
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,
|
|
4
|
+
"sourcesContent": ["import React, { forwardRef, useImperativeHandle } from 'react';\nimport { message, Divider } from 'antd';\nimport { v4 as uuidV4 } from 'uuid';\nimport copy from 'copy-to-clipboard';\nimport { XProvider } from '@ant-design/x';\nimport { XAiContext } from '@/context/AiProviderContext';\nimport { XAiProviderProps, XAiProviderHandle } from '@/types/XAiProvider';\nimport useAgentGenerator from '@/hooks/useAgentGenerator';\nimport userIcon from '@/assets/user.png';\n\nconst XAiProvider = forwardRef<XAiProviderHandle, XAiProviderProps>(({\n url,\n token,\n config,\n providerId = 'defaultId',\n onSuccess,\n onError,\n children,\n}, ref) => {\n // 使用 useAgentGenerator Hook 管理消息状态\n const { appInfo, chat, stopChat, reChat, messages, loading, setCurrentSession, setMessages } = useAgentGenerator({ url, token, config, onError, onSuccess });\n\n const { appName, icon } = appInfo || {};\n\n useImperativeHandle(ref, () => ({\n chat,\n stopChat,\n reChat,\n getAppInfo: () => appInfo,\n getMessages: () => messages,\n setMessages,\n setCurrentSession,\n }), [appInfo, messages, chat, stopChat, reChat, setMessages, setCurrentSession]);\n\n // 发送消息\n const handleSendMessage = (_type: string, content: string) => {\n chat(content);\n };\n\n // 清空消息\n const handleClearMessage = () => {\n stopChat();\n setMessages([]);\n setCurrentSession(uuidV4());\n };\n\n // 工具栏按钮点击\n const handleActions = (index: number, actionData: any) => {\n const { content, id } = actionData || {};\n const { text = '' } = content;\n switch (index) {\n case 0:\n reChat();\n break;\n case 1:\n copy(text);\n message.success('复制成功');\n break;\n case 2: {\n const idx = messages.findIndex((item) => item.id === id);\n if (idx >= 0) {\n // 删除该条消息及建议类消息\n if (messages.length - idx <= 2) {\n setMessages((prev) => prev.filter((item) => item.id !== id && item.type !== 'SuggestionMessage'));\n } else {\n // 非最新消息 只删除该条消息\n setMessages((prev) => prev.filter((item) => item.id !== id));\n }\n message.success('删除成功');\n }\n break;\n }\n }\n };\n\n // 建议消息点击\n const handleSuggestMessageClick = (_item: any, id: string) => {\n setMessages((prev: any[]) => prev.filter((m: any) => m.id !== id));\n };\n\n const ToolTip = (messageData: any) => {\n const finalResult = (messageData?.think || []).find((item: any) => item.actionName === 'FINISHED');\n if (!finalResult) return null;\n const { cost, token: tokenCount } = finalResult.extra || {};\n if (!cost && !token) return null;\n return (\n <div style={{ display: 'flex', alignItems: 'center', fontSize: '12px', color: '#949494', flex: 1, paddingRight: '40px' }}>\n { (cost !== undefined && cost !== null) && <div>{cost}s</div> }\n { tokenCount && <Divider type=\"vertical\" /> }\n { tokenCount && <div>{ tokenCount } tokens</div> }\n </div>\n );\n };\n\n return (\n <XProvider>\n <XAiContext.Provider value={{\n avatar: <img src={icon} alt=\"智能体头像\" />,\n userAvatar: <img src={userIcon} alt=\"用户头像\" />,\n emptyStateImage: icon,\n emptyStateText: appName,\n footerTips: '内容由AI生成,无法确保真实准确,仅供参考',\n providerId,\n token,\n messages,\n loading,\n error: null,\n messageTooltip: ToolTip,\n onSend: handleSendMessage,\n onClear: handleClearMessage,\n onStop: stopChat,\n onSuggestMessageClick: handleSuggestMessageClick,\n onMessagesActionsCallback: handleActions,\n isInProvider: true,\n }}\n >\n {children}\n </XAiContext.Provider>\n </XProvider>\n );\n});\n\nexport default XAiProvider;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["useAgentGenerator", "uuidV4", "copy", "React", "userIcon"]
|
|
7
7
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React, { ReactNode } from 'react';
|
|
2
2
|
import { AiClient } from 'src/client/base';
|
|
3
3
|
import type { ChatbotMessageFields } from './XAiChatbot';
|
|
4
|
+
import { Messages } from "./XAiMessage";
|
|
4
5
|
export type ThemeType = 'default';
|
|
5
6
|
export declare enum ErrorCode {
|
|
6
7
|
APP_NOT_ENABLE = "APP_NOT_ENABLE",
|
|
@@ -12,6 +13,14 @@ export interface Error {
|
|
|
12
13
|
code: ErrorCode;
|
|
13
14
|
message: string;
|
|
14
15
|
}
|
|
16
|
+
export interface XAiProviderHandle {
|
|
17
|
+
chat: (content: string) => void;
|
|
18
|
+
stopChat: () => void;
|
|
19
|
+
reChat: () => void;
|
|
20
|
+
getAppInfo: () => any;
|
|
21
|
+
getMessages: () => Messages[];
|
|
22
|
+
setCurrentSession: (id: string) => void;
|
|
23
|
+
}
|
|
15
24
|
export interface XAiProviderProps {
|
|
16
25
|
/** AI 服务地址 */
|
|
17
26
|
url: string;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/types/XAiProvider.ts"],
|
|
4
|
-
"sourcesContent": ["// context/ProviderContext.ts\nimport React, { ReactNode } from 'react';\nimport { AiClient } from 'src/client/base';\nimport type { ChatbotMessageFields } from './XAiChatbot';\n\nexport type ThemeType = 'default';\n\nexport enum ErrorCode {\n APP_NOT_ENABLE = 'APP_NOT_ENABLE',\n APP_DELETED = 'APP_DELETED',\n APP_NOT_FOUND = 'APP_NOT_FOUND',\n API_ERROR = 'API_ERROR',\n}\n\nexport interface Error {\n code: ErrorCode;\n message: string;\n}\n\nexport interface XAiProviderProps {\n /** AI 服务地址 */\n url: string;\n /** 认证 token */\n token: string;\n /** 配置信息 */\n config?: any;\n /** Provider 唯一标识,用于区分多个 Provider 实例 */\n providerId?: string;\n /** Token 刷新回调 */\n onRefreshToken?: () => Promise<string>;\n /** 应用无法正常渲染回调 */\n onError?: (error: Error) => void;\n /** 应用正常渲染回调 */\n onSuccess?: (appInfo: any) => void;\n /** 子组件 */\n children: ReactNode;\n}\n\nexport interface XAiSDKProps extends XAiProviderProps {\n theme?: ThemeType;\n componentProps?: {\n id?: string;\n [key: string]: any; // 支持任意 CSS 属性\n };\n}\n\nexport interface XAiContextType extends Required<ChatbotMessageFields> {\n client: AiClient | null;\n token: string;\n loading: boolean;\n error: string | null;\n // ...其它全局配置\n}\n\nexport const XAiContext = React.createContext<XAiContextType | null>(null);\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAiC;
|
|
4
|
+
"sourcesContent": ["// context/ProviderContext.ts\nimport React, { ReactNode } from 'react';\nimport { AiClient } from 'src/client/base';\nimport type { ChatbotMessageFields } from './XAiChatbot';\nimport { Messages } from '@/types/XAiMessage';\n\nexport type ThemeType = 'default';\n\nexport enum ErrorCode {\n APP_NOT_ENABLE = 'APP_NOT_ENABLE',\n APP_DELETED = 'APP_DELETED',\n APP_NOT_FOUND = 'APP_NOT_FOUND',\n API_ERROR = 'API_ERROR',\n}\n\nexport interface Error {\n code: ErrorCode;\n message: string;\n}\n\nexport interface XAiProviderHandle {\n chat: (content: string) => void;\n stopChat: () => void;\n reChat: () => void;\n getAppInfo: () => any;\n getMessages: () => Messages[];\n setCurrentSession: (id: string) => void;\n}\n\nexport interface XAiProviderProps {\n /** AI 服务地址 */\n url: string;\n /** 认证 token */\n token: string;\n /** 配置信息 */\n config?: any;\n /** Provider 唯一标识,用于区分多个 Provider 实例 */\n providerId?: string;\n /** Token 刷新回调 */\n onRefreshToken?: () => Promise<string>;\n /** 应用无法正常渲染回调 */\n onError?: (error: Error) => void;\n /** 应用正常渲染回调 */\n onSuccess?: (appInfo: any) => void;\n /** 子组件 */\n children: ReactNode;\n}\n\nexport interface XAiSDKProps extends XAiProviderProps {\n theme?: ThemeType;\n componentProps?: {\n id?: string;\n [key: string]: any; // 支持任意 CSS 属性\n };\n}\n\nexport interface XAiContextType extends Required<ChatbotMessageFields> {\n client: AiClient | null;\n token: string;\n loading: boolean;\n error: string | null;\n // ...其它全局配置\n}\n\nexport const XAiContext = React.createContext<XAiContextType | null>(null);\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAiC;AAO1B,IAAK,YAAL,kBAAKA,eAAL;AACL,EAAAA,WAAA,oBAAiB;AACjB,EAAAA,WAAA,iBAAc;AACd,EAAAA,WAAA,mBAAgB;AAChB,EAAAA,WAAA,eAAY;AAJF,SAAAA;AAAA,GAAA;AAwDL,IAAM,aAAa,aAAAC,QAAM,cAAqC,IAAI;",
|
|
6
6
|
"names": ["ErrorCode", "React"]
|
|
7
7
|
}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { XAiSDKProps, XAiProviderHandle } from "../types/XAiProvider";
|
|
2
3
|
declare class XAiWebSDK {
|
|
3
4
|
container: HTMLElement;
|
|
4
5
|
props: XAiSDKProps;
|
|
5
6
|
root: any;
|
|
7
|
+
providerRef: React.RefObject<XAiProviderHandle | null>;
|
|
6
8
|
onError?: (error: any) => void;
|
|
7
9
|
onSuccess?: (appInfo: any) => void;
|
|
8
10
|
constructor(container: HTMLElement, props: XAiSDKProps);
|
|
@@ -10,5 +12,12 @@ declare class XAiWebSDK {
|
|
|
10
12
|
unmount(): void;
|
|
11
13
|
static initChatbot(props: XAiSDKProps): XAiWebSDK;
|
|
12
14
|
static create(props: XAiSDKProps): XAiWebSDK;
|
|
15
|
+
getData(): {
|
|
16
|
+
appInfo: any;
|
|
17
|
+
messages: import("../types").Messages[] | undefined;
|
|
18
|
+
};
|
|
19
|
+
chat(text: string): void;
|
|
20
|
+
stop(): void;
|
|
21
|
+
reChat(): void;
|
|
13
22
|
}
|
|
14
23
|
export default XAiWebSDK;
|
|
@@ -38,6 +38,7 @@ var import_XAiProvider = __toESM(require("../components/XAiProvider"));
|
|
|
38
38
|
var import_XAiChatbot = __toESM(require("../components/XAiChatbot"));
|
|
39
39
|
var XAiWebSDK = class {
|
|
40
40
|
constructor(container, props) {
|
|
41
|
+
this.providerRef = (0, import_react.createRef)();
|
|
41
42
|
this.container = container;
|
|
42
43
|
this.props = props;
|
|
43
44
|
this.onError = props.onError;
|
|
@@ -48,11 +49,11 @@ var XAiWebSDK = class {
|
|
|
48
49
|
if (import_client.default.createRoot) {
|
|
49
50
|
this.root = import_client.default.createRoot(this.container);
|
|
50
51
|
this.root.render(
|
|
51
|
-
/* @__PURE__ */ import_react.default.createElement(import_XAiProvider.default, { ...this.props }, /* @__PURE__ */ import_react.default.createElement("div", { style: { width: "100%", height: "100%" } }, /* @__PURE__ */ import_react.default.createElement(import_XAiChatbot.default, null)))
|
|
52
|
+
/* @__PURE__ */ import_react.default.createElement(import_XAiProvider.default, { ref: this.providerRef, ...this.props }, /* @__PURE__ */ import_react.default.createElement("div", { style: { width: "100%", height: "100%" } }, /* @__PURE__ */ import_react.default.createElement(import_XAiChatbot.default, null)))
|
|
52
53
|
);
|
|
53
54
|
} else {
|
|
54
55
|
import_client.default.render(
|
|
55
|
-
/* @__PURE__ */ import_react.default.createElement(import_XAiProvider.default, { ...this.props }, /* @__PURE__ */ import_react.default.createElement("div", { style: { width: "100%", height: "100%" } }, /* @__PURE__ */ import_react.default.createElement(import_XAiChatbot.default, null))),
|
|
56
|
+
/* @__PURE__ */ import_react.default.createElement(import_XAiProvider.default, { ref: this.providerRef, ...this.props }, /* @__PURE__ */ import_react.default.createElement("div", { style: { width: "100%", height: "100%" } }, /* @__PURE__ */ import_react.default.createElement(import_XAiChatbot.default, null))),
|
|
56
57
|
this.container
|
|
57
58
|
);
|
|
58
59
|
}
|
|
@@ -91,6 +92,26 @@ var XAiWebSDK = class {
|
|
|
91
92
|
static create(props) {
|
|
92
93
|
return this.initChatbot(props);
|
|
93
94
|
}
|
|
95
|
+
// ————对外暴露的方法————
|
|
96
|
+
getData() {
|
|
97
|
+
var _a, _b;
|
|
98
|
+
return {
|
|
99
|
+
appInfo: (_a = this.providerRef.current) == null ? void 0 : _a.getAppInfo(),
|
|
100
|
+
messages: (_b = this.providerRef.current) == null ? void 0 : _b.getMessages()
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
chat(text) {
|
|
104
|
+
var _a;
|
|
105
|
+
(_a = this.providerRef.current) == null ? void 0 : _a.chat(text);
|
|
106
|
+
}
|
|
107
|
+
stop() {
|
|
108
|
+
var _a;
|
|
109
|
+
(_a = this.providerRef.current) == null ? void 0 : _a.stopChat();
|
|
110
|
+
}
|
|
111
|
+
reChat() {
|
|
112
|
+
var _a;
|
|
113
|
+
(_a = this.providerRef.current) == null ? void 0 : _a.reChat();
|
|
114
|
+
}
|
|
94
115
|
};
|
|
95
116
|
window.XAiWebSDK = XAiWebSDK;
|
|
96
117
|
var umdEntry_default = XAiWebSDK;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/utils/umdEntry.tsx"],
|
|
4
|
-
"sourcesContent": ["import React from 'react';\nimport ReactDOM from 'react-dom/client';\nimport { XAiSDKProps } from '@/types/XAiProvider';\nimport XAiProvider from '@/components/XAiProvider';\nimport XAiChatbot from '../components/XAiChatbot';\n\nclass XAiWebSDK {\n container: HTMLElement;\n\n props: XAiSDKProps;\n\n root: any;\n\n onError?: (error: any) => void;\n\n onSuccess?: (appInfo: any) => void;\n\n constructor(container: HTMLElement, props: XAiSDKProps) {\n this.container = container;\n this.props = props;\n this.onError = props.onError;\n this.onSuccess = props.onSuccess;\n this.mount();\n }\n\n mount() {\n if (ReactDOM.createRoot) {\n this.root = ReactDOM.createRoot(this.container);\n this.root.render(\n <XAiProvider {...this.props}>\n <div style={{ width: '100%', height: '100%' }}>\n <XAiChatbot />\n </div>\n </XAiProvider>,\n );\n } else {\n // @ts-ignore\n ReactDOM.render(\n <XAiProvider {...this.props}>\n <div style={{ width: '100%', height: '100%' }}>\n <XAiChatbot />\n </div>\n </XAiProvider>,\n this.container,\n );\n }\n }\n\n unmount() {\n if (this.root && this.root.unmount) {\n this.root.unmount();\n }\n }\n\n // 支持 Coze 风格的语法:new XAiWebSDK.initChatbot()\n static initChatbot(props: XAiSDKProps): XAiWebSDK {\n let container: HTMLElement;\n\n // 检查是否有指定的 componentProps.id\n if (props.componentProps?.id) {\n const existingContainer = document.getElementById(props.componentProps.id);\n if (existingContainer) {\n container = existingContainer;\n } else {\n // 如果指定的 ID 不存在,创建新元素\n container = document.createElement('div');\n container.id = props.componentProps.id;\n }\n } else {\n // 没有指定 ID,创建默认容器\n container = document.createElement('div');\n container.id = 'xai-chatbot-container';\n }\n\n // 设置容器样式 - 将除了 id 以外的所有属性都应用到容器\n if (props.componentProps) {\n const { id, ...styleProps } = props.componentProps;\n Object.assign(container.style, styleProps);\n }\n\n // 如果容器不在 DOM 中,添加到 body\n if (!container.parentNode) {\n document.body.appendChild(container);\n }\n\n return new XAiWebSDK(container, props);\n }\n\n // 兼容旧版本的静态方法\n static create(props: XAiSDKProps): XAiWebSDK {\n return this.initChatbot(props);\n }\n}\n\n// 兼容 window 方式,也支持 new\n// @ts-ignore\nwindow.XAiWebSDK = XAiWebSDK;\n\n// 支持 ESModule/UMD 直接 import\nexport default XAiWebSDK;\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,
|
|
4
|
+
"sourcesContent": ["import React, { createRef } from 'react';\nimport ReactDOM from 'react-dom/client';\nimport { XAiSDKProps, XAiProviderHandle } from '@/types/XAiProvider';\nimport XAiProvider from '@/components/XAiProvider';\nimport XAiChatbot from '../components/XAiChatbot';\n\nclass XAiWebSDK {\n container: HTMLElement;\n\n props: XAiSDKProps;\n\n root: any;\n\n providerRef = createRef<XAiProviderHandle>();\n\n onError?: (error: any) => void;\n\n onSuccess?: (appInfo: any) => void;\n\n constructor(container: HTMLElement, props: XAiSDKProps) {\n this.container = container;\n this.props = props;\n this.onError = props.onError;\n this.onSuccess = props.onSuccess;\n this.mount();\n }\n\n mount() {\n if (ReactDOM.createRoot) {\n this.root = ReactDOM.createRoot(this.container);\n this.root.render(\n <XAiProvider ref={this.providerRef} {...this.props}>\n <div style={{ width: '100%', height: '100%' }}>\n <XAiChatbot />\n </div>\n </XAiProvider>,\n );\n } else {\n // @ts-ignore\n ReactDOM.render(\n <XAiProvider ref={this.providerRef} {...this.props}>\n <div style={{ width: '100%', height: '100%' }}>\n <XAiChatbot />\n </div>\n </XAiProvider>,\n this.container,\n );\n }\n }\n\n unmount() {\n if (this.root && this.root.unmount) {\n this.root.unmount();\n }\n }\n\n // 支持 Coze 风格的语法:new XAiWebSDK.initChatbot()\n static initChatbot(props: XAiSDKProps): XAiWebSDK {\n let container: HTMLElement;\n\n // 检查是否有指定的 componentProps.id\n if (props.componentProps?.id) {\n const existingContainer = document.getElementById(props.componentProps.id);\n if (existingContainer) {\n container = existingContainer;\n } else {\n // 如果指定的 ID 不存在,创建新元素\n container = document.createElement('div');\n container.id = props.componentProps.id;\n }\n } else {\n // 没有指定 ID,创建默认容器\n container = document.createElement('div');\n container.id = 'xai-chatbot-container';\n }\n\n // 设置容器样式 - 将除了 id 以外的所有属性都应用到容器\n if (props.componentProps) {\n const { id, ...styleProps } = props.componentProps;\n Object.assign(container.style, styleProps);\n }\n\n // 如果容器不在 DOM 中,添加到 body\n if (!container.parentNode) {\n document.body.appendChild(container);\n }\n\n return new XAiWebSDK(container, props);\n }\n\n // 兼容旧版本的静态方法\n static create(props: XAiSDKProps): XAiWebSDK {\n return this.initChatbot(props);\n }\n\n // ————对外暴露的方法————\n getData() {\n return {\n appInfo: this.providerRef.current?.getAppInfo(),\n messages: this.providerRef.current?.getMessages(),\n };\n }\n\n chat(text: string) {\n this.providerRef.current?.chat(text);\n }\n\n stop() {\n this.providerRef.current?.stopChat();\n }\n\n reChat() {\n this.providerRef.current?.reChat();\n }\n}\n\n// 兼容 window 方式,也支持 new\n// @ts-ignore\nwindow.XAiWebSDK = XAiWebSDK;\n\n// 支持 ESModule/UMD 直接 import\nexport default XAiWebSDK;\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAiC;AACjC,oBAAqB;AAErB,yBAAwB;AACxB,wBAAuB;AAEvB,IAAM,YAAN,MAAgB;AAAA,EAad,YAAY,WAAwB,OAAoB;AANxD,2BAAc,wBAA6B;AAOzC,SAAK,YAAY;AACjB,SAAK,QAAQ;AACb,SAAK,UAAU,MAAM;AACrB,SAAK,YAAY,MAAM;AACvB,SAAK,MAAM;AAAA,EACb;AAAA,EAEA,QAAQ;AACN,QAAI,cAAAA,QAAS,YAAY;AACvB,WAAK,OAAO,cAAAA,QAAS,WAAW,KAAK,SAAS;AAC9C,WAAK,KAAK;AAAA,QACR,6BAAAC,QAAA,cAAC,mBAAAC,SAAA,EAAY,KAAK,KAAK,aAAc,GAAG,KAAK,SAC3C,6BAAAD,QAAA,cAAC,SAAI,OAAO,EAAE,OAAO,QAAQ,QAAQ,OAAO,KAC1C,6BAAAA,QAAA,cAAC,kBAAAE,SAAA,IAAW,CACd,CACF;AAAA,MACF;AAAA,IACF,OAAO;AAEL,oBAAAH,QAAS;AAAA,QACP,6BAAAC,QAAA,cAAC,mBAAAC,SAAA,EAAY,KAAK,KAAK,aAAc,GAAG,KAAK,SAC3C,6BAAAD,QAAA,cAAC,SAAI,OAAO,EAAE,OAAO,QAAQ,QAAQ,OAAO,KAC1C,6BAAAA,QAAA,cAAC,kBAAAE,SAAA,IAAW,CACd,CACF;AAAA,QACA,KAAK;AAAA,MACP;AAAA,IACF;AAAA,EACF;AAAA,EAEA,UAAU;AACR,QAAI,KAAK,QAAQ,KAAK,KAAK,SAAS;AAClC,WAAK,KAAK,QAAQ;AAAA,IACpB;AAAA,EACF;AAAA;AAAA,EAGA,OAAO,YAAY,OAA+B;AAzDpD;AA0DI,QAAI;AAGJ,SAAI,WAAM,mBAAN,mBAAsB,IAAI;AAC5B,YAAM,oBAAoB,SAAS,eAAe,MAAM,eAAe,EAAE;AACzE,UAAI,mBAAmB;AACrB,oBAAY;AAAA,MACd,OAAO;AAEL,oBAAY,SAAS,cAAc,KAAK;AACxC,kBAAU,KAAK,MAAM,eAAe;AAAA,MACtC;AAAA,IACF,OAAO;AAEL,kBAAY,SAAS,cAAc,KAAK;AACxC,gBAAU,KAAK;AAAA,IACjB;AAGA,QAAI,MAAM,gBAAgB;AACxB,YAAM,EAAE,IAAI,GAAG,WAAW,IAAI,MAAM;AACpC,aAAO,OAAO,UAAU,OAAO,UAAU;AAAA,IAC3C;AAGA,QAAI,CAAC,UAAU,YAAY;AACzB,eAAS,KAAK,YAAY,SAAS;AAAA,IACrC;AAEA,WAAO,IAAI,UAAU,WAAW,KAAK;AAAA,EACvC;AAAA;AAAA,EAGA,OAAO,OAAO,OAA+B;AAC3C,WAAO,KAAK,YAAY,KAAK;AAAA,EAC/B;AAAA;AAAA,EAGA,UAAU;AAhGZ;AAiGI,WAAO;AAAA,MACL,UAAS,UAAK,YAAY,YAAjB,mBAA0B;AAAA,MACnC,WAAU,UAAK,YAAY,YAAjB,mBAA0B;AAAA,IACtC;AAAA,EACF;AAAA,EAEA,KAAK,MAAc;AAvGrB;AAwGI,eAAK,YAAY,YAAjB,mBAA0B,KAAK;AAAA,EACjC;AAAA,EAEA,OAAO;AA3GT;AA4GI,eAAK,YAAY,YAAjB,mBAA0B;AAAA,EAC5B;AAAA,EAEA,SAAS;AA/GX;AAgHI,eAAK,YAAY,YAAjB,mBAA0B;AAAA,EAC5B;AACF;AAIA,OAAO,YAAY;AAGnB,IAAO,mBAAQ;",
|
|
6
6
|
"names": ["ReactDOM", "React", "XAiProvider", "XAiChatbot"]
|
|
7
7
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { XAiProviderProps } from "../../types/XAiProvider";
|
|
3
|
-
declare const XAiProvider: React.
|
|
2
|
+
import { XAiProviderProps, XAiProviderHandle } from "../../types/XAiProvider";
|
|
3
|
+
declare const XAiProvider: React.ForwardRefExoticComponent<XAiProviderProps & React.RefAttributes<XAiProviderHandle>>;
|
|
4
4
|
export default XAiProvider;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React from 'react';
|
|
1
|
+
import React, { forwardRef, useImperativeHandle } from 'react';
|
|
2
2
|
import { message, Divider } from 'antd';
|
|
3
3
|
import { v4 as uuidV4 } from 'uuid';
|
|
4
4
|
import copy from 'copy-to-clipboard';
|
|
@@ -8,7 +8,7 @@ import useAgentGenerator from "../../hooks/useAgentGenerator";
|
|
|
8
8
|
import userIcon from "../../assets/user.png";
|
|
9
9
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
10
10
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
11
|
-
var XAiProvider = function
|
|
11
|
+
var XAiProvider = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
12
12
|
var url = _ref.url,
|
|
13
13
|
token = _ref.token,
|
|
14
14
|
config = _ref.config,
|
|
@@ -36,6 +36,21 @@ var XAiProvider = function XAiProvider(_ref) {
|
|
|
36
36
|
var _ref2 = appInfo || {},
|
|
37
37
|
appName = _ref2.appName,
|
|
38
38
|
icon = _ref2.icon;
|
|
39
|
+
useImperativeHandle(ref, function () {
|
|
40
|
+
return {
|
|
41
|
+
chat: chat,
|
|
42
|
+
stopChat: stopChat,
|
|
43
|
+
reChat: reChat,
|
|
44
|
+
getAppInfo: function getAppInfo() {
|
|
45
|
+
return appInfo;
|
|
46
|
+
},
|
|
47
|
+
getMessages: function getMessages() {
|
|
48
|
+
return messages;
|
|
49
|
+
},
|
|
50
|
+
setMessages: setMessages,
|
|
51
|
+
setCurrentSession: setCurrentSession
|
|
52
|
+
};
|
|
53
|
+
}, [appInfo, messages, chat, stopChat, reChat, setMessages, setCurrentSession]);
|
|
39
54
|
|
|
40
55
|
// 发送消息
|
|
41
56
|
var handleSendMessage = function handleSendMessage(_type, content) {
|
|
@@ -65,14 +80,30 @@ var XAiProvider = function XAiProvider(_ref) {
|
|
|
65
80
|
message.success('复制成功');
|
|
66
81
|
break;
|
|
67
82
|
case 2:
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
return item.id !== id && item.type !== 'SuggestionMessage';
|
|
83
|
+
{
|
|
84
|
+
var idx = messages.findIndex(function (item) {
|
|
85
|
+
return item.id === id;
|
|
72
86
|
});
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
87
|
+
if (idx >= 0) {
|
|
88
|
+
// 删除该条消息及建议类消息
|
|
89
|
+
if (messages.length - idx <= 2) {
|
|
90
|
+
setMessages(function (prev) {
|
|
91
|
+
return prev.filter(function (item) {
|
|
92
|
+
return item.id !== id && item.type !== 'SuggestionMessage';
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
} else {
|
|
96
|
+
// 非最新消息 只删除该条消息
|
|
97
|
+
setMessages(function (prev) {
|
|
98
|
+
return prev.filter(function (item) {
|
|
99
|
+
return item.id !== id;
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
message.success('删除成功');
|
|
104
|
+
}
|
|
105
|
+
break;
|
|
106
|
+
}
|
|
76
107
|
}
|
|
77
108
|
};
|
|
78
109
|
|
|
@@ -141,6 +172,6 @@ var XAiProvider = function XAiProvider(_ref) {
|
|
|
141
172
|
children: children
|
|
142
173
|
})
|
|
143
174
|
});
|
|
144
|
-
};
|
|
175
|
+
});
|
|
145
176
|
export default XAiProvider;
|
|
146
177
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","message","Divider","v4","uuidV4","copy","XProvider","XAiContext","useAgentGenerator","userIcon","jsxs","_jsxs","jsx","_jsx","XAiProvider","_ref","url","token","config","_ref$providerId","providerId","onSuccess","onError","children","_useAgentGenerator","appInfo","chat","stopChat","reChat","messages","loading","setCurrentSession","setMessages","_ref2","appName","icon","handleSendMessage","_type","content","handleClearMessage","handleActions","index","actionData","_ref3","id","_content$text","text","success","
|
|
1
|
+
{"version":3,"names":["React","forwardRef","useImperativeHandle","message","Divider","v4","uuidV4","copy","XProvider","XAiContext","useAgentGenerator","userIcon","jsxs","_jsxs","jsx","_jsx","XAiProvider","_ref","ref","url","token","config","_ref$providerId","providerId","onSuccess","onError","children","_useAgentGenerator","appInfo","chat","stopChat","reChat","messages","loading","setCurrentSession","setMessages","_ref2","appName","icon","getAppInfo","getMessages","handleSendMessage","_type","content","handleClearMessage","handleActions","index","actionData","_ref3","id","_content$text","text","success","idx","findIndex","item","length","prev","filter","type","handleSuggestMessageClick","_item","m","ToolTip","messageData","finalResult","think","find","actionName","_ref4","extra","cost","tokenCount","style","display","alignItems","fontSize","color","flex","paddingRight","undefined","Provider","value","avatar","src","alt","userAvatar","emptyStateImage","emptyStateText","footerTips","error","messageTooltip","onSend","onClear","onStop","onSuggestMessageClick","onMessagesActionsCallback","isInProvider"],"sources":["../../../../src/components/XAiProvider/index.tsx"],"sourcesContent":["import React, { forwardRef, useImperativeHandle } from 'react';\nimport { message, Divider } from 'antd';\nimport { v4 as uuidV4 } from 'uuid';\nimport copy from 'copy-to-clipboard';\nimport { XProvider } from '@ant-design/x';\nimport { XAiContext } from '@/context/AiProviderContext';\nimport { XAiProviderProps, XAiProviderHandle } from '@/types/XAiProvider';\nimport useAgentGenerator from '@/hooks/useAgentGenerator';\nimport userIcon from '@/assets/user.png';\n\nconst XAiProvider = forwardRef<XAiProviderHandle, XAiProviderProps>(({\n url,\n token,\n config,\n providerId = 'defaultId',\n onSuccess,\n onError,\n children,\n}, ref) => {\n // 使用 useAgentGenerator Hook 管理消息状态\n const { appInfo, chat, stopChat, reChat, messages, loading, setCurrentSession, setMessages } = useAgentGenerator({ url, token, config, onError, onSuccess });\n\n const { appName, icon } = appInfo || {};\n\n useImperativeHandle(ref, () => ({\n chat,\n stopChat,\n reChat,\n getAppInfo: () => appInfo,\n getMessages: () => messages,\n setMessages,\n setCurrentSession,\n }), [appInfo, messages, chat, stopChat, reChat, setMessages, setCurrentSession]);\n\n // 发送消息\n const handleSendMessage = (_type: string, content: string) => {\n chat(content);\n };\n\n // 清空消息\n const handleClearMessage = () => {\n stopChat();\n setMessages([]);\n setCurrentSession(uuidV4());\n };\n\n // 工具栏按钮点击\n const handleActions = (index: number, actionData: any) => {\n const { content, id } = actionData || {};\n const { text = '' } = content;\n switch (index) {\n case 0:\n reChat();\n break;\n case 1:\n copy(text);\n message.success('复制成功');\n break;\n case 2: {\n const idx = messages.findIndex((item) => item.id === id);\n if (idx >= 0) {\n // 删除该条消息及建议类消息\n if (messages.length - idx <= 2) {\n setMessages((prev) => prev.filter((item) => item.id !== id && item.type !== 'SuggestionMessage'));\n } else {\n // 非最新消息 只删除该条消息\n setMessages((prev) => prev.filter((item) => item.id !== id));\n }\n message.success('删除成功');\n }\n break;\n }\n }\n };\n\n // 建议消息点击\n const handleSuggestMessageClick = (_item: any, id: string) => {\n setMessages((prev: any[]) => prev.filter((m: any) => m.id !== id));\n };\n\n const ToolTip = (messageData: any) => {\n const finalResult = (messageData?.think || []).find((item: any) => item.actionName === 'FINISHED');\n if (!finalResult) return null;\n const { cost, token: tokenCount } = finalResult.extra || {};\n if (!cost && !token) return null;\n return (\n <div style={{ display: 'flex', alignItems: 'center', fontSize: '12px', color: '#949494', flex: 1, paddingRight: '40px' }}>\n { (cost !== undefined && cost !== null) && <div>{cost}s</div> }\n { tokenCount && <Divider type=\"vertical\" /> }\n { tokenCount && <div>{ tokenCount } tokens</div> }\n </div>\n );\n };\n\n return (\n <XProvider>\n <XAiContext.Provider value={{\n avatar: <img src={icon} alt=\"智能体头像\" />,\n userAvatar: <img src={userIcon} alt=\"用户头像\" />,\n emptyStateImage: icon,\n emptyStateText: appName,\n footerTips: '内容由AI生成,无法确保真实准确,仅供参考',\n providerId,\n token,\n messages,\n loading,\n error: null,\n messageTooltip: ToolTip,\n onSend: handleSendMessage,\n onClear: handleClearMessage,\n onStop: stopChat,\n onSuggestMessageClick: handleSuggestMessageClick,\n onMessagesActionsCallback: handleActions,\n isInProvider: true,\n }}\n >\n {children}\n </XAiContext.Provider>\n </XProvider>\n );\n});\n\nexport default XAiProvider;\n"],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React, { ReactNode } from 'react';
|
|
2
2
|
import { AiClient } from 'src/client/base';
|
|
3
3
|
import type { ChatbotMessageFields } from './XAiChatbot';
|
|
4
|
+
import { Messages } from "./XAiMessage";
|
|
4
5
|
export type ThemeType = 'default';
|
|
5
6
|
export declare enum ErrorCode {
|
|
6
7
|
APP_NOT_ENABLE = "APP_NOT_ENABLE",
|
|
@@ -12,6 +13,14 @@ export interface Error {
|
|
|
12
13
|
code: ErrorCode;
|
|
13
14
|
message: string;
|
|
14
15
|
}
|
|
16
|
+
export interface XAiProviderHandle {
|
|
17
|
+
chat: (content: string) => void;
|
|
18
|
+
stopChat: () => void;
|
|
19
|
+
reChat: () => void;
|
|
20
|
+
getAppInfo: () => any;
|
|
21
|
+
getMessages: () => Messages[];
|
|
22
|
+
setCurrentSession: (id: string) => void;
|
|
23
|
+
}
|
|
15
24
|
export interface XAiProviderProps {
|
|
16
25
|
/** AI 服务地址 */
|
|
17
26
|
url: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","ErrorCode","XAiContext","createContext"],"sources":["../../../src/types/XAiProvider.ts"],"sourcesContent":["// context/ProviderContext.ts\nimport React, { ReactNode } from 'react';\nimport { AiClient } from 'src/client/base';\nimport type { ChatbotMessageFields } from './XAiChatbot';\n\nexport type ThemeType = 'default';\n\nexport enum ErrorCode {\n APP_NOT_ENABLE = 'APP_NOT_ENABLE',\n APP_DELETED = 'APP_DELETED',\n APP_NOT_FOUND = 'APP_NOT_FOUND',\n API_ERROR = 'API_ERROR',\n}\n\nexport interface Error {\n code: ErrorCode;\n message: string;\n}\n\nexport interface XAiProviderProps {\n /** AI 服务地址 */\n url: string;\n /** 认证 token */\n token: string;\n /** 配置信息 */\n config?: any;\n /** Provider 唯一标识,用于区分多个 Provider 实例 */\n providerId?: string;\n /** Token 刷新回调 */\n onRefreshToken?: () => Promise<string>;\n /** 应用无法正常渲染回调 */\n onError?: (error: Error) => void;\n /** 应用正常渲染回调 */\n onSuccess?: (appInfo: any) => void;\n /** 子组件 */\n children: ReactNode;\n}\n\nexport interface XAiSDKProps extends XAiProviderProps {\n theme?: ThemeType;\n componentProps?: {\n id?: string;\n [key: string]: any; // 支持任意 CSS 属性\n };\n}\n\nexport interface XAiContextType extends Required<ChatbotMessageFields> {\n client: AiClient | null;\n token: string;\n loading: boolean;\n error: string | null;\n // ...其它全局配置\n}\n\nexport const XAiContext = React.createContext<XAiContextType | null>(null);\n"],"mappings":"AAAA;AACA,OAAOA,KAAK,MAAqB,OAAO;
|
|
1
|
+
{"version":3,"names":["React","ErrorCode","XAiContext","createContext"],"sources":["../../../src/types/XAiProvider.ts"],"sourcesContent":["// context/ProviderContext.ts\nimport React, { ReactNode } from 'react';\nimport { AiClient } from 'src/client/base';\nimport type { ChatbotMessageFields } from './XAiChatbot';\nimport { Messages } from '@/types/XAiMessage';\n\nexport type ThemeType = 'default';\n\nexport enum ErrorCode {\n APP_NOT_ENABLE = 'APP_NOT_ENABLE',\n APP_DELETED = 'APP_DELETED',\n APP_NOT_FOUND = 'APP_NOT_FOUND',\n API_ERROR = 'API_ERROR',\n}\n\nexport interface Error {\n code: ErrorCode;\n message: string;\n}\n\nexport interface XAiProviderHandle {\n chat: (content: string) => void;\n stopChat: () => void;\n reChat: () => void;\n getAppInfo: () => any;\n getMessages: () => Messages[];\n setCurrentSession: (id: string) => void;\n}\n\nexport interface XAiProviderProps {\n /** AI 服务地址 */\n url: string;\n /** 认证 token */\n token: string;\n /** 配置信息 */\n config?: any;\n /** Provider 唯一标识,用于区分多个 Provider 实例 */\n providerId?: string;\n /** Token 刷新回调 */\n onRefreshToken?: () => Promise<string>;\n /** 应用无法正常渲染回调 */\n onError?: (error: Error) => void;\n /** 应用正常渲染回调 */\n onSuccess?: (appInfo: any) => void;\n /** 子组件 */\n children: ReactNode;\n}\n\nexport interface XAiSDKProps extends XAiProviderProps {\n theme?: ThemeType;\n componentProps?: {\n id?: string;\n [key: string]: any; // 支持任意 CSS 属性\n };\n}\n\nexport interface XAiContextType extends Required<ChatbotMessageFields> {\n client: AiClient | null;\n token: string;\n loading: boolean;\n error: string | null;\n // ...其它全局配置\n}\n\nexport const XAiContext = React.createContext<XAiContextType | null>(null);\n"],"mappings":"AAAA;AACA,OAAOA,KAAK,MAAqB,OAAO;AAOxC,WAAYC,SAAS,0BAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAAA,OAATA,SAAS;AAAA;AAwDrB,OAAO,IAAMC,UAAU,gBAAGF,KAAK,CAACG,aAAa,CAAwB,IAAI,CAAC"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
import
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { XAiSDKProps, XAiProviderHandle } from "../types/XAiProvider";
|
|
2
3
|
declare class XAiWebSDK {
|
|
3
4
|
container: HTMLElement;
|
|
4
5
|
props: XAiSDKProps;
|
|
5
6
|
root: any;
|
|
7
|
+
providerRef: React.RefObject<XAiProviderHandle | null>;
|
|
6
8
|
onError?: (error: any) => void;
|
|
7
9
|
onSuccess?: (appInfo: any) => void;
|
|
8
10
|
constructor(container: HTMLElement, props: XAiSDKProps);
|
|
@@ -10,5 +12,12 @@ declare class XAiWebSDK {
|
|
|
10
12
|
unmount(): void;
|
|
11
13
|
static initChatbot(props: XAiSDKProps): XAiWebSDK;
|
|
12
14
|
static create(props: XAiSDKProps): XAiWebSDK;
|
|
15
|
+
getData(): {
|
|
16
|
+
appInfo: any;
|
|
17
|
+
messages: import("../types").Messages[] | undefined;
|
|
18
|
+
};
|
|
19
|
+
chat(text: string): void;
|
|
20
|
+
stop(): void;
|
|
21
|
+
reChat(): void;
|
|
13
22
|
}
|
|
14
23
|
export default XAiWebSDK;
|
|
@@ -4,7 +4,7 @@ import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
|
|
|
4
4
|
import _createClass from "@babel/runtime/helpers/esm/createClass";
|
|
5
5
|
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
6
6
|
var _excluded = ["id"];
|
|
7
|
-
import React from 'react';
|
|
7
|
+
import React, { createRef } from 'react';
|
|
8
8
|
import ReactDOM from 'react-dom/client';
|
|
9
9
|
import XAiProvider from "../components/XAiProvider";
|
|
10
10
|
import XAiChatbot from "../components/XAiChatbot";
|
|
@@ -15,6 +15,7 @@ var XAiWebSDK = /*#__PURE__*/function () {
|
|
|
15
15
|
_defineProperty(this, "container", void 0);
|
|
16
16
|
_defineProperty(this, "props", void 0);
|
|
17
17
|
_defineProperty(this, "root", void 0);
|
|
18
|
+
_defineProperty(this, "providerRef", /*#__PURE__*/createRef());
|
|
18
19
|
_defineProperty(this, "onError", void 0);
|
|
19
20
|
_defineProperty(this, "onSuccess", void 0);
|
|
20
21
|
this.container = container;
|
|
@@ -28,7 +29,9 @@ var XAiWebSDK = /*#__PURE__*/function () {
|
|
|
28
29
|
value: function mount() {
|
|
29
30
|
if (ReactDOM.createRoot) {
|
|
30
31
|
this.root = ReactDOM.createRoot(this.container);
|
|
31
|
-
this.root.render( /*#__PURE__*/_jsx(XAiProvider, _objectSpread(_objectSpread({
|
|
32
|
+
this.root.render( /*#__PURE__*/_jsx(XAiProvider, _objectSpread(_objectSpread({
|
|
33
|
+
ref: this.providerRef
|
|
34
|
+
}, this.props), {}, {
|
|
32
35
|
children: /*#__PURE__*/_jsx("div", {
|
|
33
36
|
style: {
|
|
34
37
|
width: '100%',
|
|
@@ -39,7 +42,9 @@ var XAiWebSDK = /*#__PURE__*/function () {
|
|
|
39
42
|
})));
|
|
40
43
|
} else {
|
|
41
44
|
// @ts-ignore
|
|
42
|
-
ReactDOM.render( /*#__PURE__*/_jsx(XAiProvider, _objectSpread(_objectSpread({
|
|
45
|
+
ReactDOM.render( /*#__PURE__*/_jsx(XAiProvider, _objectSpread(_objectSpread({
|
|
46
|
+
ref: this.providerRef
|
|
47
|
+
}, this.props), {}, {
|
|
43
48
|
children: /*#__PURE__*/_jsx("div", {
|
|
44
49
|
style: {
|
|
45
50
|
width: '100%',
|
|
@@ -59,6 +64,35 @@ var XAiWebSDK = /*#__PURE__*/function () {
|
|
|
59
64
|
}
|
|
60
65
|
|
|
61
66
|
// 支持 Coze 风格的语法:new XAiWebSDK.initChatbot()
|
|
67
|
+
}, {
|
|
68
|
+
key: "getData",
|
|
69
|
+
value:
|
|
70
|
+
// ————对外暴露的方法————
|
|
71
|
+
function getData() {
|
|
72
|
+
var _this$providerRef$cur, _this$providerRef$cur2;
|
|
73
|
+
return {
|
|
74
|
+
appInfo: (_this$providerRef$cur = this.providerRef.current) === null || _this$providerRef$cur === void 0 ? void 0 : _this$providerRef$cur.getAppInfo(),
|
|
75
|
+
messages: (_this$providerRef$cur2 = this.providerRef.current) === null || _this$providerRef$cur2 === void 0 ? void 0 : _this$providerRef$cur2.getMessages()
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
}, {
|
|
79
|
+
key: "chat",
|
|
80
|
+
value: function chat(text) {
|
|
81
|
+
var _this$providerRef$cur3;
|
|
82
|
+
(_this$providerRef$cur3 = this.providerRef.current) === null || _this$providerRef$cur3 === void 0 || _this$providerRef$cur3.chat(text);
|
|
83
|
+
}
|
|
84
|
+
}, {
|
|
85
|
+
key: "stop",
|
|
86
|
+
value: function stop() {
|
|
87
|
+
var _this$providerRef$cur4;
|
|
88
|
+
(_this$providerRef$cur4 = this.providerRef.current) === null || _this$providerRef$cur4 === void 0 || _this$providerRef$cur4.stopChat();
|
|
89
|
+
}
|
|
90
|
+
}, {
|
|
91
|
+
key: "reChat",
|
|
92
|
+
value: function reChat() {
|
|
93
|
+
var _this$providerRef$cur5;
|
|
94
|
+
(_this$providerRef$cur5 = this.providerRef.current) === null || _this$providerRef$cur5 === void 0 || _this$providerRef$cur5.reChat();
|
|
95
|
+
}
|
|
62
96
|
}], [{
|
|
63
97
|
key: "initChatbot",
|
|
64
98
|
value: function initChatbot(props) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","ReactDOM","XAiProvider","XAiChatbot","jsx","_jsx","XAiWebSDK","container","props","_classCallCheck","_defineProperty","onError","onSuccess","mount","_createClass","key","value","createRoot","root","render","_objectSpread","children","style","width","height","unmount","initChatbot","_props$componentProps","componentProps","id","existingContainer","document","getElementById","createElement","_props$componentProps2","styleProps","_objectWithoutProperties","_excluded","Object","assign","parentNode","body","appendChild","create","window"],"sources":["../../../src/utils/umdEntry.tsx"],"sourcesContent":["import React from 'react';\nimport ReactDOM from 'react-dom/client';\nimport { XAiSDKProps } from '@/types/XAiProvider';\nimport XAiProvider from '@/components/XAiProvider';\nimport XAiChatbot from '../components/XAiChatbot';\n\nclass XAiWebSDK {\n container: HTMLElement;\n\n props: XAiSDKProps;\n\n root: any;\n\n onError?: (error: any) => void;\n\n onSuccess?: (appInfo: any) => void;\n\n constructor(container: HTMLElement, props: XAiSDKProps) {\n this.container = container;\n this.props = props;\n this.onError = props.onError;\n this.onSuccess = props.onSuccess;\n this.mount();\n }\n\n mount() {\n if (ReactDOM.createRoot) {\n this.root = ReactDOM.createRoot(this.container);\n this.root.render(\n <XAiProvider {...this.props}>\n <div style={{ width: '100%', height: '100%' }}>\n <XAiChatbot />\n </div>\n </XAiProvider>,\n );\n } else {\n // @ts-ignore\n ReactDOM.render(\n <XAiProvider {...this.props}>\n <div style={{ width: '100%', height: '100%' }}>\n <XAiChatbot />\n </div>\n </XAiProvider>,\n this.container,\n );\n }\n }\n\n unmount() {\n if (this.root && this.root.unmount) {\n this.root.unmount();\n }\n }\n\n // 支持 Coze 风格的语法:new XAiWebSDK.initChatbot()\n static initChatbot(props: XAiSDKProps): XAiWebSDK {\n let container: HTMLElement;\n\n // 检查是否有指定的 componentProps.id\n if (props.componentProps?.id) {\n const existingContainer = document.getElementById(props.componentProps.id);\n if (existingContainer) {\n container = existingContainer;\n } else {\n // 如果指定的 ID 不存在,创建新元素\n container = document.createElement('div');\n container.id = props.componentProps.id;\n }\n } else {\n // 没有指定 ID,创建默认容器\n container = document.createElement('div');\n container.id = 'xai-chatbot-container';\n }\n\n // 设置容器样式 - 将除了 id 以外的所有属性都应用到容器\n if (props.componentProps) {\n const { id, ...styleProps } = props.componentProps;\n Object.assign(container.style, styleProps);\n }\n\n // 如果容器不在 DOM 中,添加到 body\n if (!container.parentNode) {\n document.body.appendChild(container);\n }\n\n return new XAiWebSDK(container, props);\n }\n\n // 兼容旧版本的静态方法\n static create(props: XAiSDKProps): XAiWebSDK {\n return this.initChatbot(props);\n }\n}\n\n// 兼容 window 方式,也支持 new\n// @ts-ignore\nwindow.XAiWebSDK = XAiWebSDK;\n\n// 支持 ESModule/UMD 直接 import\nexport default XAiWebSDK;\n"],"mappings":";;;;;;AAAA,OAAOA,KAAK,
|
|
1
|
+
{"version":3,"names":["React","createRef","ReactDOM","XAiProvider","XAiChatbot","jsx","_jsx","XAiWebSDK","container","props","_classCallCheck","_defineProperty","onError","onSuccess","mount","_createClass","key","value","createRoot","root","render","_objectSpread","ref","providerRef","children","style","width","height","unmount","getData","_this$providerRef$cur","_this$providerRef$cur2","appInfo","current","getAppInfo","messages","getMessages","chat","text","_this$providerRef$cur3","stop","_this$providerRef$cur4","stopChat","reChat","_this$providerRef$cur5","initChatbot","_props$componentProps","componentProps","id","existingContainer","document","getElementById","createElement","_props$componentProps2","styleProps","_objectWithoutProperties","_excluded","Object","assign","parentNode","body","appendChild","create","window"],"sources":["../../../src/utils/umdEntry.tsx"],"sourcesContent":["import React, { createRef } from 'react';\nimport ReactDOM from 'react-dom/client';\nimport { XAiSDKProps, XAiProviderHandle } from '@/types/XAiProvider';\nimport XAiProvider from '@/components/XAiProvider';\nimport XAiChatbot from '../components/XAiChatbot';\n\nclass XAiWebSDK {\n container: HTMLElement;\n\n props: XAiSDKProps;\n\n root: any;\n\n providerRef = createRef<XAiProviderHandle>();\n\n onError?: (error: any) => void;\n\n onSuccess?: (appInfo: any) => void;\n\n constructor(container: HTMLElement, props: XAiSDKProps) {\n this.container = container;\n this.props = props;\n this.onError = props.onError;\n this.onSuccess = props.onSuccess;\n this.mount();\n }\n\n mount() {\n if (ReactDOM.createRoot) {\n this.root = ReactDOM.createRoot(this.container);\n this.root.render(\n <XAiProvider ref={this.providerRef} {...this.props}>\n <div style={{ width: '100%', height: '100%' }}>\n <XAiChatbot />\n </div>\n </XAiProvider>,\n );\n } else {\n // @ts-ignore\n ReactDOM.render(\n <XAiProvider ref={this.providerRef} {...this.props}>\n <div style={{ width: '100%', height: '100%' }}>\n <XAiChatbot />\n </div>\n </XAiProvider>,\n this.container,\n );\n }\n }\n\n unmount() {\n if (this.root && this.root.unmount) {\n this.root.unmount();\n }\n }\n\n // 支持 Coze 风格的语法:new XAiWebSDK.initChatbot()\n static initChatbot(props: XAiSDKProps): XAiWebSDK {\n let container: HTMLElement;\n\n // 检查是否有指定的 componentProps.id\n if (props.componentProps?.id) {\n const existingContainer = document.getElementById(props.componentProps.id);\n if (existingContainer) {\n container = existingContainer;\n } else {\n // 如果指定的 ID 不存在,创建新元素\n container = document.createElement('div');\n container.id = props.componentProps.id;\n }\n } else {\n // 没有指定 ID,创建默认容器\n container = document.createElement('div');\n container.id = 'xai-chatbot-container';\n }\n\n // 设置容器样式 - 将除了 id 以外的所有属性都应用到容器\n if (props.componentProps) {\n const { id, ...styleProps } = props.componentProps;\n Object.assign(container.style, styleProps);\n }\n\n // 如果容器不在 DOM 中,添加到 body\n if (!container.parentNode) {\n document.body.appendChild(container);\n }\n\n return new XAiWebSDK(container, props);\n }\n\n // 兼容旧版本的静态方法\n static create(props: XAiSDKProps): XAiWebSDK {\n return this.initChatbot(props);\n }\n\n // ————对外暴露的方法————\n getData() {\n return {\n appInfo: this.providerRef.current?.getAppInfo(),\n messages: this.providerRef.current?.getMessages(),\n };\n }\n\n chat(text: string) {\n this.providerRef.current?.chat(text);\n }\n\n stop() {\n this.providerRef.current?.stopChat();\n }\n\n reChat() {\n this.providerRef.current?.reChat();\n }\n}\n\n// 兼容 window 方式,也支持 new\n// @ts-ignore\nwindow.XAiWebSDK = XAiWebSDK;\n\n// 支持 ESModule/UMD 直接 import\nexport default XAiWebSDK;\n"],"mappings":"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"}
|