@ai-group/chat-sdk 2.1.11 → 2.1.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/dist/cjs/components/XAdkChatbot/components/FunctionCallRender/index.d.ts +1 -1
  2. package/dist/cjs/components/XAdkChatbot/components/FunctionCallRender/index.js +41 -5
  3. package/dist/cjs/components/XAdkChatbot/components/FunctionCallRender/index.js.map +2 -2
  4. package/dist/cjs/components/XAdkChatbot/components/FunctionCallRender/styles.d.ts +1 -0
  5. package/dist/cjs/components/XAdkChatbot/components/FunctionCallRender/styles.js +14 -3
  6. package/dist/cjs/components/XAdkChatbot/components/FunctionCallRender/styles.js.map +2 -2
  7. package/dist/cjs/components/XAdkChatbot/index.d.ts +1 -1
  8. package/dist/cjs/components/XAdkChatbot/index.js +30 -13
  9. package/dist/cjs/components/XAdkChatbot/index.js.map +3 -3
  10. package/dist/cjs/components/XAdkWebProvider/XAdkWebProvider.stories.d.ts +2 -2
  11. package/dist/cjs/components/XAdkWebProvider/XAdkWebProvider.stories.js +25 -7
  12. package/dist/cjs/components/XAdkWebProvider/XAdkWebProvider.stories.js.map +2 -2
  13. package/dist/cjs/components/XAiProvider/XAiProvider.stories.js +3 -3
  14. package/dist/cjs/components/XAiProvider/XAiProvider.stories.js.map +1 -1
  15. package/dist/cjs/components/XAiThoughtChain/XAiThoughtChain.stories.d.ts +6 -0
  16. package/dist/cjs/components/XAiThoughtChain/XAiThoughtChain.stories.js +180 -0
  17. package/dist/cjs/components/XAiThoughtChain/XAiThoughtChain.stories.js.map +7 -0
  18. package/dist/cjs/components/XAiThoughtChain/index.d.ts +4 -0
  19. package/dist/cjs/components/XAiThoughtChain/index.js +155 -0
  20. package/dist/cjs/components/XAiThoughtChain/index.js.map +7 -0
  21. package/dist/cjs/components/XAiThoughtChain/styles.d.ts +60 -0
  22. package/dist/cjs/components/XAiThoughtChain/styles.js +195 -0
  23. package/dist/cjs/components/XAiThoughtChain/styles.js.map +7 -0
  24. package/dist/cjs/hooks/useADKChat.d.ts +2 -2
  25. package/dist/cjs/hooks/useADKChat.js +235 -181
  26. package/dist/cjs/hooks/useADKChat.js.map +2 -2
  27. package/dist/cjs/types/XAdkProvider.d.ts +6 -0
  28. package/dist/cjs/types/XAdkProvider.js.map +1 -1
  29. package/dist/cjs/types/XAiThoughtChain.d.ts +25 -0
  30. package/dist/cjs/types/XAiThoughtChain.js +18 -0
  31. package/dist/cjs/types/XAiThoughtChain.js.map +7 -0
  32. package/dist/cjs/types/index.d.ts +9 -8
  33. package/dist/cjs/types/index.js +2 -0
  34. package/dist/cjs/types/index.js.map +2 -2
  35. package/dist/cjs/utils/index.d.ts +1 -0
  36. package/dist/cjs/utils/index.js +7 -0
  37. package/dist/cjs/utils/index.js.map +2 -2
  38. package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/index.d.ts +1 -1
  39. package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/index.js +17 -15
  40. package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/index.js.map +1 -1
  41. package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/styles.d.ts +1 -0
  42. package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/styles.js +7 -6
  43. package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/styles.js.map +1 -1
  44. package/dist/esm/components/XAdkChatbot/index.d.ts +1 -1
  45. package/dist/esm/components/XAdkChatbot/index.js +20 -18
  46. package/dist/esm/components/XAdkChatbot/index.js.map +1 -1
  47. package/dist/esm/components/XAdkWebProvider/XAdkWebProvider.stories.d.ts +2 -2
  48. package/dist/esm/components/XAdkWebProvider/XAdkWebProvider.stories.js +45 -39
  49. package/dist/esm/components/XAdkWebProvider/XAdkWebProvider.stories.js.map +1 -1
  50. package/dist/esm/components/XAiProvider/XAiProvider.stories.js +3 -3
  51. package/dist/esm/components/XAiProvider/XAiProvider.stories.js.map +1 -1
  52. package/dist/esm/components/XAiThoughtChain/XAiThoughtChain.stories.d.ts +6 -0
  53. package/dist/esm/components/XAiThoughtChain/XAiThoughtChain.stories.js +159 -0
  54. package/dist/esm/components/XAiThoughtChain/XAiThoughtChain.stories.js.map +1 -0
  55. package/dist/esm/components/XAiThoughtChain/index.d.ts +4 -0
  56. package/dist/esm/components/XAiThoughtChain/index.js +180 -0
  57. package/dist/esm/components/XAiThoughtChain/index.js.map +1 -0
  58. package/dist/esm/components/XAiThoughtChain/styles.d.ts +60 -0
  59. package/dist/esm/components/XAiThoughtChain/styles.js +40 -0
  60. package/dist/esm/components/XAiThoughtChain/styles.js.map +1 -0
  61. package/dist/esm/hooks/useADKChat.d.ts +2 -2
  62. package/dist/esm/hooks/useADKChat.js +68 -58
  63. package/dist/esm/hooks/useADKChat.js.map +1 -1
  64. package/dist/esm/types/XAdkProvider.d.ts +6 -0
  65. package/dist/esm/types/XAdkProvider.js.map +1 -1
  66. package/dist/esm/types/XAiThoughtChain.d.ts +25 -0
  67. package/dist/esm/types/XAiThoughtChain.js +2 -0
  68. package/dist/esm/types/XAiThoughtChain.js.map +1 -0
  69. package/dist/esm/types/index.d.ts +9 -8
  70. package/dist/esm/types/index.js +1 -0
  71. package/dist/esm/types/index.js.map +1 -1
  72. package/dist/esm/utils/index.d.ts +1 -0
  73. package/dist/esm/utils/index.js +4 -0
  74. package/dist/esm/utils/index.js.map +1 -1
  75. package/dist/umd/chat-sdk.min.js +1 -1
  76. package/package.json +13 -15
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import React from "react";
2
2
  import type { IMessage, FunctionCall } from "../../../../types";
3
3
  export interface FunctionCallRenderProps {
4
4
  msg: IMessage;
@@ -37,7 +37,11 @@ var import_icons = require("@ant-design/icons");
37
37
  var import_styles = require("./styles");
38
38
  var import_XAiJsonView = __toESM(require("../../../XAiJsonView"));
39
39
  var import_jsx_runtime = require("react/jsx-runtime");
40
- var FunctionCallRender = ({ msg, showDetail, onConfirm }) => {
40
+ var FunctionCallRender = ({
41
+ msg,
42
+ showDetail,
43
+ onConfirm
44
+ }) => {
41
45
  var _a, _b, _c, _d, _e;
42
46
  const styles = (0, import_styles.useStyles)();
43
47
  const fnCall = msg.functionCall;
@@ -48,17 +52,49 @@ var FunctionCallRender = ({ msg, showDetail, onConfirm }) => {
48
52
  if (msg.role === "bot")
49
53
  return null;
50
54
  const confirmed = (_a = fnRes.response) == null ? void 0 : _a.confirmed;
51
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.wrapper, children: confirmed ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_antd.Alert, { message: "已确认", type: "success", showIcon: true, className: styles.alert }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_antd.Alert, { message: "已取消", type: "error", showIcon: true, className: styles.alert }) }, msg.id);
55
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.wrapper, children: confirmed ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
56
+ import_antd.Alert,
57
+ {
58
+ message: "已确认",
59
+ type: "success",
60
+ showIcon: true,
61
+ className: styles.alert
62
+ }
63
+ ) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
64
+ import_antd.Alert,
65
+ {
66
+ message: "已取消",
67
+ type: "error",
68
+ showIcon: true,
69
+ className: styles.alert
70
+ }
71
+ ) }, msg.id);
52
72
  }
53
73
  const originalFn = (_c = (_b = msg == null ? void 0 : msg.functionCall) == null ? void 0 : _b.args) == null ? void 0 : _c.originalFunctionCall;
54
74
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.wrapper, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.confirm, children: [
55
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "mb-4", children: [
75
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.confirmText, children: [
56
76
  "请确认是否执行工具:",
57
77
  originalFn == null ? void 0 : originalFn.name
58
78
  ] }),
59
79
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_antd.Flex, { justify: "end", gap: 8, 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: "确认" })
80
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
81
+ import_antd.Button,
82
+ {
83
+ type: "default",
84
+ size: "small",
85
+ onClick: () => onConfirm == null ? void 0 : onConfirm(fnCall, false),
86
+ children: "取消"
87
+ }
88
+ ),
89
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
90
+ import_antd.Button,
91
+ {
92
+ type: "primary",
93
+ size: "small",
94
+ onClick: () => onConfirm == null ? void 0 : onConfirm(fnCall, true),
95
+ children: "确认"
96
+ }
97
+ )
62
98
  ] })
63
99
  ] }) }, msg.id);
64
100
  }
@@ -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?: (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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",
4
+ "sourcesContent": ["import React from \"react\";\nimport { Alert, Button, Flex, Form, Popover, Tooltip, Typography } from \"antd\";\nimport {\n CopyOutlined,\n ToolOutlined,\n CheckCircleTwoTone,\n LoadingOutlined,\n UserSwitchOutlined,\n InfoCircleOutlined,\n} 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> = ({\n msg,\n showDetail,\n onConfirm,\n}) => {\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\n message=\"已确认\"\n type=\"success\"\n showIcon\n className={styles.alert}\n />\n ) : (\n <Alert\n message=\"已取消\"\n type=\"error\"\n showIcon\n className={styles.alert}\n />\n )}\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={styles.confirmText}>\n 请确认是否执行工具:{originalFn?.name}\n </div>\n <Flex justify=\"end\" gap={8}>\n <Button\n type=\"default\"\n size=\"small\"\n onClick={() => onConfirm?.(fnCall, false)}\n >\n 取消\n </Button>\n <Button\n type=\"primary\"\n size=\"small\"\n onClick={() => onConfirm?.(fnCall, true)}\n >\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 ) : (\n <LoadingOutlined />\n )}\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
  }
@@ -2,6 +2,7 @@ export declare const useStyles: () => {
2
2
  wrapper: string;
3
3
  fnCall: string;
4
4
  confirm: string;
5
+ confirmText: string;
5
6
  alert: string;
6
7
  } & {
7
8
  w: (width: string | number) => string;
@@ -28,7 +28,7 @@ var import_common = require("../../../../styles/common");
28
28
  var useStyles = (0, import_common.withBasicStyles)(() => ({
29
29
  wrapper: import_css.css`
30
30
  display: flex;
31
- justify-content: flex-start;
31
+ justify-content: flex-end;
32
32
  margin-bottom: 12px;
33
33
  `,
34
34
  fnCall: import_css.css`
@@ -36,15 +36,26 @@ var useStyles = (0, import_common.withBasicStyles)(() => ({
36
36
  align-items: center;
37
37
  gap: 8px;
38
38
  padding: 7px 12px;
39
- border-radius: 24px;
39
+ border-radius: 8px;
40
40
  line-height: 16px;
41
41
  border: 1px solid #e7e7e7;
42
42
  cursor: pointer;
43
+
44
+ &:hover {
45
+ box-shadow: 0 2px 6px rgba(22, 119, 255, 0.15);
46
+ }
43
47
  `,
44
48
  confirm: import_css.css`
45
49
  padding: 12px;
46
50
  border-radius: 12px;
47
- border: 1px solid #e7e7e7;
51
+ background: #fffbe6;
52
+ color: #d48806;
53
+ border: 1px solid #ffe58f;
54
+ max-width: 400px;
55
+ flex: 1;
56
+ `,
57
+ confirmText: import_css.css`
58
+ margin-bottom: 8px;
48
59
  `,
49
60
  alert: import_css.css`
50
61
  line-height: 1;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/components/XAdkChatbot/components/FunctionCallRender/styles.tsx"],
4
- "sourcesContent": ["import { css } from '@emotion/css';\nimport { withBasicStyles } from '@/styles/common';\n\nexport const useStyles = withBasicStyles(() => ({\n wrapper: css`\n display: flex;\n justify-content: flex-start;\n margin-bottom: 12px;\n `,\n\n fnCall: css`\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 7px 12px;\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 alert: css`\n line-height: 1;\n border-radius: 24px;\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,EAMT,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWR,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,EAMT,OAAO;AAAA;AAAA;AAAA;AAIT,EAAE;AAEF,IAAO,iBAAQ;",
4
+ "sourcesContent": ["import { css } from \"@emotion/css\";\nimport { withBasicStyles } from \"@/styles/common\";\n\nexport const useStyles = withBasicStyles(() => ({\n wrapper: css`\n display: flex;\n justify-content: flex-end;\n margin-bottom: 12px;\n `,\n\n fnCall: css`\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 7px 12px;\n border-radius: 8px;\n line-height: 16px;\n border: 1px solid #e7e7e7;\n cursor: pointer;\n\n &:hover {\n box-shadow: 0 2px 6px rgba(22, 119, 255, 0.15);\n }\n `,\n\n confirm: css`\n padding: 12px;\n border-radius: 12px;\n background: #fffbe6;\n color: #d48806;\n border: 1px solid #ffe58f;\n max-width: 400px;\n flex: 1;\n `,\n\n confirmText: css`\n margin-bottom: 8px;\n `,\n\n alert: css`\n line-height: 1;\n border-radius: 24px;\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,EAMT,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeR,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUT,aAAa;AAAA;AAAA;AAAA,EAIb,OAAO;AAAA;AAAA;AAAA;AAIT,EAAE;AAEF,IAAO,iBAAQ;",
6
6
  "names": []
7
7
  }
@@ -1,4 +1,4 @@
1
- import React from 'react';
1
+ import React from "react";
2
2
  import type { XAdkChatbotProps } from "../../types";
3
3
  declare const XAdkChatbot: React.FC<XAdkChatbotProps>;
4
4
  export default XAdkChatbot;
@@ -124,7 +124,7 @@ var XAdkChatbot = ({
124
124
  }, [messages]);
125
125
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.wrapper, children: [
126
126
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.list, ref: listRef, children: [
127
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.prologue, children: prologue }),
127
+ prologue && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.prologue, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_MarkdownRender.default, { text: prologue }) }),
128
128
  messages.map((msg, i) => {
129
129
  if (msg.role === "user") {
130
130
  if (msg.text) {
@@ -141,29 +141,46 @@ var XAdkChatbot = ({
141
141
  if (msg.text) {
142
142
  if (msg.thought) {
143
143
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.botMsg, children: [
144
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
145
- import_ThinkRender.default,
146
- {
147
- msg,
148
- loading: isLoading
149
- }
150
- ),
151
- !isLoading && (footer == null ? void 0 : footer({ message: msg, isLastMsg: isLast, isLastBotMsg }))
144
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_ThinkRender.default, { msg, loading: isLoading }),
145
+ !isLoading && (footer == null ? void 0 : footer({
146
+ message: msg,
147
+ isLastMsg: isLast,
148
+ isLastBotMsg
149
+ }))
152
150
  ] }, `${msg.id}-${i}`);
153
151
  }
154
152
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.botMsg, children: [
155
153
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_MarkdownRender.default, { text: msg.text }),
156
- !isLoading && (footer == null ? void 0 : footer({ message: msg, isLastMsg: isLast, isLastBotMsg }))
154
+ !isLoading && (footer == null ? void 0 : footer({
155
+ message: msg,
156
+ isLastMsg: isLast,
157
+ isLastBotMsg
158
+ }))
157
159
  ] }, `${msg.id}-${i}`);
158
160
  }
159
161
  const fnCall = msg.functionCall;
160
162
  if (fnCall) {
161
163
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.botMsg, children: [
162
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_FunctionCallRender.default, { msg, showDetail: showFnCallDetail, onConfirm }),
163
- !isLoading && (footer == null ? void 0 : footer({ message: msg, isLastMsg: isLast, isLastBotMsg }))
164
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
165
+ import_FunctionCallRender.default,
166
+ {
167
+ msg,
168
+ showDetail: showFnCallDetail,
169
+ onConfirm
170
+ }
171
+ ),
172
+ !isLoading && (footer == null ? void 0 : footer({
173
+ message: msg,
174
+ isLastMsg: isLast,
175
+ isLastBotMsg
176
+ }))
164
177
  ] }, `${msg.id}-${i}`);
165
178
  }
166
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.botMsg, children: !isLoading && (footer == null ? void 0 : footer({ message: msg, isLastMsg: isLast, isLastBotMsg })) }, `${msg.id}-${i}`);
179
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.botMsg, children: !isLoading && (footer == null ? void 0 : footer({
180
+ message: msg,
181
+ isLastMsg: isLast,
182
+ isLastBotMsg
183
+ })) }, `${msg.id}-${i}`);
167
184
  }),
168
185
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { children: suggestions == null ? void 0 : suggestions.map((item) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.suggestion, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.suggestContent, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
169
186
  import_antd.Button,
@@ -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 } 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 style={{ \n whiteSpace: 'normal',\n height: 'auto',\n wordWrap: 'break-word',\n textAlign: 'left',\n padding: '4px 15px',\n lineHeight: '1.5'\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"]
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\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) <=\n 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 {prologue && (\n <div className={styles.prologue}>\n <MarkdownRender text={prologue} />\n </div>\n )}\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 =\n 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 msg={msg} loading={isLoading} />\n {!isLoading &&\n footer?.({\n message: msg as IMessage,\n isLastMsg: isLast,\n isLastBotMsg,\n })}\n </div>\n );\n }\n return (\n <div key={`${msg.id}-${i}`} className={styles.botMsg}>\n <MarkdownRender text={msg.text} />\n {!isLoading &&\n footer?.({\n message: msg as IMessage,\n isLastMsg: isLast,\n isLastBotMsg,\n })}\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\n msg={msg}\n showDetail={showFnCallDetail}\n onConfirm={onConfirm}\n />\n {!isLoading &&\n footer?.({\n message: msg as IMessage,\n isLastMsg: isLast,\n isLastBotMsg,\n })}\n </div>\n );\n }\n return (\n <div key={`${msg.id}-${i}`} className={styles.botMsg}>\n {!isLoading &&\n footer?.({\n message: msg as IMessage,\n isLastMsg: isLast,\n isLastBotMsg,\n })}\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 style={{\n whiteSpace: \"normal\",\n height: \"auto\",\n wordWrap: \"break-word\",\n textAlign: \"left\",\n padding: \"4px 15px\",\n lineHeight: \"1.5\",\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;\n"],
5
+ "mappings": "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",
6
+ "names": ["MarkdownRender", "FunctionCallRender", "ThinkRender", "XAdkSender"]
7
7
  }
@@ -1,5 +1,5 @@
1
- import type { Meta, StoryObj } from '@storybook/react-vite';
2
- import XAdkWebProvider from './index';
1
+ import type { Meta, StoryObj } from "@storybook/react-vite";
2
+ import XAdkWebProvider from "./index";
3
3
  declare const meta: Meta<typeof XAdkWebProvider>;
4
4
  export default meta;
5
5
  type Story = StoryObj<typeof meta>;
@@ -82,7 +82,19 @@ var 单聊天窗口实例 = {
82
82
  }
83
83
  };
84
84
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { style: { display: "flex" }, children: [
85
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style: { display: "flex", flexDirection: "column", gap: "12px", marginRight: "24px", justifyContent: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_antd.Button, { type: "primary", onClick: handleSendMessage, children: "发送消息" }) }),
85
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
86
+ "div",
87
+ {
88
+ style: {
89
+ display: "flex",
90
+ flexDirection: "column",
91
+ gap: "12px",
92
+ marginRight: "24px",
93
+ justifyContent: "center"
94
+ },
95
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_antd.Button, { type: "primary", onClick: handleSendMessage, children: "发送消息" })
96
+ }
97
+ ),
86
98
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style: { maxWidth: "350px", height: "600px" }, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
87
99
  import_index.default,
88
100
  {
@@ -106,8 +118,8 @@ var 携带历史记录实例 = {
106
118
  const providerRef = import_react.default.useRef(null);
107
119
  const handleSendMessage = () => {
108
120
  var _a;
109
- if ((_a = providerRef.current) == null ? void 0 : _a.chat) {
110
- providerRef.current.chat({
121
+ if ((_a = providerRef.current) == null ? void 0 : _a.startChat) {
122
+ providerRef.current.startChat({
111
123
  text: "你好,AI!",
112
124
  // 上传文案
113
125
  files: []
@@ -124,6 +136,10 @@ var 携带历史记录实例 = {
124
136
  console.log(providerRef.current.getMessages());
125
137
  } else if (code === "APP_MESSAGES_INIT_SUCCESS") {
126
138
  console.log(code, data);
139
+ } else if (code === "APP_CONFIG_INIT_SUCCESS") {
140
+ setTimeout(() => {
141
+ handleSendMessage();
142
+ }, 2e3);
127
143
  }
128
144
  };
129
145
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style: { display: "flex" }, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { style: { height: "600px", width: "100vw" }, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
@@ -140,13 +156,15 @@ var 携带历史记录实例 = {
140
156
  },
141
157
  args: {
142
158
  url: "https://m-poc-dev.zaxline.com",
143
- token: "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiVjRTT0htSm8zWmVhNFJOdWc3WFgyQT09Iiwic2NvcGUiOlsiTUZYNVR4bGhlSUtiZWtaSEtvZU9WTmxvIl0sImV4cCI6MTc2ODQ4MDkwNywianRpIjoiMnhuaWlzbG1GV2t5eGw5TVc4ejV6Y2E2SUNrIiwiY2xpZW50X2lkIjoiTUZYNVR4bGhlSUtiZWtaSEtvZU9WTmxvIn0.Xylu0Wlg5pia42fplTAAU98jpr_F-WKZEZtLcpL5wg7r-yjCKsMT53MMRjfiTqj42Ul3jyHZgRruDs_g4EtujOkEHRVvsEEOUCenUsxOE31BVDWVUD1rwWCrOoBPh3JHIjE8dWmpawGcTm9rpXfb-jHAgo0b6fh2mfXuIurzQNtRQM3fmkhlIiSbq4RDK94xEOQHBFMMMkjwLFeJVusnI325D9NRkCiXtgL-iB-6vYtgdkWqTuiVR_rCzXvT0dYSeg8LtJgznc2CWaAHpb2fDTSxzfQv_4-tS_z1jWEX4RfPc9Y30CECPBYAtPEGfR0AEarUe7q1AvM4h_7VtM6rEQ",
159
+ token: "eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iLCJhdWQiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iLCJuYmYiOjE3NzI3MDA1MzcsInVzZXJfaWQiOiJWNFNPSG1KbzNaZWE0Uk51ZzdYWDJBPT0iLCJzY29wZSI6WyIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iXSwiaXNzIjoiaHR0cDovL2htLWF1dGgtc2VydmVyLnhsaW5lLWRldi50ZXN0LnhpbmtlLmJpeiIsImV4cCI6MTc3MjcwNzczNywiaWF0IjoxNzcyNzAwNTM3LCJqdGkiOiJlZWM3NzA2Mi01YmNjLTRlOTgtYTExZC1hOThjN2Q3NmZlZjIiLCJjbGllbnRfaWQiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08ifQ.eDF_7XsgyAehFXTfB-6FcJglLDacEQz-UGLYGuI3lv-QQnSLekK5DvHBBA9T56OZ6DlQLMC3vhtvJV10lQwigWLE-b4fYTM205mhrtcBQFTUu0EBRTm0g_5sItw-0qaR9E6729H4s8Ty8zyst_nwGhxHWGMjg80cZM47UXhzEpL18wr2JDEWZmq7ZrvxFxqGiR2kjHMB1MOqIEIqGdwBmIDWkZus1qOFJzKN2tSd5Rd4hcLW3pdXmcEJZnVQfAwjqUTu5Peq7mSS0jXh_CIie8tJMOBX7-Fy3N10GSuYZSPCm3Aw0SPnRKgqzh2l4_401yw0lbX36QHBrTOxlXu_Zw",
144
160
  config: {
145
- appNo: "MFX5TxlheIKbekZHKoeOVNlo",
161
+ appNo: "3jt2YbDjewVn2PHRKaDfJEgO",
162
+ chatProps: {
163
+ clearBtnShow: false
164
+ },
146
165
  session: {
147
166
  showSessionList: true
148
- },
149
- allowUpload: true
167
+ }
150
168
  },
151
169
  providerId: "demo-provider"
152
170
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/XAdkWebProvider/XAdkWebProvider.stories.tsx"],
4
- "sourcesContent": ["import React from 'react';\nimport type { Meta, StoryObj } from '@storybook/react-vite';\nimport { Button } from 'antd';\nimport XAdkWebProvider from './index';\n\nconst meta: Meta<typeof XAdkWebProvider> = {\n title: 'AI组件/XAdkWebProvider AI容器',\n component: XAdkWebProvider,\n parameters: {\n layout: 'centered',\n docs: {\n description: {\n component: 'AI 聊天机器人容器组件,提供全局上下文和消息管理功能。',\n },\n },\n },\n tags: ['autodocs'],\n argTypes: {\n config: {\n description: '配置信息',\n table: {\n type: {\n summary: 'XAdkWebProviderConfig',\n detail: `{\n appNo?: string; // 应用唯一编号\n }`,\n },\n category: '配置选项',\n },\n },\n },\n // 添加装饰器,确保组件有必要的上下文\n decorators: [\n (Story) => (\n <div style={{ padding: '20px' }}>\n <Story />\n </div>\n ),\n ],\n};\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\n// 使用 Provider 的 XAiChatbot\nexport const 单聊天窗口实例: Story = {\n render: (args) => {\n const providerRef = React.useRef<any>(null);\n\n const handleSendMessage = () => {\n if (providerRef.current?.chat) {\n providerRef.current.chat({ text: '你好,AI!' });\n } else {\n console.log('XAdkWebProvider ref 未准备好或 chat 方法不存在');\n }\n };\n\n return (\n <div style={{ display: 'flex' }}>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '12px', marginRight: '24px', justifyContent: 'center' }}>\n <Button type=\"primary\" onClick={handleSendMessage}>发送消息</Button>\n </div>\n <div style={{ maxWidth: '350px', height: '600px' }}>\n <XAdkWebProvider\n ref={providerRef}\n {...args}\n // onError={(providerError) => console.log(providerError)}\n // onMessage={(data) => console.log(data)}\n >\n </XAdkWebProvider>\n </div>\n </div>\n );\n },\n args: {\n url: 'https://m-poc-dev.zaxline.com',\n token: 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiVjRTT0htSm8zWmVhNFJOdWc3WFgyQT09Iiwic2NvcGUiOlsiTUZYNVR4bGhlSUtiZWtaSEtvZU9WTmxvIl0sImV4cCI6MTc2Nzk1MjM0NywianRpIjoiSHpLMll4cVdjSTA3QWtmOHlsQXYwV0w0aE5jIiwiY2xpZW50X2lkIjoiTUZYNVR4bGhlSUtiZWtaSEtvZU9WTmxvIn0.AjABoyZFxAACkfy-ywLlfaJd6YY0Ir3pBGx_-HzW9di9p_4rnptbFI4adk9pktSVtlLB0cs45SU6uzp6VCJUj9-q-MP8QBqL6i7u2HV9e-kuBJgyIZD4t0PsazpJNu4rDlBAymYzw73ptLPjCwsUkckUz4Xhy1WmR8mpmuG0nuSWzlDlWKiaPgeMhA0Cnp4BV47zplvQ-r60VkarCg9JGHQNmIkQfG3llcjc-ZK4UKVkrFZynXhcCsp1ry7TwfRnwtXwQ1kZXDmeQxWFudhVaHwthraFF-fkHmYZpyTDrZQJY2Rn9nWO59ZHNh3I6-KiKdsNzv8Jl5T_dCUVPj7l3w',\n config: {\n appNo: 'MFX5TxlheIKbekZHKoeOVNlo',\n },\n providerId: 'demo-provider',\n },\n};\n\n\n// 使用 Provider 的 XAiChatbot\nexport const 携带历史记录实例: Story = {\n render: (args) => {\n const providerRef = React.useRef<any>(null);\n\n const handleSendMessage = () => {\n if (providerRef.current?.chat) {\n providerRef.current.chat({\n text: '你好,AI!', // 上传文案\n files: [], // 如果需要上传附件\n });\n } else {\n console.log('XAdkWebProvider ref 未准备好或 chat 方法不存在');\n }\n };\n\n const handleOnEvent = (event: any) => {\n const { code, data } = event;\n console.warn(code);\n if (code === 'SESSION_SWITCH') {\n console.log(providerRef.current.getMessages());\n } else if (code === 'APP_MESSAGES_INIT_SUCCESS') {\n console.log(code, data);\n }\n };\n\n return (\n <div style={{ display: 'flex' }}>\n <div style={{ height: '600px', width: '100vw' }}>\n <XAdkWebProvider\n ref={providerRef}\n {...args}\n onError={(providerError) => console.log(providerError)}\n onSuccess={handleOnEvent}\n onStream={(data) => console.log(data)}\n onEvent={handleOnEvent}\n />\n </div>\n </div>\n );\n },\n args: {\n url: 'https://m-poc-dev.zaxline.com',\n token: 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiVjRTT0htSm8zWmVhNFJOdWc3WFgyQT09Iiwic2NvcGUiOlsiTUZYNVR4bGhlSUtiZWtaSEtvZU9WTmxvIl0sImV4cCI6MTc2ODQ4MDkwNywianRpIjoiMnhuaWlzbG1GV2t5eGw5TVc4ejV6Y2E2SUNrIiwiY2xpZW50X2lkIjoiTUZYNVR4bGhlSUtiZWtaSEtvZU9WTmxvIn0.Xylu0Wlg5pia42fplTAAU98jpr_F-WKZEZtLcpL5wg7r-yjCKsMT53MMRjfiTqj42Ul3jyHZgRruDs_g4EtujOkEHRVvsEEOUCenUsxOE31BVDWVUD1rwWCrOoBPh3JHIjE8dWmpawGcTm9rpXfb-jHAgo0b6fh2mfXuIurzQNtRQM3fmkhlIiSbq4RDK94xEOQHBFMMMkjwLFeJVusnI325D9NRkCiXtgL-iB-6vYtgdkWqTuiVR_rCzXvT0dYSeg8LtJgznc2CWaAHpb2fDTSxzfQv_4-tS_z1jWEX4RfPc9Y30CECPBYAtPEGfR0AEarUe7q1AvM4h_7VtM6rEQ',\n config: {\n appNo: 'MFX5TxlheIKbekZHKoeOVNlo',\n session: {\n showSessionList: true,\n },\n allowUpload: true\n },\n providerId: 'demo-provider',\n },\n};"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import React, { useEffect } from \"react\";\nimport type { Meta, StoryObj } from \"@storybook/react-vite\";\nimport { Button } from \"antd\";\nimport XAdkWebProvider from \"./index\";\n\nconst meta: Meta<typeof XAdkWebProvider> = {\n title: \"AI组件/XAdkWebProvider AI容器\",\n component: XAdkWebProvider,\n parameters: {\n layout: \"centered\",\n docs: {\n description: {\n component: \"AI 聊天机器人容器组件,提供全局上下文和消息管理功能。\",\n },\n },\n },\n tags: [\"autodocs\"],\n argTypes: {\n config: {\n description: \"配置信息\",\n table: {\n type: {\n summary: \"XAdkWebProviderConfig\",\n detail: `{\n appNo?: string; // 应用唯一编号\n }`,\n },\n category: \"配置选项\",\n },\n },\n },\n // 添加装饰器,确保组件有必要的上下文\n decorators: [\n (Story) => (\n <div style={{ padding: \"20px\" }}>\n <Story />\n </div>\n ),\n ],\n};\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\n// 使用 Provider 的 XAiChatbot\nexport const 单聊天窗口实例: Story = {\n render: (args) => {\n const providerRef = React.useRef<any>(null);\n\n const handleSendMessage = () => {\n if (providerRef.current?.chat) {\n providerRef.current.chat({ text: \"你好,AI!\" });\n } else {\n console.log(\"XAdkWebProvider ref 未准备好或 chat 方法不存在\");\n }\n };\n\n return (\n <div style={{ display: \"flex\" }}>\n <div\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"12px\",\n marginRight: \"24px\",\n justifyContent: \"center\",\n }}\n >\n <Button type=\"primary\" onClick={handleSendMessage}>\n 发送消息\n </Button>\n </div>\n <div style={{ maxWidth: \"350px\", height: \"600px\" }}>\n <XAdkWebProvider\n ref={providerRef}\n {...args}\n // onError={(providerError) => console.log(providerError)}\n // onMessage={(data) => console.log(data)}\n ></XAdkWebProvider>\n </div>\n </div>\n );\n },\n args: {\n url: \"https://m-poc-dev.zaxline.com\",\n token:\n \"eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiVjRTT0htSm8zWmVhNFJOdWc3WFgyQT09Iiwic2NvcGUiOlsiTUZYNVR4bGhlSUtiZWtaSEtvZU9WTmxvIl0sImV4cCI6MTc2Nzk1MjM0NywianRpIjoiSHpLMll4cVdjSTA3QWtmOHlsQXYwV0w0aE5jIiwiY2xpZW50X2lkIjoiTUZYNVR4bGhlSUtiZWtaSEtvZU9WTmxvIn0.AjABoyZFxAACkfy-ywLlfaJd6YY0Ir3pBGx_-HzW9di9p_4rnptbFI4adk9pktSVtlLB0cs45SU6uzp6VCJUj9-q-MP8QBqL6i7u2HV9e-kuBJgyIZD4t0PsazpJNu4rDlBAymYzw73ptLPjCwsUkckUz4Xhy1WmR8mpmuG0nuSWzlDlWKiaPgeMhA0Cnp4BV47zplvQ-r60VkarCg9JGHQNmIkQfG3llcjc-ZK4UKVkrFZynXhcCsp1ry7TwfRnwtXwQ1kZXDmeQxWFudhVaHwthraFF-fkHmYZpyTDrZQJY2Rn9nWO59ZHNh3I6-KiKdsNzv8Jl5T_dCUVPj7l3w\",\n config: {\n appNo: \"MFX5TxlheIKbekZHKoeOVNlo\",\n },\n providerId: \"demo-provider\",\n },\n};\n\n// 使用 Provider 的 XAiChatbot\nexport const 携带历史记录实例: Story = {\n render: (args) => {\n const providerRef = React.useRef<any>(null);\n\n const handleSendMessage = () => {\n if (providerRef.current?.startChat) {\n providerRef.current.startChat({\n text: \"你好,AI!\", // 上传文案\n files: [], // 如果需要上传附件\n });\n } else {\n console.log(\"XAdkWebProvider ref 未准备好或 chat 方法不存在\");\n }\n };\n\n const handleOnEvent = (event: any) => {\n const { code, data } = event;\n console.warn(code);\n if (code === \"SESSION_SWITCH\") {\n console.log(providerRef.current.getMessages());\n } else if (code === \"APP_MESSAGES_INIT_SUCCESS\") {\n console.log(code, data);\n } else if (code === \"APP_CONFIG_INIT_SUCCESS\") {\n setTimeout(() => {\n handleSendMessage();\n }, 2000);\n }\n };\n\n return (\n <div style={{ display: \"flex\" }}>\n <div style={{ height: \"600px\", width: \"100vw\" }}>\n <XAdkWebProvider\n ref={providerRef}\n {...args}\n onError={(providerError) => console.log(providerError)}\n onSuccess={handleOnEvent}\n onStream={(data) => console.log(data)}\n onEvent={handleOnEvent}\n />\n </div>\n </div>\n );\n },\n args: {\n url: \"https://m-poc-dev.zaxline.com\",\n token:\n \"eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iLCJhdWQiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iLCJuYmYiOjE3NzI3MDA1MzcsInVzZXJfaWQiOiJWNFNPSG1KbzNaZWE0Uk51ZzdYWDJBPT0iLCJzY29wZSI6WyIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iXSwiaXNzIjoiaHR0cDovL2htLWF1dGgtc2VydmVyLnhsaW5lLWRldi50ZXN0LnhpbmtlLmJpeiIsImV4cCI6MTc3MjcwNzczNywiaWF0IjoxNzcyNzAwNTM3LCJqdGkiOiJlZWM3NzA2Mi01YmNjLTRlOTgtYTExZC1hOThjN2Q3NmZlZjIiLCJjbGllbnRfaWQiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08ifQ.eDF_7XsgyAehFXTfB-6FcJglLDacEQz-UGLYGuI3lv-QQnSLekK5DvHBBA9T56OZ6DlQLMC3vhtvJV10lQwigWLE-b4fYTM205mhrtcBQFTUu0EBRTm0g_5sItw-0qaR9E6729H4s8Ty8zyst_nwGhxHWGMjg80cZM47UXhzEpL18wr2JDEWZmq7ZrvxFxqGiR2kjHMB1MOqIEIqGdwBmIDWkZus1qOFJzKN2tSd5Rd4hcLW3pdXmcEJZnVQfAwjqUTu5Peq7mSS0jXh_CIie8tJMOBX7-Fy3N10GSuYZSPCm3Aw0SPnRKgqzh2l4_401yw0lbX36QHBrTOxlXu_Zw\",\n config: {\n appNo: \"3jt2YbDjewVn2PHRKaDfJEgO\",\n chatProps: {\n clearBtnShow: false,\n },\n session: {\n showSessionList: true,\n },\n },\n providerId: \"demo-provider\",\n },\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAiC;AAEjC,kBAAuB;AACvB,mBAA4B;AAgCpB;AA9BR,IAAM,OAAqC;AAAA,EACzC,OAAO;AAAA,EACP,WAAW,aAAAA;AAAA,EACX,YAAY;AAAA,IACV,QAAQ;AAAA,IACR,MAAM;AAAA,MACJ,aAAa;AAAA,QACX,WAAW;AAAA,MACb;AAAA,IACF;AAAA,EACF;AAAA,EACA,MAAM,CAAC,UAAU;AAAA,EACjB,UAAU;AAAA,IACR,QAAQ;AAAA,MACN,aAAa;AAAA,MACb,OAAO;AAAA,QACL,MAAM;AAAA,UACJ,SAAS;AAAA,UACT,QAAQ;AAAA;AAAA;AAAA,QAGV;AAAA,QACA,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAEA,YAAY;AAAA,IACV,CAAC,UACC,4CAAC,SAAI,OAAO,EAAE,SAAS,OAAO,GAC5B,sDAAC,SAAM,GACT;AAAA,EAEJ;AACF;AAEA,IAAO,kCAAQ;AAIR,IAAM,UAAiB;AAAA,EAC5B,QAAQ,CAAC,SAAS;AAChB,UAAM,cAAc,aAAAC,QAAM,OAAY,IAAI;AAE1C,UAAM,oBAAoB,MAAM;AAjDpC;AAkDM,WAAI,iBAAY,YAAZ,mBAAqB,MAAM;AAC7B,oBAAY,QAAQ,KAAK,EAAE,MAAM,SAAS,CAAC;AAAA,MAC7C,OAAO;AACL,gBAAQ,IAAI,sCAAsC;AAAA,MACpD;AAAA,IACF;AAEA,WACE,6CAAC,SAAI,OAAO,EAAE,SAAS,OAAO,GAC5B;AAAA;AAAA,QAAC;AAAA;AAAA,UACC,OAAO;AAAA,YACL,SAAS;AAAA,YACT,eAAe;AAAA,YACf,KAAK;AAAA,YACL,aAAa;AAAA,YACb,gBAAgB;AAAA,UAClB;AAAA,UAEA,sDAAC,sBAAO,MAAK,WAAU,SAAS,mBAAmB,kBAEnD;AAAA;AAAA,MACF;AAAA,MACA,4CAAC,SAAI,OAAO,EAAE,UAAU,SAAS,QAAQ,QAAQ,GAC/C;AAAA,QAAC,aAAAD;AAAA,QAAA;AAAA,UACC,KAAK;AAAA,UACJ,GAAG;AAAA;AAAA,MAGL,GACH;AAAA,OACF;AAAA,EAEJ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,OACE;AAAA,IACF,QAAQ;AAAA,MACN,OAAO;AAAA,IACT;AAAA,IACA,YAAY;AAAA,EACd;AACF;AAGO,IAAM,WAAkB;AAAA,EAC7B,QAAQ,CAAC,SAAS;AAChB,UAAM,cAAc,aAAAC,QAAM,OAAY,IAAI;AAE1C,UAAM,oBAAoB,MAAM;AAnGpC;AAoGM,WAAI,iBAAY,YAAZ,mBAAqB,WAAW;AAClC,oBAAY,QAAQ,UAAU;AAAA,UAC5B,MAAM;AAAA;AAAA,UACN,OAAO,CAAC;AAAA;AAAA,QACV,CAAC;AAAA,MACH,OAAO;AACL,gBAAQ,IAAI,sCAAsC;AAAA,MACpD;AAAA,IACF;AAEA,UAAM,gBAAgB,CAAC,UAAe;AACpC,YAAM,EAAE,MAAM,KAAK,IAAI;AACvB,cAAQ,KAAK,IAAI;AACjB,UAAI,SAAS,kBAAkB;AAC7B,gBAAQ,IAAI,YAAY,QAAQ,YAAY,CAAC;AAAA,MAC/C,WAAW,SAAS,6BAA6B;AAC/C,gBAAQ,IAAI,MAAM,IAAI;AAAA,MACxB,WAAW,SAAS,2BAA2B;AAC7C,mBAAW,MAAM;AACf,4BAAkB;AAAA,QACpB,GAAG,GAAI;AAAA,MACT;AAAA,IACF;AAEA,WACE,4CAAC,SAAI,OAAO,EAAE,SAAS,OAAO,GAC5B,sDAAC,SAAI,OAAO,EAAE,QAAQ,SAAS,OAAO,QAAQ,GAC5C;AAAA,MAAC,aAAAD;AAAA,MAAA;AAAA,QACC,KAAK;AAAA,QACJ,GAAG;AAAA,QACJ,SAAS,CAAC,kBAAkB,QAAQ,IAAI,aAAa;AAAA,QACrD,WAAW;AAAA,QACX,UAAU,CAAC,SAAS,QAAQ,IAAI,IAAI;AAAA,QACpC,SAAS;AAAA;AAAA,IACX,GACF,GACF;AAAA,EAEJ;AAAA,EACA,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,OACE;AAAA,IACF,QAAQ;AAAA,MACN,OAAO;AAAA,MACP,WAAW;AAAA,QACT,cAAc;AAAA,MAChB;AAAA,MACA,SAAS;AAAA,QACP,iBAAiB;AAAA,MACnB;AAAA,IACF;AAAA,IACA,YAAY;AAAA,EACd;AACF;",
6
6
  "names": ["XAdkWebProvider", "React"]
7
7
  }
@@ -174,10 +174,10 @@ var 携带历史记录示例 = {
174
174
  ) });
175
175
  },
176
176
  args: {
177
- url: "https://m-poc-dev.zaxline.com",
178
- token: "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiVjRTT0htSm8zWmVhNFJOdWc3WFgyQT09Iiwic2NvcGUiOlsicmN4anBibU44VVgxVVRRbTU0b0ZNTEtwIl0sImV4cCI6MTc2NTI3ODg4NiwianRpIjoiNFRTcWdfV3NJOHlqSEdZUmRRVEtuT0dPbjU4IiwiY2xpZW50X2lkIjoicmN4anBibU44VVgxVVRRbTU0b0ZNTEtwIn0.duUIEPpHmyMwaZYtvM5BlAs1e1ZEco_DaD2NI-Ht2m0OE8khQBe284vRSPxgvxKm7aHOcAo_Kla9DE0YBPUxKeN1c0qgRepIacLB7AvTWFZtb59OjdGMfMHQbbZiuy4wu5W81dVoOpZWCjIkOomCtvCsIZpUQY7vdIZBCB9sygmwTJ7S_9oF10iUtK90AdZHX-_9jdlKNJC-Fulg9ab88Z33rnmW8jhhqpEkYYzGnccXNQuomxswMo_MgyplV_B9wpfs90tEnPWC623dcdfJHcRJZBtC-NU6RomkPLewdz3dEM-LaWBkP6FMI60C0VQW-fvwWkWC1GKBrUeaXzbgWg",
177
+ url: "https://m-poc.zaxline.com",
178
+ token: "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiU0tUYkp6MDE5bWFVdnFqcC9OUGJEQT09Iiwic2NvcGUiOlsiMGhic2RXYkZVYktZRXkxMEsxNDM3WFhtIl0sImV4cCI6MTc2OTE2MzE5MCwianRpIjoiV1B4QTJrTzB0dlV5eW84MWdxSVlldlZRWUFRIiwiY2xpZW50X2lkIjoiMGhic2RXYkZVYktZRXkxMEsxNDM3WFhtIn0.f8tEHi-1Gokv09ce2YjO17yD4SL-KFNCiyFmVOLMvHnHltDh9g2BsxSEB9IreaEvqT70-nl9qgWjb8V2As9QTBNPvfdStXmvc1X4HYsWPDdX0YeLWBAgJ0clJufL62SzwRLNb-torvuLvQfqohF3Aqr7QUXt2x_ZOUA1G5jkG8K9_FZPYBBfUMf6JV8CejogqCSe-yjIKPhbh9dDcCGO6ibexTT1x8C1f2LwP-sMyYmPOIdEqelmzk5-m32yy2fINKz9zG8NWMRx8G4Sr1l-pZzxSGOQ3v6EKUe3M_I-W3pZc6G9gzIXb2Wq_lE7q_l91ee5dU8ex1To8X_PtFd8_g",
179
179
  config: {
180
- appNo: "rcxjpbmN8UX1UTQm54oFMLKp",
180
+ appNo: "0hbsdWbFUbKYEy10K1437XXm",
181
181
  chatProps: {
182
182
  clearBtnShow: false
183
183
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/XAiProvider/XAiProvider.stories.tsx"],
4
- "sourcesContent": ["import React from 'react';\nimport type { Meta, StoryObj } from '@storybook/react-vite';\nimport { Button } from 'antd';\nimport XAiProvider from './index';\nimport XAiChatbot from '../XAiChatbot';\nimport XAiConversations from '../XAiConversations';\n\nconst meta: Meta<typeof XAiProvider> = {\n title: 'AI组件/XAiProvider AI容器',\n component: XAiProvider,\n parameters: {\n layout: 'centered',\n docs: {\n description: {\n component: 'AI 聊天机器人容器组件,提供全局上下文和消息管理功能。',\n },\n },\n },\n tags: ['autodocs'],\n argTypes: {\n config: {\n description: '配置信息',\n table: {\n type: {\n summary: 'XAiProviderConfig',\n detail: `{\n appNo?: string; // 应用唯一编号\n }`,\n },\n category: '配置选项',\n },\n },\n },\n // 添加装饰器,确保组件有必要的上下文\n decorators: [\n (Story) => (\n <div style={{ padding: '20px' }}>\n <Story />\n </div>\n ),\n ],\n};\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\n// 使用 Provider 的 XAiChatbot\nexport const 单聊天窗口实例: Story = {\n render: (args) => {\n const providerRef = React.useRef<any>(null);\n\n const handleSendMessage = () => {\n if (providerRef.current?.chat) {\n providerRef.current.chat({ text: '你好,AI!' });\n } else {\n console.log('XAiProvider ref 未准备好或 chat 方法不存在');\n }\n };\n\n return (\n <div style={{ display: 'flex' }}>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '12px', marginRight: '24px', justifyContent: 'center' }}>\n <Button type=\"primary\" onClick={handleSendMessage}>发送消息</Button>\n </div>\n <div style={{ maxWidth: '800px', height: '600px' }}>\n <XAiProvider\n ref={providerRef}\n {...args}\n onError={(providerError) => console.log(providerError)}\n onMessage={(data) => console.log(data)}\n >\n <XAiChatbot\n navbarShow\n navbar={{\n title: 'Provider 聊天机器人',\n subtitle: '由 Provider 管理消息',\n avatar: 'https://gw.alipayobjects.com/zos/bmw-prod/b874caa9-4458-412a-9ac6-a61486180a62.svg',\n }}\n />\n </XAiProvider>\n </div>\n </div>\n );\n },\n args: {\n url: 'https://m-poc-dev.zaxline.com',\n token: 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiVjRTT0htSm8zWmVhNFJOdWc3WFgyQT09Iiwic2NvcGUiOlsiZ2JWemZPVjhTa1oxdGRMT3BYNWZyVXpMIl0sImV4cCI6MTc2NDY3MTc2MSwianRpIjoiRl9Zb0JBXzhIN01XempDZUxQenEzNTBXRnNrIiwiY2xpZW50X2lkIjoiZ2JWemZPVjhTa1oxdGRMT3BYNWZyVXpMIn0.mtGBQfwNtIkhcOumsOvzMj2BdYUxAPwZ9GcvNLuCNGVzFkqkLkfy_LALjYR2B-RaNj11_Cx7DcewtmLceG31KfnCiFY24BD_CbwoahdFh40SYRTFnjDf8XQI22E63h5NxTuldPx0itYLUPaUO6NAubnRON40eQPGZKygM0i72ULsQQAyRpJLYAaTjUxyPIW3JmMzQmYiRx641JeAYAup4-ZNw-Fqmd-8_xK3kN-a832xM-M_eqXgn8yMttn0uFv95lxPdJ1_-mp2zx8N4TBCYVkHo3u_PjM65S3_p4u1dFGXBDAsxtVMgmVGeUvubTLFuDM153rz9MZ7aOuu_c8K7w',\n config: {\n appNo: 'PGlA63A1Gt9oZpxa6YCWMciH',\n },\n providerId: 'demo-provider',\n },\n};\n\n// 多个 Provider 示例\nexport const 多容器示例: Story = {\n render: (args) => (\n <div style={{ display: 'flex', gap: '20px' }}>\n <div style={{ width: '400px', height: '600px' }}>\n <XAiProvider {...args} providerId=\"provider-1\">\n <XAiChatbot\n navbarShow\n navbar={{\n title: 'Provider 1',\n subtitle: '第一个聊天机器人',\n avatar: 'https://gw.alipayobjects.com/zos/bmw-prod/b874caa9-4458-412a-9ac6-a61486180a62.svg',\n }}\n />\n </XAiProvider>\n </div>\n\n <div style={{ width: '400px', height: '600px' }}>\n <XAiProvider {...args} providerId=\"provider-2\">\n <XAiChatbot\n navbarShow\n navbar={{\n title: 'Provider 2',\n subtitle: '第二个聊天机器人',\n avatar: 'https://gw.alipayobjects.com/zos/bmw-prod/b874caa9-4458-412a-9ac6-a61486180a62.svg',\n }}\n />\n </XAiProvider>\n </div>\n </div>\n ),\n args: {\n url: 'https://api.example.com/ai',\n token: 'your-token-here',\n },\n};\n\n// 使用 Provider 的 XAiChatbot\nexport const 携带历史记录示例: Story = {\n render: (args) => {\n const providerRef = React.useRef<any>(null);\n\n return (\n <div style={{ width: '1080px', height: '600px', overflow: 'hidden' }}>\n <XAiProvider\n ref={providerRef}\n {...args}\n onError={(providerError) => console.log(providerError)}\n onMessage={(data) => console.log(data)}\n >\n <XAiConversations />\n <div style={{ flex: 1, display: 'flex', justifyContent: 'center' }}>\n <XAiChatbot\n navbar={{\n title: 'Provider 聊天机器人',\n subtitle: '由 Provider 管理消息',\n avatar: 'https://gw.alipayobjects.com/zos/bmw-prod/b874caa9-4458-412a-9ac6-a61486180a62.svg',\n }}\n />\n </div>\n </XAiProvider>\n </div>\n );\n },\n args: {\n url: 'https://m-poc-dev.zaxline.com',\n token: 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiVjRTT0htSm8zWmVhNFJOdWc3WFgyQT09Iiwic2NvcGUiOlsicmN4anBibU44VVgxVVRRbTU0b0ZNTEtwIl0sImV4cCI6MTc2NTI3ODg4NiwianRpIjoiNFRTcWdfV3NJOHlqSEdZUmRRVEtuT0dPbjU4IiwiY2xpZW50X2lkIjoicmN4anBibU44VVgxVVRRbTU0b0ZNTEtwIn0.duUIEPpHmyMwaZYtvM5BlAs1e1ZEco_DaD2NI-Ht2m0OE8khQBe284vRSPxgvxKm7aHOcAo_Kla9DE0YBPUxKeN1c0qgRepIacLB7AvTWFZtb59OjdGMfMHQbbZiuy4wu5W81dVoOpZWCjIkOomCtvCsIZpUQY7vdIZBCB9sygmwTJ7S_9oF10iUtK90AdZHX-_9jdlKNJC-Fulg9ab88Z33rnmW8jhhqpEkYYzGnccXNQuomxswMo_MgyplV_B9wpfs90tEnPWC623dcdfJHcRJZBtC-NU6RomkPLewdz3dEM-LaWBkP6FMI60C0VQW-fvwWkWC1GKBrUeaXzbgWg',\n config: {\n appNo: 'rcxjpbmN8UX1UTQm54oFMLKp',\n chatProps: {\n clearBtnShow: false,\n },\n },\n providerId: 'demo-provider',\n },\n};\n"],
4
+ "sourcesContent": ["import React from 'react';\nimport type { Meta, StoryObj } from '@storybook/react-vite';\nimport { Button } from 'antd';\nimport XAiProvider from './index';\nimport XAiChatbot from '../XAiChatbot';\nimport XAiConversations from '../XAiConversations';\n\nconst meta: Meta<typeof XAiProvider> = {\n title: 'AI组件/XAiProvider AI容器',\n component: XAiProvider,\n parameters: {\n layout: 'centered',\n docs: {\n description: {\n component: 'AI 聊天机器人容器组件,提供全局上下文和消息管理功能。',\n },\n },\n },\n tags: ['autodocs'],\n argTypes: {\n config: {\n description: '配置信息',\n table: {\n type: {\n summary: 'XAiProviderConfig',\n detail: `{\n appNo?: string; // 应用唯一编号\n }`,\n },\n category: '配置选项',\n },\n },\n },\n // 添加装饰器,确保组件有必要的上下文\n decorators: [\n (Story) => (\n <div style={{ padding: '20px' }}>\n <Story />\n </div>\n ),\n ],\n};\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\n// 使用 Provider 的 XAiChatbot\nexport const 单聊天窗口实例: Story = {\n render: (args) => {\n const providerRef = React.useRef<any>(null);\n\n const handleSendMessage = () => {\n if (providerRef.current?.chat) {\n providerRef.current.chat({ text: '你好,AI!' });\n } else {\n console.log('XAiProvider ref 未准备好或 chat 方法不存在');\n }\n };\n\n return (\n <div style={{ display: 'flex' }}>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '12px', marginRight: '24px', justifyContent: 'center' }}>\n <Button type=\"primary\" onClick={handleSendMessage}>发送消息</Button>\n </div>\n <div style={{ maxWidth: '800px', height: '600px' }}>\n <XAiProvider\n ref={providerRef}\n {...args}\n onError={(providerError) => console.log(providerError)}\n onMessage={(data) => console.log(data)}\n >\n <XAiChatbot\n navbarShow\n navbar={{\n title: 'Provider 聊天机器人',\n subtitle: '由 Provider 管理消息',\n avatar: 'https://gw.alipayobjects.com/zos/bmw-prod/b874caa9-4458-412a-9ac6-a61486180a62.svg',\n }}\n />\n </XAiProvider>\n </div>\n </div>\n );\n },\n args: {\n url: 'https://m-poc-dev.zaxline.com',\n token: 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiVjRTT0htSm8zWmVhNFJOdWc3WFgyQT09Iiwic2NvcGUiOlsiZ2JWemZPVjhTa1oxdGRMT3BYNWZyVXpMIl0sImV4cCI6MTc2NDY3MTc2MSwianRpIjoiRl9Zb0JBXzhIN01XempDZUxQenEzNTBXRnNrIiwiY2xpZW50X2lkIjoiZ2JWemZPVjhTa1oxdGRMT3BYNWZyVXpMIn0.mtGBQfwNtIkhcOumsOvzMj2BdYUxAPwZ9GcvNLuCNGVzFkqkLkfy_LALjYR2B-RaNj11_Cx7DcewtmLceG31KfnCiFY24BD_CbwoahdFh40SYRTFnjDf8XQI22E63h5NxTuldPx0itYLUPaUO6NAubnRON40eQPGZKygM0i72ULsQQAyRpJLYAaTjUxyPIW3JmMzQmYiRx641JeAYAup4-ZNw-Fqmd-8_xK3kN-a832xM-M_eqXgn8yMttn0uFv95lxPdJ1_-mp2zx8N4TBCYVkHo3u_PjM65S3_p4u1dFGXBDAsxtVMgmVGeUvubTLFuDM153rz9MZ7aOuu_c8K7w',\n config: {\n appNo: 'PGlA63A1Gt9oZpxa6YCWMciH',\n },\n providerId: 'demo-provider',\n },\n};\n\n// 多个 Provider 示例\nexport const 多容器示例: Story = {\n render: (args) => (\n <div style={{ display: 'flex', gap: '20px' }}>\n <div style={{ width: '400px', height: '600px' }}>\n <XAiProvider {...args} providerId=\"provider-1\">\n <XAiChatbot\n navbarShow\n navbar={{\n title: 'Provider 1',\n subtitle: '第一个聊天机器人',\n avatar: 'https://gw.alipayobjects.com/zos/bmw-prod/b874caa9-4458-412a-9ac6-a61486180a62.svg',\n }}\n />\n </XAiProvider>\n </div>\n\n <div style={{ width: '400px', height: '600px' }}>\n <XAiProvider {...args} providerId=\"provider-2\">\n <XAiChatbot\n navbarShow\n navbar={{\n title: 'Provider 2',\n subtitle: '第二个聊天机器人',\n avatar: 'https://gw.alipayobjects.com/zos/bmw-prod/b874caa9-4458-412a-9ac6-a61486180a62.svg',\n }}\n />\n </XAiProvider>\n </div>\n </div>\n ),\n args: {\n url: 'https://api.example.com/ai',\n token: 'your-token-here',\n },\n};\n\n// 使用 Provider 的 XAiChatbot\nexport const 携带历史记录示例: Story = {\n render: (args) => {\n const providerRef = React.useRef<any>(null);\n\n return (\n <div style={{ width: '1080px', height: '600px', overflow: 'hidden' }}>\n <XAiProvider\n ref={providerRef}\n {...args}\n onError={(providerError) => console.log(providerError)}\n onMessage={(data) => console.log(data)}\n >\n <XAiConversations />\n <div style={{ flex: 1, display: 'flex', justifyContent: 'center' }}>\n <XAiChatbot\n navbar={{\n title: 'Provider 聊天机器人',\n subtitle: '由 Provider 管理消息',\n avatar: 'https://gw.alipayobjects.com/zos/bmw-prod/b874caa9-4458-412a-9ac6-a61486180a62.svg',\n }}\n />\n </div>\n </XAiProvider>\n </div>\n );\n },\n args: {\n url: 'https://m-poc.zaxline.com',\n token: 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiU0tUYkp6MDE5bWFVdnFqcC9OUGJEQT09Iiwic2NvcGUiOlsiMGhic2RXYkZVYktZRXkxMEsxNDM3WFhtIl0sImV4cCI6MTc2OTE2MzE5MCwianRpIjoiV1B4QTJrTzB0dlV5eW84MWdxSVlldlZRWUFRIiwiY2xpZW50X2lkIjoiMGhic2RXYkZVYktZRXkxMEsxNDM3WFhtIn0.f8tEHi-1Gokv09ce2YjO17yD4SL-KFNCiyFmVOLMvHnHltDh9g2BsxSEB9IreaEvqT70-nl9qgWjb8V2As9QTBNPvfdStXmvc1X4HYsWPDdX0YeLWBAgJ0clJufL62SzwRLNb-torvuLvQfqohF3Aqr7QUXt2x_ZOUA1G5jkG8K9_FZPYBBfUMf6JV8CejogqCSe-yjIKPhbh9dDcCGO6ibexTT1x8C1f2LwP-sMyYmPOIdEqelmzk5-m32yy2fINKz9zG8NWMRx8G4Sr1l-pZzxSGOQ3v6EKUe3M_I-W3pZc6G9gzIXb2Wq_lE7q_l91ee5dU8ex1To8X_PtFd8_g',\n config: {\n appNo: '0hbsdWbFUbKYEy10K1437XXm',\n chatProps: {\n clearBtnShow: false,\n },\n },\n providerId: 'demo-provider',\n },\n};\n"],
5
5
  "mappings": "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",
6
6
  "names": ["XAiProvider", "React", "XAiChatbot", "XAiConversations"]
7
7
  }
@@ -0,0 +1,6 @@
1
+ import type { Meta, StoryObj } from "@storybook/react-vite";
2
+ import XAiThoughtChain from ".";
3
+ declare const meta: Meta<typeof XAiThoughtChain>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof meta>;
6
+ export declare const 基础用法: Story;