@ai-group/chat-sdk 3.0.4 → 3.0.6

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 (96) hide show
  1. package/dist/cjs/components/FileGallery/FileGallery.stories.d.ts +6 -0
  2. package/dist/cjs/components/FileGallery/FileGallery.stories.js +143 -0
  3. package/dist/cjs/components/FileGallery/FileGallery.stories.js.map +7 -0
  4. package/dist/cjs/components/FileGallery/index.d.ts +13 -12
  5. package/dist/cjs/components/FileGallery/index.js +165 -159
  6. package/dist/cjs/components/FileGallery/index.js.map +2 -2
  7. package/dist/cjs/components/FileGallery/styles.js +5 -0
  8. package/dist/cjs/components/FileGallery/styles.js.map +2 -2
  9. package/dist/cjs/components/XAdkChatbot/XAdkChatbot.stories.js +28 -9
  10. package/dist/cjs/components/XAdkChatbot/XAdkChatbot.stories.js.map +2 -2
  11. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.d.ts +1 -0
  12. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.js +2 -0
  13. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.js.map +2 -2
  14. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/styles.js +7 -1
  15. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/styles.js.map +2 -2
  16. package/dist/cjs/components/XAdkChatbot/index.js +29 -4
  17. package/dist/cjs/components/XAdkChatbot/index.js.map +2 -2
  18. package/dist/cjs/components/XAdkChatbot/styles.d.ts +1 -0
  19. package/dist/cjs/components/XAdkChatbot/styles.js +7 -0
  20. package/dist/cjs/components/XAdkChatbot/styles.js.map +2 -2
  21. package/dist/cjs/components/XAdkProvider/XAdkProvider.stories.js +2 -2
  22. package/dist/cjs/components/XAdkProvider/XAdkProvider.stories.js.map +1 -1
  23. package/dist/cjs/components/XAdkProvider/compound/Messages.js +63 -9
  24. package/dist/cjs/components/XAdkProvider/compound/Messages.js.map +3 -3
  25. package/dist/cjs/components/XAdkProvider/context/ChatActionContext.d.ts +5 -0
  26. package/dist/cjs/components/XAdkProvider/context/ChatActionContext.js.map +2 -2
  27. package/dist/cjs/components/XAdkProvider/context/ChatStateContext.d.ts +2 -0
  28. package/dist/cjs/components/XAdkProvider/context/ChatStateContext.js.map +2 -2
  29. package/dist/cjs/components/XAdkProvider/index.js +11 -5
  30. package/dist/cjs/components/XAdkProvider/index.js.map +2 -2
  31. package/dist/cjs/components/XAdkSender/XAdkSender.stories.d.ts +2 -2
  32. package/dist/cjs/components/XAdkSender/XAdkSender.stories.js.map +2 -2
  33. package/dist/cjs/components/XAdkSender/index.js +9 -1
  34. package/dist/cjs/components/XAdkSender/index.js.map +2 -2
  35. package/dist/cjs/hooks/useADKChat.d.ts +4 -0
  36. package/dist/cjs/hooks/useADKChat.js +24 -2
  37. package/dist/cjs/hooks/useADKChat.js.map +2 -2
  38. package/dist/cjs/types/ChatHook.d.ts +6 -1
  39. package/dist/cjs/types/ChatHook.js.map +1 -1
  40. package/dist/cjs/types/FileGallery.d.ts +1 -21
  41. package/dist/cjs/types/FileGallery.js.map +1 -1
  42. package/dist/cjs/types/XAdkChatbot.d.ts +1 -1
  43. package/dist/cjs/types/XAdkChatbot.js.map +1 -1
  44. package/dist/cjs/types/XAdkProvider.d.ts +5 -0
  45. package/dist/cjs/types/XAdkProvider.js.map +1 -1
  46. package/dist/cjs/types/XAdkSender.js.map +1 -1
  47. package/dist/esm/components/FileGallery/FileGallery.stories.d.ts +6 -0
  48. package/dist/esm/components/FileGallery/FileGallery.stories.js +48 -0
  49. package/dist/esm/components/FileGallery/FileGallery.stories.js.map +1 -0
  50. package/dist/esm/components/FileGallery/index.d.ts +13 -12
  51. package/dist/esm/components/FileGallery/index.js +48 -69
  52. package/dist/esm/components/FileGallery/index.js.map +1 -1
  53. package/dist/esm/components/FileGallery/styles.js +1 -1
  54. package/dist/esm/components/FileGallery/styles.js.map +1 -1
  55. package/dist/esm/components/XAdkChatbot/XAdkChatbot.stories.js +25 -13
  56. package/dist/esm/components/XAdkChatbot/XAdkChatbot.stories.js.map +1 -1
  57. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.d.ts +1 -0
  58. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.js +2 -0
  59. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.js.map +1 -1
  60. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.js +1 -1
  61. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.js.map +1 -1
  62. package/dist/esm/components/XAdkChatbot/index.js +49 -11
  63. package/dist/esm/components/XAdkChatbot/index.js.map +1 -1
  64. package/dist/esm/components/XAdkChatbot/styles.d.ts +1 -0
  65. package/dist/esm/components/XAdkChatbot/styles.js +21 -20
  66. package/dist/esm/components/XAdkChatbot/styles.js.map +1 -1
  67. package/dist/esm/components/XAdkProvider/XAdkProvider.stories.js +2 -2
  68. package/dist/esm/components/XAdkProvider/XAdkProvider.stories.js.map +1 -1
  69. package/dist/esm/components/XAdkProvider/compound/Messages.js +124 -11
  70. package/dist/esm/components/XAdkProvider/compound/Messages.js.map +1 -1
  71. package/dist/esm/components/XAdkProvider/context/ChatActionContext.d.ts +5 -0
  72. package/dist/esm/components/XAdkProvider/context/ChatActionContext.js.map +1 -1
  73. package/dist/esm/components/XAdkProvider/context/ChatStateContext.d.ts +2 -0
  74. package/dist/esm/components/XAdkProvider/context/ChatStateContext.js.map +1 -1
  75. package/dist/esm/components/XAdkProvider/index.js +23 -5
  76. package/dist/esm/components/XAdkProvider/index.js.map +1 -1
  77. package/dist/esm/components/XAdkSender/XAdkSender.stories.d.ts +2 -2
  78. package/dist/esm/components/XAdkSender/XAdkSender.stories.js +13 -13
  79. package/dist/esm/components/XAdkSender/XAdkSender.stories.js.map +1 -1
  80. package/dist/esm/components/XAdkSender/index.js +14 -4
  81. package/dist/esm/components/XAdkSender/index.js.map +1 -1
  82. package/dist/esm/hooks/useADKChat.d.ts +4 -0
  83. package/dist/esm/hooks/useADKChat.js +79 -28
  84. package/dist/esm/hooks/useADKChat.js.map +1 -1
  85. package/dist/esm/types/ChatHook.d.ts +6 -1
  86. package/dist/esm/types/ChatHook.js.map +1 -1
  87. package/dist/esm/types/FileGallery.d.ts +1 -21
  88. package/dist/esm/types/FileGallery.js.map +1 -1
  89. package/dist/esm/types/XAdkChatbot.d.ts +1 -1
  90. package/dist/esm/types/XAdkChatbot.js.map +1 -1
  91. package/dist/esm/types/XAdkProvider.d.ts +5 -0
  92. package/dist/esm/types/XAdkProvider.js.map +1 -1
  93. package/dist/esm/types/XAdkSender.js.map +1 -1
  94. package/dist/umd/chat-sdk.min.css +1 -1
  95. package/dist/umd/chat-sdk.min.js +1 -1
  96. package/package.json +1 -1
@@ -5,6 +5,7 @@ export declare const useStyles: () => {
5
5
  suggestion: string;
6
6
  suggestContent: string;
7
7
  userMsg: string;
8
+ userContainer: string;
8
9
  card: string;
9
10
  botMsg: string;
10
11
  welcomeWrapper: string;
@@ -1,5 +1,5 @@
1
1
  import _taggedTemplateLiteral from "@babel/runtime/helpers/esm/taggedTemplateLiteral";
2
- var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12, _templateObject13, _templateObject14, _templateObject15, _templateObject16, _templateObject17, _templateObject18, _templateObject19, _templateObject20, _templateObject21, _templateObject22, _templateObject23, _templateObject24, _templateObject25;
2
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject10, _templateObject11, _templateObject12, _templateObject13, _templateObject14, _templateObject15, _templateObject16, _templateObject17, _templateObject18, _templateObject19, _templateObject20, _templateObject21, _templateObject22, _templateObject23, _templateObject24, _templateObject25, _templateObject26;
3
3
  import { css } from "@emotion/css";
4
4
  import { withBasicStyles } from "../../styles/common";
5
5
  export var useStyles = withBasicStyles(function () {
@@ -10,26 +10,27 @@ export var useStyles = withBasicStyles(function () {
10
10
  suggestion: css(_templateObject4 || (_templateObject4 = _taggedTemplateLiteral(["\n margin-bottom: 12px;\n "]))),
11
11
  suggestContent: css(_templateObject5 || (_templateObject5 = _taggedTemplateLiteral(["\n display: inline-flex;\n border: 2px solid #e7e7e7;\n border-radius: 8px;\n "]))),
12
12
  userMsg: css(_templateObject6 || (_templateObject6 = _taggedTemplateLiteral(["\n display: flex;\n justify-content: flex-end;\n margin-bottom: 24px;\n "]))),
13
- card: css(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["\n padding: 12px 16px;\n background: #d5e3ff;\n border-radius: 12px;\n max-width: 100%;\n white-space: pre-line;\n word-break: break-all;\n "]))),
14
- botMsg: css(_templateObject8 || (_templateObject8 = _taggedTemplateLiteral(["\n margin-bottom: 12px;\n "]))),
13
+ userContainer: css(_templateObject7 || (_templateObject7 = _taggedTemplateLiteral(["\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n align-items: flex-end;\n "]))),
14
+ card: css(_templateObject8 || (_templateObject8 = _taggedTemplateLiteral(["\n display: inline-flex;\n padding: 12px 16px;\n background: #d5e3ff;\n border-radius: 12px;\n max-width: 100%;\n white-space: pre-line;\n word-break: break-all;\n "]))),
15
+ botMsg: css(_templateObject9 || (_templateObject9 = _taggedTemplateLiteral(["\n margin-bottom: 12px;\n "]))),
15
16
  // 新增样式
16
- welcomeWrapper: css(_templateObject9 || (_templateObject9 = _taggedTemplateLiteral(["\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 40px 20px;\n text-align: center;\n "]))),
17
- welcomeIcon: css(_templateObject10 || (_templateObject10 = _taggedTemplateLiteral(["\n width: 64px;\n height: 64px;\n border-radius: 12px;\n margin-bottom: 16px;\n "]))),
18
- welcomeTitle: css(_templateObject11 || (_templateObject11 = _taggedTemplateLiteral(["\n font-size: 24px;\n font-weight: 600;\n color: rgba(0, 0, 0, 0.88);\n margin-bottom: 8px;\n "]))),
19
- welcomeDesc: css(_templateObject12 || (_templateObject12 = _taggedTemplateLiteral(["\n font-size: 14px;\n color: rgba(0, 0, 0, 0.65);\n margin-bottom: 24px;\n "]))),
20
- suggestionWrapper: css(_templateObject13 || (_templateObject13 = _taggedTemplateLiteral(["\n margin-top: 16px;\n "]))),
21
- successBadge: css(_templateObject14 || (_templateObject14 = _taggedTemplateLiteral(["\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n background: #f6ffed;\n border: 1px solid #b7eb8f;\n border-radius: 4px;\n color: #52c41a;\n font-size: 13px;\n margin-bottom: 12px;\n "]))),
22
- fileSection: css(_templateObject15 || (_templateObject15 = _taggedTemplateLiteral(["\n margin: 12px 0;\n "]))),
23
- fileHeader: css(_templateObject16 || (_templateObject16 = _taggedTemplateLiteral(["\n font-size: 13px;\n color: rgba(0, 0, 0, 0.65);\n margin-bottom: 8px;\n "]))),
24
- metaFooter: css(_templateObject17 || (_templateObject17 = _taggedTemplateLiteral(["\n margin-top: 12px;\n padding-top: 12px;\n border-top: 1px solid #f0f0f0;\n "]))),
25
- actionIcons: css(_templateObject18 || (_templateObject18 = _taggedTemplateLiteral(["\n color: rgba(0, 0, 0, 0.45);\n\n & > span {\n cursor: pointer;\n transition: color 0.2s;\n\n &:hover {\n color: #1890ff;\n }\n }\n "]))),
26
- fnCall: css(_templateObject19 || (_templateObject19 = _taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 11px;\n border-radius: 24px;\n line-height: 16px;\n border: 1px solid #e7e7e7;\n cursor: pointer;\n "]))),
27
- confirm: css(_templateObject20 || (_templateObject20 = _taggedTemplateLiteral(["\n padding: 12px;\n border-radius: 12px;\n border: 1px solid #e7e7e7;\n "]))),
28
- footer: css(_templateObject21 || (_templateObject21 = _taggedTemplateLiteral(["\n /* senderWrap and tip moved to top-level keys so they are\n accessible as styles.senderWrap and styles.tip in the component */\n "]))),
29
- sender: css(_templateObject22 || (_templateObject22 = _taggedTemplateLiteral(["\n width: 100%;\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 8px 8px 12px;\n border: 1px solid #e7e7e7;\n border-radius: 24px;\n\n /* .input moved to top-level key so component can use styles.input */\n "]))),
30
- senderWrap: css(_templateObject23 || (_templateObject23 = _taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n "]))),
31
- tip: css(_templateObject24 || (_templateObject24 = _taggedTemplateLiteral(["\n padding: 4px;\n font-size: 12px;\n text-align: center;\n color: rgba(0, 0, 0, 0.4);\n "]))),
32
- input: css(_templateObject25 || (_templateObject25 = _taggedTemplateLiteral(["\n padding: 0;\n margin: 5px 0;\n line-height: 22px;\n font-size: 15px;\n border-radius: 0;\n border: none;\n\n &:focus {\n box-shadow: none;\n }\n "])))
17
+ welcomeWrapper: css(_templateObject10 || (_templateObject10 = _taggedTemplateLiteral(["\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 40px 20px;\n text-align: center;\n "]))),
18
+ welcomeIcon: css(_templateObject11 || (_templateObject11 = _taggedTemplateLiteral(["\n width: 64px;\n height: 64px;\n border-radius: 12px;\n margin-bottom: 16px;\n "]))),
19
+ welcomeTitle: css(_templateObject12 || (_templateObject12 = _taggedTemplateLiteral(["\n font-size: 24px;\n font-weight: 600;\n color: rgba(0, 0, 0, 0.88);\n margin-bottom: 8px;\n "]))),
20
+ welcomeDesc: css(_templateObject13 || (_templateObject13 = _taggedTemplateLiteral(["\n font-size: 14px;\n color: rgba(0, 0, 0, 0.65);\n margin-bottom: 24px;\n "]))),
21
+ suggestionWrapper: css(_templateObject14 || (_templateObject14 = _taggedTemplateLiteral(["\n margin-top: 16px;\n "]))),
22
+ successBadge: css(_templateObject15 || (_templateObject15 = _taggedTemplateLiteral(["\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n background: #f6ffed;\n border: 1px solid #b7eb8f;\n border-radius: 4px;\n color: #52c41a;\n font-size: 13px;\n margin-bottom: 12px;\n "]))),
23
+ fileSection: css(_templateObject16 || (_templateObject16 = _taggedTemplateLiteral(["\n margin: 12px 0;\n "]))),
24
+ fileHeader: css(_templateObject17 || (_templateObject17 = _taggedTemplateLiteral(["\n font-size: 13px;\n color: rgba(0, 0, 0, 0.65);\n margin-bottom: 8px;\n "]))),
25
+ metaFooter: css(_templateObject18 || (_templateObject18 = _taggedTemplateLiteral(["\n margin-top: 12px;\n padding-top: 12px;\n border-top: 1px solid #f0f0f0;\n "]))),
26
+ actionIcons: css(_templateObject19 || (_templateObject19 = _taggedTemplateLiteral(["\n color: rgba(0, 0, 0, 0.45);\n\n & > span {\n cursor: pointer;\n transition: color 0.2s;\n\n &:hover {\n color: #1890ff;\n }\n }\n "]))),
27
+ fnCall: css(_templateObject20 || (_templateObject20 = _taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 11px;\n border-radius: 24px;\n line-height: 16px;\n border: 1px solid #e7e7e7;\n cursor: pointer;\n "]))),
28
+ confirm: css(_templateObject21 || (_templateObject21 = _taggedTemplateLiteral(["\n padding: 12px;\n border-radius: 12px;\n border: 1px solid #e7e7e7;\n "]))),
29
+ footer: css(_templateObject22 || (_templateObject22 = _taggedTemplateLiteral(["\n /* senderWrap and tip moved to top-level keys so they are\n accessible as styles.senderWrap and styles.tip in the component */\n "]))),
30
+ sender: css(_templateObject23 || (_templateObject23 = _taggedTemplateLiteral(["\n width: 100%;\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 8px 8px 12px;\n border: 1px solid #e7e7e7;\n border-radius: 24px;\n\n /* .input moved to top-level key so component can use styles.input */\n "]))),
31
+ senderWrap: css(_templateObject24 || (_templateObject24 = _taggedTemplateLiteral(["\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n "]))),
32
+ tip: css(_templateObject25 || (_templateObject25 = _taggedTemplateLiteral(["\n padding: 4px;\n font-size: 12px;\n text-align: center;\n color: rgba(0, 0, 0, 0.4);\n "]))),
33
+ input: css(_templateObject26 || (_templateObject26 = _taggedTemplateLiteral(["\n padding: 0;\n margin: 5px 0;\n line-height: 22px;\n font-size: 15px;\n border-radius: 0;\n border: none;\n\n &:focus {\n box-shadow: none;\n }\n "])))
33
34
  };
34
35
  });
35
36
  export default useStyles;
@@ -1 +1 @@
1
- {"version":3,"names":["css","withBasicStyles","useStyles","wrapper","_templateObject","_taggedTemplateLiteral","list","_templateObject2","prologue","_templateObject3","suggestion","_templateObject4","suggestContent","_templateObject5","userMsg","_templateObject6","card","_templateObject7","botMsg","_templateObject8","welcomeWrapper","_templateObject9","welcomeIcon","_templateObject10","welcomeTitle","_templateObject11","welcomeDesc","_templateObject12","suggestionWrapper","_templateObject13","successBadge","_templateObject14","fileSection","_templateObject15","fileHeader","_templateObject16","metaFooter","_templateObject17","actionIcons","_templateObject18","fnCall","_templateObject19","confirm","_templateObject20","footer","_templateObject21","sender","_templateObject22","senderWrap","_templateObject23","tip","_templateObject24","input","_templateObject25"],"sources":["../../../../src/components/XAdkChatbot/styles.tsx"],"sourcesContent":["import { css } from \"@emotion/css\";\nimport { withBasicStyles } from \"@/styles/common\";\n\nexport const useStyles = withBasicStyles(() => ({\n wrapper: css`\n padding: 0 16px;\n min-height: 300px;\n width: 100%;\n height: 100%;\n border-radius: 8px;\n display: flex;\n flex-direction: column;\n\n .x-markdown {\n --margin-ul-ol: 0 0 1em 1em;\n\n code {\n background: rgba(150, 150, 150, 0.2);\n border-radius: 3px;\n }\n\n .ant-highlightCode-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n color: var(--ant-highlight-code-color-text-title);\n background: var(--ant-highlight-code-color-bg-title);\n padding: var(--ant-padding-sm);\n border-top-left-radius: var(--ant-border-radius);\n border-top-right-radius: var(--ant-border-radius);\n }\n }\n `,\n\n list: css`\n flex: 1;\n margin: 16px 0;\n overflow-y: auto;\n /* Chrome, Safari, Edge, Opera */\n &::-webkit-scrollbar {\n display: none;\n }\n /* Firefox */\n scrollbar-width: none;\n /* IE 10+ */\n -ms-overflow-style: none;\n `,\n\n prologue: css`\n margin-bottom: 12px;\n `,\n\n suggestion: css`\n margin-bottom: 12px;\n `,\n\n suggestContent: css`\n display: inline-flex;\n border: 2px solid #e7e7e7;\n border-radius: 8px;\n `,\n\n userMsg: css`\n display: flex;\n justify-content: flex-end;\n margin-bottom: 24px;\n `,\n\n card: css`\n padding: 12px 16px;\n background: #d5e3ff;\n border-radius: 12px;\n max-width: 100%;\n white-space: pre-line;\n word-break: break-all;\n `,\n\n botMsg: css`\n margin-bottom: 12px;\n `,\n\n // 新增样式\n welcomeWrapper: css`\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 40px 20px;\n text-align: center;\n `,\n\n welcomeIcon: css`\n width: 64px;\n height: 64px;\n border-radius: 12px;\n margin-bottom: 16px;\n `,\n\n welcomeTitle: css`\n font-size: 24px;\n font-weight: 600;\n color: rgba(0, 0, 0, 0.88);\n margin-bottom: 8px;\n `,\n\n welcomeDesc: css`\n font-size: 14px;\n color: rgba(0, 0, 0, 0.65);\n margin-bottom: 24px;\n `,\n\n suggestionWrapper: css`\n margin-top: 16px;\n `,\n\n successBadge: css`\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n background: #f6ffed;\n border: 1px solid #b7eb8f;\n border-radius: 4px;\n color: #52c41a;\n font-size: 13px;\n margin-bottom: 12px;\n `,\n\n fileSection: css`\n margin: 12px 0;\n `,\n\n fileHeader: css`\n font-size: 13px;\n color: rgba(0, 0, 0, 0.65);\n margin-bottom: 8px;\n `,\n\n metaFooter: css`\n margin-top: 12px;\n padding-top: 12px;\n border-top: 1px solid #f0f0f0;\n `,\n\n actionIcons: css`\n color: rgba(0, 0, 0, 0.45);\n\n & > span {\n cursor: pointer;\n transition: color 0.2s;\n\n &:hover {\n color: #1890ff;\n }\n }\n `,\n\n fnCall: css`\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 11px;\n border-radius: 24px;\n line-height: 16px;\n border: 1px solid #e7e7e7;\n cursor: pointer;\n `,\n\n confirm: css`\n padding: 12px;\n border-radius: 12px;\n border: 1px solid #e7e7e7;\n `,\n\n footer: css`\n /* senderWrap and tip moved to top-level keys so they are\n accessible as styles.senderWrap and styles.tip in the component */\n `,\n\n sender: css`\n width: 100%;\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 8px 8px 12px;\n border: 1px solid #e7e7e7;\n border-radius: 24px;\n\n /* .input moved to top-level key so component can use styles.input */\n `,\n\n senderWrap: css`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n `,\n\n tip: css`\n padding: 4px;\n font-size: 12px;\n text-align: center;\n color: rgba(0, 0, 0, 0.4);\n `,\n\n input: css`\n padding: 0;\n margin: 5px 0;\n line-height: 22px;\n font-size: 15px;\n border-radius: 0;\n border: none;\n\n &:focus {\n box-shadow: none;\n }\n `,\n}));\n\nexport default useStyles;\n"],"mappings":";;AAAA,SAASA,GAAG,QAAQ,cAAc;AAClC,SAASC,eAAe;AAExB,OAAO,IAAMC,SAAS,GAAGD,eAAe,CAAC;EAAA,OAAO;IAC9CE,OAAO,EAAEH,GAAG,CAAAI,eAAA,KAAAA,eAAA,GAAAC,sBAAA,svBA4BX;IAEDC,IAAI,EAAEN,GAAG,CAAAO,gBAAA,KAAAA,gBAAA,GAAAF,sBAAA,sQAYR;IAEDG,QAAQ,EAAER,GAAG,CAAAS,gBAAA,KAAAA,gBAAA,GAAAJ,sBAAA,sCAEZ;IAEDK,UAAU,EAAEV,GAAG,CAAAW,gBAAA,KAAAA,gBAAA,GAAAN,sBAAA,sCAEd;IAEDO,cAAc,EAAEZ,GAAG,CAAAa,gBAAA,KAAAA,gBAAA,GAAAR,sBAAA,gGAIlB;IAEDS,OAAO,EAAEd,GAAG,CAAAe,gBAAA,KAAAA,gBAAA,GAAAV,sBAAA,0FAIX;IAEDW,IAAI,EAAEhB,GAAG,CAAAiB,gBAAA,KAAAA,gBAAA,GAAAZ,sBAAA,uKAOR;IAEDa,MAAM,EAAElB,GAAG,CAAAmB,gBAAA,KAAAA,gBAAA,GAAAd,sBAAA,sCAEV;IAED;IACAe,cAAc,EAAEpB,GAAG,CAAAqB,gBAAA,KAAAA,gBAAA,GAAAhB,sBAAA,yIAMlB;IAEDiB,WAAW,EAAEtB,GAAG,CAAAuB,iBAAA,KAAAA,iBAAA,GAAAlB,sBAAA,qGAKf;IAEDmB,YAAY,EAAExB,GAAG,CAAAyB,iBAAA,KAAAA,iBAAA,GAAApB,sBAAA,mHAKhB;IAEDqB,WAAW,EAAE1B,GAAG,CAAA2B,iBAAA,KAAAA,iBAAA,GAAAtB,sBAAA,6FAIf;IAEDuB,iBAAiB,EAAE5B,GAAG,CAAA6B,iBAAA,KAAAA,iBAAA,GAAAxB,sBAAA,mCAErB;IAEDyB,YAAY,EAAE9B,GAAG,CAAA+B,iBAAA,KAAAA,iBAAA,GAAA1B,sBAAA,gQAWhB;IAED2B,WAAW,EAAEhC,GAAG,CAAAiC,iBAAA,KAAAA,iBAAA,GAAA5B,sBAAA,iCAEf;IAED6B,UAAU,EAAElC,GAAG,CAAAmC,iBAAA,KAAAA,iBAAA,GAAA9B,sBAAA,4FAId;IAED+B,UAAU,EAAEpC,GAAG,CAAAqC,iBAAA,KAAAA,iBAAA,GAAAhC,sBAAA,+FAId;IAEDiC,WAAW,EAAEtC,GAAG,CAAAuC,iBAAA,KAAAA,iBAAA,GAAAlC,sBAAA,kLAWf;IAEDmC,MAAM,EAAExC,GAAG,CAAAyC,iBAAA,KAAAA,iBAAA,GAAApC,sBAAA,yMASV;IAEDqC,OAAO,EAAE1C,GAAG,CAAA2C,iBAAA,KAAAA,iBAAA,GAAAtC,sBAAA,0FAIX;IAEDuC,MAAM,EAAE5C,GAAG,CAAA6C,iBAAA,KAAAA,iBAAA,GAAAxC,sBAAA,sJAGV;IAEDyC,MAAM,EAAE9C,GAAG,CAAA+C,iBAAA,KAAAA,iBAAA,GAAA1C,sBAAA,kQAUV;IAED2C,UAAU,EAAEhD,GAAG,CAAAiD,iBAAA,KAAAA,iBAAA,GAAA5C,sBAAA,8GAKd;IAED6C,GAAG,EAAElD,GAAG,CAAAmD,iBAAA,KAAAA,iBAAA,GAAA9C,sBAAA,8GAKP;IAED+C,KAAK,EAAEpD,GAAG,CAAAqD,iBAAA,KAAAA,iBAAA,GAAAhD,sBAAA;EAYZ,CAAC;AAAA,CAAC,CAAC;AAEH,eAAeH,SAAS"}
1
+ {"version":3,"names":["css","withBasicStyles","useStyles","wrapper","_templateObject","_taggedTemplateLiteral","list","_templateObject2","prologue","_templateObject3","suggestion","_templateObject4","suggestContent","_templateObject5","userMsg","_templateObject6","userContainer","_templateObject7","card","_templateObject8","botMsg","_templateObject9","welcomeWrapper","_templateObject10","welcomeIcon","_templateObject11","welcomeTitle","_templateObject12","welcomeDesc","_templateObject13","suggestionWrapper","_templateObject14","successBadge","_templateObject15","fileSection","_templateObject16","fileHeader","_templateObject17","metaFooter","_templateObject18","actionIcons","_templateObject19","fnCall","_templateObject20","confirm","_templateObject21","footer","_templateObject22","sender","_templateObject23","senderWrap","_templateObject24","tip","_templateObject25","input","_templateObject26"],"sources":["../../../../src/components/XAdkChatbot/styles.tsx"],"sourcesContent":["import { css } from \"@emotion/css\";\nimport { withBasicStyles } from \"@/styles/common\";\n\nexport const useStyles = withBasicStyles(() => ({\n wrapper: css`\n padding: 0 16px;\n min-height: 300px;\n width: 100%;\n height: 100%;\n border-radius: 8px;\n display: flex;\n flex-direction: column;\n\n .x-markdown {\n --margin-ul-ol: 0 0 1em 1em;\n\n code {\n background: rgba(150, 150, 150, 0.2);\n border-radius: 3px;\n }\n\n .ant-highlightCode-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n color: var(--ant-highlight-code-color-text-title);\n background: var(--ant-highlight-code-color-bg-title);\n padding: var(--ant-padding-sm);\n border-top-left-radius: var(--ant-border-radius);\n border-top-right-radius: var(--ant-border-radius);\n }\n }\n `,\n\n list: css`\n flex: 1;\n margin: 16px 0;\n overflow-y: auto;\n /* Chrome, Safari, Edge, Opera */\n &::-webkit-scrollbar {\n display: none;\n }\n /* Firefox */\n scrollbar-width: none;\n /* IE 10+ */\n -ms-overflow-style: none;\n `,\n\n prologue: css`\n margin-bottom: 12px;\n `,\n\n suggestion: css`\n margin-bottom: 12px;\n `,\n\n suggestContent: css`\n display: inline-flex;\n border: 2px solid #e7e7e7;\n border-radius: 8px;\n `,\n\n userMsg: css`\n display: flex;\n justify-content: flex-end;\n margin-bottom: 24px;\n `,\n\n userContainer: css`\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n align-items: flex-end;\n `,\n\n card: css`\n display: inline-flex;\n padding: 12px 16px;\n background: #d5e3ff;\n border-radius: 12px;\n max-width: 100%;\n white-space: pre-line;\n word-break: break-all;\n `,\n\n botMsg: css`\n margin-bottom: 12px;\n `,\n\n // 新增样式\n welcomeWrapper: css`\n display: flex;\n flex-direction: column;\n align-items: center;\n padding: 40px 20px;\n text-align: center;\n `,\n\n welcomeIcon: css`\n width: 64px;\n height: 64px;\n border-radius: 12px;\n margin-bottom: 16px;\n `,\n\n welcomeTitle: css`\n font-size: 24px;\n font-weight: 600;\n color: rgba(0, 0, 0, 0.88);\n margin-bottom: 8px;\n `,\n\n welcomeDesc: css`\n font-size: 14px;\n color: rgba(0, 0, 0, 0.65);\n margin-bottom: 24px;\n `,\n\n suggestionWrapper: css`\n margin-top: 16px;\n `,\n\n successBadge: css`\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 12px;\n background: #f6ffed;\n border: 1px solid #b7eb8f;\n border-radius: 4px;\n color: #52c41a;\n font-size: 13px;\n margin-bottom: 12px;\n `,\n\n fileSection: css`\n margin: 12px 0;\n `,\n\n fileHeader: css`\n font-size: 13px;\n color: rgba(0, 0, 0, 0.65);\n margin-bottom: 8px;\n `,\n\n metaFooter: css`\n margin-top: 12px;\n padding-top: 12px;\n border-top: 1px solid #f0f0f0;\n `,\n\n actionIcons: css`\n color: rgba(0, 0, 0, 0.45);\n\n & > span {\n cursor: pointer;\n transition: color 0.2s;\n\n &:hover {\n color: #1890ff;\n }\n }\n `,\n\n fnCall: css`\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 11px;\n border-radius: 24px;\n line-height: 16px;\n border: 1px solid #e7e7e7;\n cursor: pointer;\n `,\n\n confirm: css`\n padding: 12px;\n border-radius: 12px;\n border: 1px solid #e7e7e7;\n `,\n\n footer: css`\n /* senderWrap and tip moved to top-level keys so they are\n accessible as styles.senderWrap and styles.tip in the component */\n `,\n\n sender: css`\n width: 100%;\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 8px 8px 8px 12px;\n border: 1px solid #e7e7e7;\n border-radius: 24px;\n\n /* .input moved to top-level key so component can use styles.input */\n `,\n\n senderWrap: css`\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n `,\n\n tip: css`\n padding: 4px;\n font-size: 12px;\n text-align: center;\n color: rgba(0, 0, 0, 0.4);\n `,\n\n input: css`\n padding: 0;\n margin: 5px 0;\n line-height: 22px;\n font-size: 15px;\n border-radius: 0;\n border: none;\n\n &:focus {\n box-shadow: none;\n }\n `,\n}));\n\nexport default useStyles;\n"],"mappings":";;AAAA,SAASA,GAAG,QAAQ,cAAc;AAClC,SAASC,eAAe;AAExB,OAAO,IAAMC,SAAS,GAAGD,eAAe,CAAC;EAAA,OAAO;IAC9CE,OAAO,EAAEH,GAAG,CAAAI,eAAA,KAAAA,eAAA,GAAAC,sBAAA,svBA4BX;IAEDC,IAAI,EAAEN,GAAG,CAAAO,gBAAA,KAAAA,gBAAA,GAAAF,sBAAA,sQAYR;IAEDG,QAAQ,EAAER,GAAG,CAAAS,gBAAA,KAAAA,gBAAA,GAAAJ,sBAAA,sCAEZ;IAEDK,UAAU,EAAEV,GAAG,CAAAW,gBAAA,KAAAA,gBAAA,GAAAN,sBAAA,sCAEd;IAEDO,cAAc,EAAEZ,GAAG,CAAAa,gBAAA,KAAAA,gBAAA,GAAAR,sBAAA,gGAIlB;IAEDS,OAAO,EAAEd,GAAG,CAAAe,gBAAA,KAAAA,gBAAA,GAAAV,sBAAA,0FAIX;IAEDW,aAAa,EAAEhB,GAAG,CAAAiB,gBAAA,KAAAA,gBAAA,GAAAZ,sBAAA,yHAKjB;IAEDa,IAAI,EAAElB,GAAG,CAAAmB,gBAAA,KAAAA,gBAAA,GAAAd,sBAAA,kMAQR;IAEDe,MAAM,EAAEpB,GAAG,CAAAqB,gBAAA,KAAAA,gBAAA,GAAAhB,sBAAA,sCAEV;IAED;IACAiB,cAAc,EAAEtB,GAAG,CAAAuB,iBAAA,KAAAA,iBAAA,GAAAlB,sBAAA,yIAMlB;IAEDmB,WAAW,EAAExB,GAAG,CAAAyB,iBAAA,KAAAA,iBAAA,GAAApB,sBAAA,qGAKf;IAEDqB,YAAY,EAAE1B,GAAG,CAAA2B,iBAAA,KAAAA,iBAAA,GAAAtB,sBAAA,mHAKhB;IAEDuB,WAAW,EAAE5B,GAAG,CAAA6B,iBAAA,KAAAA,iBAAA,GAAAxB,sBAAA,6FAIf;IAEDyB,iBAAiB,EAAE9B,GAAG,CAAA+B,iBAAA,KAAAA,iBAAA,GAAA1B,sBAAA,mCAErB;IAED2B,YAAY,EAAEhC,GAAG,CAAAiC,iBAAA,KAAAA,iBAAA,GAAA5B,sBAAA,gQAWhB;IAED6B,WAAW,EAAElC,GAAG,CAAAmC,iBAAA,KAAAA,iBAAA,GAAA9B,sBAAA,iCAEf;IAED+B,UAAU,EAAEpC,GAAG,CAAAqC,iBAAA,KAAAA,iBAAA,GAAAhC,sBAAA,4FAId;IAEDiC,UAAU,EAAEtC,GAAG,CAAAuC,iBAAA,KAAAA,iBAAA,GAAAlC,sBAAA,+FAId;IAEDmC,WAAW,EAAExC,GAAG,CAAAyC,iBAAA,KAAAA,iBAAA,GAAApC,sBAAA,kLAWf;IAEDqC,MAAM,EAAE1C,GAAG,CAAA2C,iBAAA,KAAAA,iBAAA,GAAAtC,sBAAA,yMASV;IAEDuC,OAAO,EAAE5C,GAAG,CAAA6C,iBAAA,KAAAA,iBAAA,GAAAxC,sBAAA,0FAIX;IAEDyC,MAAM,EAAE9C,GAAG,CAAA+C,iBAAA,KAAAA,iBAAA,GAAA1C,sBAAA,sJAGV;IAED2C,MAAM,EAAEhD,GAAG,CAAAiD,iBAAA,KAAAA,iBAAA,GAAA5C,sBAAA,kQAUV;IAED6C,UAAU,EAAElD,GAAG,CAAAmD,iBAAA,KAAAA,iBAAA,GAAA9C,sBAAA,8GAKd;IAED+C,GAAG,EAAEpD,GAAG,CAAAqD,iBAAA,KAAAA,iBAAA,GAAAhD,sBAAA,8GAKP;IAEDiD,KAAK,EAAEtD,GAAG,CAAAuD,iBAAA,KAAAA,iBAAA,GAAAlD,sBAAA;EAYZ,CAAC;AAAA,CAAC,CAAC;AAEH,eAAeH,SAAS"}
@@ -97,9 +97,9 @@ export var 带会话列表 = {
97
97
  },
98
98
  args: {
99
99
  url: "https://m-poc-dev.zaxline.com",
100
- token: "eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJNRlg1VHhsaGVJS2Jla1pIS29lT1ZObG8iLCJhdWQiOiJNRlg1VHhsaGVJS2Jla1pIS29lT1ZObG8iLCJuYmYiOjE3NzM2NDk5MjIsInVzZXJfaWQiOiJWNFNPSG1KbzNaZWE0Uk51ZzdYWDJBPT0iLCJzY29wZSI6WyJNRlg1VHhsaGVJS2Jla1pIS29lT1ZObG8iXSwiaXNzIjoiaHR0cDovL2htLWF1dGgtc2VydmVyLnhsaW5lLWRldi50ZXN0LnhpbmtlLmJpeiIsImV4cCI6MTc3MzY1NzEyMiwiaWF0IjoxNzczNjQ5OTIyLCJqdGkiOiI1NzY3Mjk3MC05ZmZlLTQzYmYtOTBmMy03ZDlmNDY4OTZjMGEiLCJjbGllbnRfaWQiOiJNRlg1VHhsaGVJS2Jla1pIS29lT1ZObG8ifQ.ojer50ubE3oyBxPDW9JsZpQkzuvlbHYtLgl4jpdnUB1GSnlhNTPw9tShDuoLVjrKeeSVYsqfNTk-JN4xmYUxHs4cdy0-Sn6j2oLfbFYXI1p_8oQqOllhPKJWQA-JiOWMjm6iHpYOnotx14oGfgO6EKD2I9kLvRkje0DuEVKsj22s_XEimpfMCLtxCgn-lzmIVr90MU_1jt01q7MnPOA35rKTPlVLUg2Mw3a7JsmBPSvR25uDiX0x_ueG3riSko1cY37TXuSPIuBsD6N6aptv1RZ25-pGt6DjP3QOKnLfLc9N7_jIIcfbRzYYOOxp0Y4ond6fF5wWZI8S1wckZbBHiA",
100
+ token: "eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJENjFjOTFhM1hKZFM4cjdEeTR1cVhuWmkiLCJhdWQiOiJENjFjOTFhM1hKZFM4cjdEeTR1cVhuWmkiLCJuYmYiOjE3NzQyNDg2OTIsInVzZXJfaWQiOiJWNFNPSG1KbzNaZWE0Uk51ZzdYWDJBPT0iLCJzY29wZSI6WyJENjFjOTFhM1hKZFM4cjdEeTR1cVhuWmkiXSwiaXNzIjoiaHR0cDovL2htLWF1dGgtc2VydmVyLnhsaW5lLWRldi50ZXN0LnhpbmtlLmJpeiIsImV4cCI6MTc3NDI1NTg5MiwiaWF0IjoxNzc0MjQ4NjkyLCJqdGkiOiJmNGJiZGQxOS03OWRjLTRjZGEtOGMwYy1jZTllNWVhOTJmYzMiLCJjbGllbnRfaWQiOiJENjFjOTFhM1hKZFM4cjdEeTR1cVhuWmkifQ.AqjF0Q5Gsu25xArL9L5YDwWbHO1ZHxmr86eZSTyM-jumtzc6oLWYBIYNkRX9iXkmRryM09a5Xyn2ZjYSSomu0mudHxAK6qNHCtsIsJctxUvWL5nb-9r2DdH1lsjaD6jLOlv4DePO-ww_QOlhElSPkTO4858VWXSQNqQgD2tFOw1bFlFZvqTWUZkdS-l17tHceupBlX_VR8qn5otJaZAYaQS58uUQ3ry5AGufIYqrKeAWctmwhIX5P1D0TbIjGw91SlYds7VZrkMgMOe4DJQVjwcVfg4OnFxDwXXYjIE8ikHczwt4xFRPnRIM4W3huGdejFS04QOn95a7vdwy_Dwqbw",
101
101
  config: {
102
- appNo: "MFX5TxlheIKbekZHKoeOVNlo"
102
+ appNo: "D61c91a3XJdS8r7Dy4uqXnZi"
103
103
  }
104
104
  }
105
105
  };
@@ -1 +1 @@
1
- {"version":3,"names":["Button","Space","XAdkProvider","useChatState","useChatActions","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","meta","title","component","parameters","layout","docs","description","tags","argTypes","url","control","token","默认布局","render","args","style","height","children","config","DefaultLayout","showSessionList","allowUpload","clearBtnShow","story","appNo","带会话列表","header","showFnCallDetail","自定义布局","display","flex","flexDirection","padding","background","color","borderBottom","margin","fontSize","overflow","Messages","Sender","CustomStatsBar","_useChatState","messages","loading","appInfo","_useChatActions","chat","quickQuestions","justifyContent","alignItems","marginBottom","length","appName","wrap","map","q","i","size","onClick","text","disabled","使用Hooks","Chatbot","简化界面","width","maxWidth","borderRadius","boxShadow"],"sources":["../../../../src/components/XAdkProvider/XAdkProvider.stories.tsx"],"sourcesContent":["import type { Meta, StoryObj } from \"@storybook/react-vite\";\nimport { Button, Space } from \"antd\";\nimport XAdkProvider from \"./index\";\nimport { useChatState, useChatActions } from \"./context\";\n\nconst meta: Meta<typeof XAdkProvider> = {\n title: \"AI组件/XAdkProvider 对话容器\",\n component: XAdkProvider,\n parameters: {\n layout: \"fullscreen\",\n docs: {\n description: {\n component: `\n# XAdkProvider - 新一代 Compound Components 架构\n\n基于 Compound Components 模式的 AI 聊天 SDK,提供完全可组合的聊天界面。\n\n## 核心特性\n\n- 🧩 **完全可组合**: 自由组合子组件,构建任意布局\n- 🪝 **Hooks 访问**: 通过 Hooks 轻松访问状态和方法\n- ⚡ **性能优化**: Context 三层分离,避免不必要的 rerender\n- 🔙 **向后兼容**: 旧 API 完全保留,平滑升级\n- 📘 **TypeScript**: 完整的类型支持\n\n## 可用组件\n\n- \\`XAdkProvider.DefaultLayout\\` - 默认布局 (类似 ChatGPT/DeepSeek)\n- \\`XAdkProvider.Chatbot\\` - 完整的聊天界面 (Messages + Sender)\n- \\`XAdkProvider.Messages\\` - 消息列表\n- \\`XAdkProvider.Sender\\` - 输入框\n- \\`XAdkProvider.Sidebar\\` - 会话列表\n- \\`XAdkProvider.Header\\` - 可选头部\n\n## 可用 Hooks\n\n- \\`useChatState()\\` - 访问聊天状态\n- \\`useChatActions()\\` - 访问聊天方法\n- \\`useSession()\\` - 访问会话管理\n\n## 配置说明\n\n请在使用前配置:\n- \\`url\\`: AI 服务地址 (默认: window.location.origin)\n- \\`token\\`: 认证令牌 (必填)\n- \\`config.appNo\\`: 应用编号 (必填)\n `,\n },\n },\n },\n tags: [\"autodocs\"],\n argTypes: {\n url: {\n description: \"AI 服务地址\",\n control: \"text\",\n },\n token: {\n description: \"认证令牌\",\n control: \"text\",\n },\n },\n};\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\n// ============================================\n// 示例 1: 默认布局 (类似 ChatGPT)\n// ============================================\nexport const 默认布局: Story = {\n render: (args) => (\n <div style={{ height: \"100vh\" }}>\n <XAdkProvider url={args.url} token={args.token} config={args.config}>\n <XAdkProvider.DefaultLayout\n showSessionList={false}\n allowUpload={true}\n clearBtnShow={true}\n />\n </XAdkProvider>\n </div>\n ),\n parameters: {\n docs: {\n description: {\n story: `\n默认布局,类似 ChatGPT 的界面风格。\n\n\\`\\`\\`tsx\n<XAdkProvider url=\"...\" token=\"...\" config={{ appNo: 'xxx' }}>\n <XAdkProvider.DefaultLayout\n showSessionList={false}\n allowUpload={true}\n clearBtnShow={true}\n />\n</XAdkProvider>\n\\`\\`\\`\n `,\n },\n },\n },\n args: {\n url: \"https://m-poc-dev.zaxline.com\",\n token:\n \"eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJ3VFhIOE5SZUQ2TkloV0tWZkJRQ3hXdlMiLCJhdWQiOiJ3VFhIOE5SZUQ2TkloV0tWZkJRQ3hXdlMiLCJuYmYiOjE3NzI3ODU3OTMsInVzZXJfaWQiOiJWNFNPSG1KbzNaZWE0Uk51ZzdYWDJBPT0iLCJzY29wZSI6WyJ3VFhIOE5SZUQ2TkloV0tWZkJRQ3hXdlMiXSwiaXNzIjoiaHR0cDovL2htLWF1dGgtc2VydmVyLnhsaW5lLWRldi50ZXN0LnhpbmtlLmJpeiIsImV4cCI6MTc3Mjc5Mjk5MywiaWF0IjoxNzcyNzg1NzkzLCJqdGkiOiI4MmFjMGZmZS1lZDBlLTRiMjMtYWE3NS04NmUzZjA1OTQ2NmEiLCJjbGllbnRfaWQiOiJ3VFhIOE5SZUQ2TkloV0tWZkJRQ3hXdlMifQ.bBipIkOwu4BQqtH_ijT1V12yw5SnDpu7HAZhWrzjRSF7NUlqXr3m25f1VU_jiE9wyHO0Pj0VMMox1xVrE90JT9zgFL2sa4IDLpoHl6B2sr-3pY8WsvTLnk9PBSyTfOjmuSRwNDZyQYx0p4xJKd0yhf5Acfh5vuvH8pW7ksGpEXKvCLqc9tpeLytE1qZm_eSWt_rjTxDzvwMv33RAWO_fEigezoXfOe8ALtWpIDXEoza6cI--2buVM6-ZAFJHwe0CA_rx5E5H7QpmonUlZZhu9JVEL7HCc76MWLnuRP9TlNuicsR3JrYvkZ8nkG4oiBSWaHAgOVizGXaf2Elr7edTNA\",\n config: {\n appNo: \"wTXH8NReD6NIhWKVfBQCxWvS\",\n },\n },\n};\n\n// ============================================\n// 示例 2: 带会话列表 (类似 DeepSeek)\n// ============================================\nexport const 带会话列表: Story = {\n render: (args) => (\n <div style={{ height: \"100vh\" }}>\n <XAdkProvider url={args.url} token={args.token} config={args.config}>\n <XAdkProvider.DefaultLayout\n header={<></>}\n showSessionList={true}\n allowUpload={true}\n clearBtnShow={false}\n showFnCallDetail={true}\n />\n </XAdkProvider>\n </div>\n ),\n parameters: {\n docs: {\n description: {\n story: `\n带会话列表的布局,类似 DeepSeek/元宝 的界面风格。\n\n左侧显示历史会话列表,右侧显示聊天区域。\n\n特点:\n- ✅ 左右布局: 左侧 280px 宽的会话列表,右侧聊天区域\n- ✅ 会话管理: 支持新建、切换、重命名、删除会话\n- ✅ 自动加载: 会话列表自动加载历史记录\n- ✅ 响应式: 窄屏自动切换到侧边栏模式\n\n\\`\\`\\`tsx\n<XAdkProvider\n url=\"...\"\n token=\"...\"\n config={{\n appNo: 'xxx',\n session: {\n showSessionList: true,\n }\n }}\n>\n <XAdkProvider.DefaultLayout\n showSessionList={true}\n allowUpload={true}\n />\n</XAdkProvider>\n\\`\\`\\`\n `,\n },\n },\n },\n args: {\n url: \"https://m-poc-dev.zaxline.com\",\n token:\n \"eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJNRlg1VHhsaGVJS2Jla1pIS29lT1ZObG8iLCJhdWQiOiJNRlg1VHhsaGVJS2Jla1pIS29lT1ZObG8iLCJuYmYiOjE3NzM2NDk5MjIsInVzZXJfaWQiOiJWNFNPSG1KbzNaZWE0Uk51ZzdYWDJBPT0iLCJzY29wZSI6WyJNRlg1VHhsaGVJS2Jla1pIS29lT1ZObG8iXSwiaXNzIjoiaHR0cDovL2htLWF1dGgtc2VydmVyLnhsaW5lLWRldi50ZXN0LnhpbmtlLmJpeiIsImV4cCI6MTc3MzY1NzEyMiwiaWF0IjoxNzczNjQ5OTIyLCJqdGkiOiI1NzY3Mjk3MC05ZmZlLTQzYmYtOTBmMy03ZDlmNDY4OTZjMGEiLCJjbGllbnRfaWQiOiJNRlg1VHhsaGVJS2Jla1pIS29lT1ZObG8ifQ.ojer50ubE3oyBxPDW9JsZpQkzuvlbHYtLgl4jpdnUB1GSnlhNTPw9tShDuoLVjrKeeSVYsqfNTk-JN4xmYUxHs4cdy0-Sn6j2oLfbFYXI1p_8oQqOllhPKJWQA-JiOWMjm6iHpYOnotx14oGfgO6EKD2I9kLvRkje0DuEVKsj22s_XEimpfMCLtxCgn-lzmIVr90MU_1jt01q7MnPOA35rKTPlVLUg2Mw3a7JsmBPSvR25uDiX0x_ueG3riSko1cY37TXuSPIuBsD6N6aptv1RZ25-pGt6DjP3QOKnLfLc9N7_jIIcfbRzYYOOxp0Y4ond6fF5wWZI8S1wckZbBHiA\",\n config: {\n appNo: \"MFX5TxlheIKbekZHKoeOVNlo\",\n },\n },\n};\n\n// ============================================\n// 示例 3: 自定义布局\n// ============================================\nexport const 自定义布局: Story = {\n render: (args) => (\n <div style={{ height: \"100vh\" }}>\n <XAdkProvider url={args.url} token={args.token} config={args.config}>\n <div style={{ display: \"flex\", height: \"100%\" }}>\n {/* 左侧会话列表 */}\n {/* <div\n style={{\n width: 300,\n borderRight: \"1px solid #f0f0f0\",\n background: \"#fafafa\",\n }}\n >\n <XAdkProvider.Sidebar />\n </div> */}\n\n {/* 右侧聊天区 */}\n <div style={{ flex: 1, display: \"flex\", flexDirection: \"column\" }}>\n {/* 自定义头部 */}\n <div\n style={{\n padding: \"16px 24px\",\n background: \"linear-gradient(135deg, #667eea 0%, #764ba2 100%)\",\n color: \"white\",\n borderBottom: \"1px solid rgba(255,255,255,0.1)\",\n }}\n >\n <h2 style={{ margin: 0, fontSize: \"18px\" }}>🤖 AI 智能助手</h2>\n </div>\n\n {/* 消息区 */}\n <div style={{ flex: 1, overflow: \"hidden\", background: \"#f9fafb\" }}>\n <XAdkProvider.Messages />\n </div>\n\n {/* 输入区 */}\n <XAdkProvider.Sender allowUpload={true} clearBtnShow={true} />\n </div>\n </div>\n </XAdkProvider>\n </div>\n ),\n parameters: {\n docs: {\n description: {\n story: `\n完全自定义的布局,展示 Compound Components 的灵活性。\n\n可以任意组合 Sidebar、Messages、Sender 等组件。\n `,\n },\n },\n },\n args: {\n url: \"https://m-poc-dev.zaxline.com\",\n token:\n \"eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iLCJhdWQiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iLCJuYmYiOjE3NzMwNjI5MjUsInVzZXJfaWQiOiJWNFNPSG1KbzNaZWE0Uk51ZzdYWDJBPT0iLCJzY29wZSI6WyIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iXSwiaXNzIjoiaHR0cDovL2htLWF1dGgtc2VydmVyLnhsaW5lLWRldi50ZXN0LnhpbmtlLmJpeiIsImV4cCI6MTc3MzA3MDEyNSwiaWF0IjoxNzczMDYyOTI1LCJqdGkiOiI0YmY3MjcxOS03NzNkLTRkZGYtOGYzNC01YjAwNjA5MWE3Y2IiLCJjbGllbnRfaWQiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08ifQ.AcWWnsWZVHvvpbT9IG64oo6mNNUFDKuaTMSCRMUvgiRyfn8f4Y64GBF_VR_XhgvNgNczXx5pXlU5AEXlvwA3RXv5Voy5Vl1dvyrLOtjZivnRJVeDVzn8Af57cXKE9QBZAS94bUMAtfmZmvqer4Lw6wuFNSg6G32BCpQH6ifR8zei3scf1Gcs0QXr00KcT3dFROmAzJscJC_KnXxGx_729BlQqupdJ05KEGHDIokqJNy5Ev_40IPmW-ZDJprXpEdReHfHnPuaUgGQRAJEW2yTf2OsyNenOwA9l0iKYK1ENDnBpsr08VUgMhJBKq-quzP5AE3eLIn-3KR0O-yT4lyBiQ\",\n config: {\n appNo: \"3jt2YbDjewVn2PHRKaDfJEgO\",\n },\n },\n};\n\n// ============================================\n// 示例 4: 使用 Hooks\n// ============================================\nconst CustomStatsBar = () => {\n const { messages, loading, appInfo } = useChatState();\n const { chat } = useChatActions();\n\n const quickQuestions = [\"介绍一下你自己\", \"你能帮我做什么?\", \"如何开始使用?\"];\n\n return (\n <div\n style={{\n padding: \"16px 20px\",\n background: \"white\",\n borderBottom: \"1px solid #f0f0f0\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n marginBottom: \"12px\",\n }}\n >\n <Space>\n <span style={{ fontSize: \"12px\", color: \"#999\" }}>\n 💬 消息数: <strong>{messages.length}</strong>\n </span>\n <span style={{ fontSize: \"12px\", color: \"#999\" }}>\n 🤖 {appInfo?.appName || \"加载中...\"}\n </span>\n </Space>\n <span\n style={{ fontSize: \"12px\", color: loading ? \"#1890ff\" : \"#52c41a\" }}\n >\n {loading ? \"● 生成中...\" : \"● 就绪\"}\n </span>\n </div>\n <div style={{ fontSize: \"12px\", color: \"#666\", marginBottom: \"8px\" }}>\n 💡 快捷问题:\n </div>\n <Space wrap>\n {quickQuestions.map((q, i) => (\n <Button\n key={i}\n size=\"small\"\n onClick={() => chat({ text: q })}\n disabled={loading}\n >\n {q}\n </Button>\n ))}\n </Space>\n </div>\n );\n};\n\nexport const 使用Hooks: Story = {\n render: (args) => (\n <div style={{ height: \"100vh\" }}>\n <XAdkProvider url={args.url} token={args.token} config={args.config}>\n <div\n style={{ display: \"flex\", flexDirection: \"column\", height: \"100%\" }}\n >\n <CustomStatsBar />\n <div style={{ flex: 1 }}>\n <XAdkProvider.Chatbot />\n </div>\n </div>\n </XAdkProvider>\n </div>\n ),\n parameters: {\n docs: {\n description: {\n story: `\n使用 \\`useChatState\\` 和 \\`useChatActions\\` Hooks 访问状态和方法。\n\n可以在任意子组件中使用这些 Hooks 来访问聊天数据和操作。\n\n\\`\\`\\`tsx\nfunction CustomStatsBar() {\n const { messages, loading } = useChatState();\n const { chat } = useChatActions();\n\n return (\n <div>\n <p>消息数: {messages.length}</p>\n <button onClick={() => chat({ text: 'Hello' })}>\n 发送\n </button>\n </div>\n );\n}\n\\`\\`\\`\n `,\n },\n },\n },\n args: {\n url: \"https://m-poc-dev.zaxline.com\",\n token:\n \"eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iLCJhdWQiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iLCJuYmYiOjE3NzI3NjE1OTQsInVzZXJfaWQiOiJWNFNPSG1KbzNaZWE0Uk51ZzdYWDJBPT0iLCJzY29wZSI6WyIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iXSwiaXNzIjoiaHR0cDovL2htLWF1dGgtc2VydmVyLnhsaW5lLWRldi50ZXN0LnhpbmtlLmJpeiIsImV4cCI6MTc3Mjc2ODc5NCwiaWF0IjoxNzcyNzYxNTk0LCJqdGkiOiI2M2IyMjRkNC1iODY3LTQzNjYtYTM5ZC1hZjNmOWQ0M2YyZmMiLCJjbGllbnRfaWQiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08ifQ.QNI4bD6MjIIvv-_SFxYEOiNv9304Ps5WF3b8_qmi3YIrqJQiaJ-iT1_fENpe9dD25RXcpgIv2Xnz9cI3Lz3gHfPKwoefijhrD7_Ye-9C5ztM2OI5pfoUurc1xPvjS7FGrTMZHNbpIFXyPoDAxtzGt-hLoQAEhBhLib8lLAbAQACmBOYy3KGwJg4sSFvbLkGWgqkH2aqC8MdH50ce35leybbEJu7ImithH3rj4E2oF6EqTb3vK181DFooEJ9E_LaC_hrw8zqGh9PSJah1rO3nxUDOPnz946RLKUi0xLOtz42l6qY2nUFsd9axYunGnk2ds5gg-PcBZN_X_aa-w7SLnw\",\n config: {\n appNo: \"3jt2YbDjewVn2PHRKaDfJEgO\",\n },\n },\n};\n\n// ============================================\n// 示例 5: 简化的 Chatbot\n// ============================================\nexport const 简化界面: Story = {\n render: (args) => (\n <div\n style={{\n height: \"100vh\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n background: \"#f5f5f5\",\n padding: \"40px\",\n }}\n >\n <div\n style={{\n width: \"100%\",\n maxWidth: \"900px\",\n height: \"700px\",\n background: \"white\",\n borderRadius: \"12px\",\n overflow: \"hidden\",\n boxShadow: \"0 8px 24px rgba(0,0,0,0.12)\",\n }}\n >\n <XAdkProvider url={args.url} token={args.token} config={args.config}>\n <XAdkProvider.Chatbot />\n </XAdkProvider>\n </div>\n </div>\n ),\n parameters: {\n docs: {\n description: {\n story: `\n最简化的聊天界面,只包含消息列表和输入框。\n\n适合嵌入到其他页面或作为对话窗口使用。\n\n\\`\\`\\`tsx\n<XAdkProvider url=\"...\" token=\"...\" config={{ appNo: 'xxx' }}>\n <XAdkProvider.Chatbot />\n</XAdkProvider>\n\\`\\`\\`\n `,\n },\n },\n },\n args: {\n url: \"https://m-poc-dev.zaxline.com\",\n token:\n \"eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iLCJhdWQiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iLCJuYmYiOjE3NzI3NjE1OTQsInVzZXJfaWQiOiJWNFNPSG1KbzNaZWE0Uk51ZzdYWDJBPT0iLCJzY29wZSI6WyIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iXSwiaXNzIjoiaHR0cDovL2htLWF1dGgtc2VydmVyLnhsaW5lLWRldi50ZXN0LnhpbmtlLmJpeiIsImV4cCI6MTc3Mjc2ODc5NCwiaWF0IjoxNzcyNzYxNTk0LCJqdGkiOiI2M2IyMjRkNC1iODY3LTQzNjYtYTM5ZC1hZjNmOWQ0M2YyZmMiLCJjbGllbnRfaWQiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08ifQ.QNI4bD6MjIIvv-_SFxYEOiNv9304Ps5WF3b8_qmi3YIrqJQiaJ-iT1_fENpe9dD25RXcpgIv2Xnz9cI3Lz3gHfPKwoefijhrD7_Ye-9C5ztM2OI5pfoUurc1xPvjS7FGrTMZHNbpIFXyPoDAxtzGt-hLoQAEhBhLib8lLAbAQACmBOYy3KGwJg4sSFvbLkGWgqkH2aqC8MdH50ce35leybbEJu7ImithH3rj4E2oF6EqTb3vK181DFooEJ9E_LaC_hrw8zqGh9PSJah1rO3nxUDOPnz946RLKUi0xLOtz42l6qY2nUFsd9axYunGnk2ds5gg-PcBZN_X_aa-w7SLnw\",\n config: {\n appNo: \"3jt2YbDjewVn2PHRKaDfJEgO\",\n },\n },\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["Button","Space","XAdkProvider","useChatState","useChatActions","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","meta","title","component","parameters","layout","docs","description","tags","argTypes","url","control","token","默认布局","render","args","style","height","children","config","DefaultLayout","showSessionList","allowUpload","clearBtnShow","story","appNo","带会话列表","header","showFnCallDetail","自定义布局","display","flex","flexDirection","padding","background","color","borderBottom","margin","fontSize","overflow","Messages","Sender","CustomStatsBar","_useChatState","messages","loading","appInfo","_useChatActions","chat","quickQuestions","justifyContent","alignItems","marginBottom","length","appName","wrap","map","q","i","size","onClick","text","disabled","使用Hooks","Chatbot","简化界面","width","maxWidth","borderRadius","boxShadow"],"sources":["../../../../src/components/XAdkProvider/XAdkProvider.stories.tsx"],"sourcesContent":["import type { Meta, StoryObj } from \"@storybook/react-vite\";\nimport { Button, Space } from \"antd\";\nimport XAdkProvider from \"./index\";\nimport { useChatState, useChatActions } from \"./context\";\n\nconst meta: Meta<typeof XAdkProvider> = {\n title: \"AI组件/XAdkProvider 对话容器\",\n component: XAdkProvider,\n parameters: {\n layout: \"fullscreen\",\n docs: {\n description: {\n component: `\n# XAdkProvider - 新一代 Compound Components 架构\n\n基于 Compound Components 模式的 AI 聊天 SDK,提供完全可组合的聊天界面。\n\n## 核心特性\n\n- 🧩 **完全可组合**: 自由组合子组件,构建任意布局\n- 🪝 **Hooks 访问**: 通过 Hooks 轻松访问状态和方法\n- ⚡ **性能优化**: Context 三层分离,避免不必要的 rerender\n- 🔙 **向后兼容**: 旧 API 完全保留,平滑升级\n- 📘 **TypeScript**: 完整的类型支持\n\n## 可用组件\n\n- \\`XAdkProvider.DefaultLayout\\` - 默认布局 (类似 ChatGPT/DeepSeek)\n- \\`XAdkProvider.Chatbot\\` - 完整的聊天界面 (Messages + Sender)\n- \\`XAdkProvider.Messages\\` - 消息列表\n- \\`XAdkProvider.Sender\\` - 输入框\n- \\`XAdkProvider.Sidebar\\` - 会话列表\n- \\`XAdkProvider.Header\\` - 可选头部\n\n## 可用 Hooks\n\n- \\`useChatState()\\` - 访问聊天状态\n- \\`useChatActions()\\` - 访问聊天方法\n- \\`useSession()\\` - 访问会话管理\n\n## 配置说明\n\n请在使用前配置:\n- \\`url\\`: AI 服务地址 (默认: window.location.origin)\n- \\`token\\`: 认证令牌 (必填)\n- \\`config.appNo\\`: 应用编号 (必填)\n `,\n },\n },\n },\n tags: [\"autodocs\"],\n argTypes: {\n url: {\n description: \"AI 服务地址\",\n control: \"text\",\n },\n token: {\n description: \"认证令牌\",\n control: \"text\",\n },\n },\n};\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\n// ============================================\n// 示例 1: 默认布局 (类似 ChatGPT)\n// ============================================\nexport const 默认布局: Story = {\n render: (args) => (\n <div style={{ height: \"100vh\" }}>\n <XAdkProvider url={args.url} token={args.token} config={args.config}>\n <XAdkProvider.DefaultLayout\n showSessionList={false}\n allowUpload={true}\n clearBtnShow={true}\n />\n </XAdkProvider>\n </div>\n ),\n parameters: {\n docs: {\n description: {\n story: `\n默认布局,类似 ChatGPT 的界面风格。\n\n\\`\\`\\`tsx\n<XAdkProvider url=\"...\" token=\"...\" config={{ appNo: 'xxx' }}>\n <XAdkProvider.DefaultLayout\n showSessionList={false}\n allowUpload={true}\n clearBtnShow={true}\n />\n</XAdkProvider>\n\\`\\`\\`\n `,\n },\n },\n },\n args: {\n url: \"https://m-poc-dev.zaxline.com\",\n token:\n \"eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJ3VFhIOE5SZUQ2TkloV0tWZkJRQ3hXdlMiLCJhdWQiOiJ3VFhIOE5SZUQ2TkloV0tWZkJRQ3hXdlMiLCJuYmYiOjE3NzI3ODU3OTMsInVzZXJfaWQiOiJWNFNPSG1KbzNaZWE0Uk51ZzdYWDJBPT0iLCJzY29wZSI6WyJ3VFhIOE5SZUQ2TkloV0tWZkJRQ3hXdlMiXSwiaXNzIjoiaHR0cDovL2htLWF1dGgtc2VydmVyLnhsaW5lLWRldi50ZXN0LnhpbmtlLmJpeiIsImV4cCI6MTc3Mjc5Mjk5MywiaWF0IjoxNzcyNzg1NzkzLCJqdGkiOiI4MmFjMGZmZS1lZDBlLTRiMjMtYWE3NS04NmUzZjA1OTQ2NmEiLCJjbGllbnRfaWQiOiJ3VFhIOE5SZUQ2TkloV0tWZkJRQ3hXdlMifQ.bBipIkOwu4BQqtH_ijT1V12yw5SnDpu7HAZhWrzjRSF7NUlqXr3m25f1VU_jiE9wyHO0Pj0VMMox1xVrE90JT9zgFL2sa4IDLpoHl6B2sr-3pY8WsvTLnk9PBSyTfOjmuSRwNDZyQYx0p4xJKd0yhf5Acfh5vuvH8pW7ksGpEXKvCLqc9tpeLytE1qZm_eSWt_rjTxDzvwMv33RAWO_fEigezoXfOe8ALtWpIDXEoza6cI--2buVM6-ZAFJHwe0CA_rx5E5H7QpmonUlZZhu9JVEL7HCc76MWLnuRP9TlNuicsR3JrYvkZ8nkG4oiBSWaHAgOVizGXaf2Elr7edTNA\",\n config: {\n appNo: \"wTXH8NReD6NIhWKVfBQCxWvS\",\n },\n },\n};\n\n// ============================================\n// 示例 2: 带会话列表 (类似 DeepSeek)\n// ============================================\nexport const 带会话列表: Story = {\n render: (args) => (\n <div style={{ height: \"100vh\" }}>\n <XAdkProvider url={args.url} token={args.token} config={args.config}>\n <XAdkProvider.DefaultLayout\n header={<></>}\n showSessionList={true}\n allowUpload={true}\n clearBtnShow={false}\n showFnCallDetail={true}\n />\n </XAdkProvider>\n </div>\n ),\n parameters: {\n docs: {\n description: {\n story: `\n带会话列表的布局,类似 DeepSeek/元宝 的界面风格。\n\n左侧显示历史会话列表,右侧显示聊天区域。\n\n特点:\n- ✅ 左右布局: 左侧 280px 宽的会话列表,右侧聊天区域\n- ✅ 会话管理: 支持新建、切换、重命名、删除会话\n- ✅ 自动加载: 会话列表自动加载历史记录\n- ✅ 响应式: 窄屏自动切换到侧边栏模式\n\n\\`\\`\\`tsx\n<XAdkProvider\n url=\"...\"\n token=\"...\"\n config={{\n appNo: 'xxx',\n session: {\n showSessionList: true,\n }\n }}\n>\n <XAdkProvider.DefaultLayout\n showSessionList={true}\n allowUpload={true}\n />\n</XAdkProvider>\n\\`\\`\\`\n `,\n },\n },\n },\n args: {\n url: \"https://m-poc-dev.zaxline.com\",\n token:\n \"eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJENjFjOTFhM1hKZFM4cjdEeTR1cVhuWmkiLCJhdWQiOiJENjFjOTFhM1hKZFM4cjdEeTR1cVhuWmkiLCJuYmYiOjE3NzQyNDg2OTIsInVzZXJfaWQiOiJWNFNPSG1KbzNaZWE0Uk51ZzdYWDJBPT0iLCJzY29wZSI6WyJENjFjOTFhM1hKZFM4cjdEeTR1cVhuWmkiXSwiaXNzIjoiaHR0cDovL2htLWF1dGgtc2VydmVyLnhsaW5lLWRldi50ZXN0LnhpbmtlLmJpeiIsImV4cCI6MTc3NDI1NTg5MiwiaWF0IjoxNzc0MjQ4NjkyLCJqdGkiOiJmNGJiZGQxOS03OWRjLTRjZGEtOGMwYy1jZTllNWVhOTJmYzMiLCJjbGllbnRfaWQiOiJENjFjOTFhM1hKZFM4cjdEeTR1cVhuWmkifQ.AqjF0Q5Gsu25xArL9L5YDwWbHO1ZHxmr86eZSTyM-jumtzc6oLWYBIYNkRX9iXkmRryM09a5Xyn2ZjYSSomu0mudHxAK6qNHCtsIsJctxUvWL5nb-9r2DdH1lsjaD6jLOlv4DePO-ww_QOlhElSPkTO4858VWXSQNqQgD2tFOw1bFlFZvqTWUZkdS-l17tHceupBlX_VR8qn5otJaZAYaQS58uUQ3ry5AGufIYqrKeAWctmwhIX5P1D0TbIjGw91SlYds7VZrkMgMOe4DJQVjwcVfg4OnFxDwXXYjIE8ikHczwt4xFRPnRIM4W3huGdejFS04QOn95a7vdwy_Dwqbw\",\n config: {\n appNo: \"D61c91a3XJdS8r7Dy4uqXnZi\",\n },\n },\n};\n\n// ============================================\n// 示例 3: 自定义布局\n// ============================================\nexport const 自定义布局: Story = {\n render: (args) => (\n <div style={{ height: \"100vh\" }}>\n <XAdkProvider url={args.url} token={args.token} config={args.config}>\n <div style={{ display: \"flex\", height: \"100%\" }}>\n {/* 左侧会话列表 */}\n {/* <div\n style={{\n width: 300,\n borderRight: \"1px solid #f0f0f0\",\n background: \"#fafafa\",\n }}\n >\n <XAdkProvider.Sidebar />\n </div> */}\n\n {/* 右侧聊天区 */}\n <div style={{ flex: 1, display: \"flex\", flexDirection: \"column\" }}>\n {/* 自定义头部 */}\n <div\n style={{\n padding: \"16px 24px\",\n background: \"linear-gradient(135deg, #667eea 0%, #764ba2 100%)\",\n color: \"white\",\n borderBottom: \"1px solid rgba(255,255,255,0.1)\",\n }}\n >\n <h2 style={{ margin: 0, fontSize: \"18px\" }}>🤖 AI 智能助手</h2>\n </div>\n\n {/* 消息区 */}\n <div style={{ flex: 1, overflow: \"hidden\", background: \"#f9fafb\" }}>\n <XAdkProvider.Messages />\n </div>\n\n {/* 输入区 */}\n <XAdkProvider.Sender allowUpload={true} clearBtnShow={true} />\n </div>\n </div>\n </XAdkProvider>\n </div>\n ),\n parameters: {\n docs: {\n description: {\n story: `\n完全自定义的布局,展示 Compound Components 的灵活性。\n\n可以任意组合 Sidebar、Messages、Sender 等组件。\n `,\n },\n },\n },\n args: {\n url: \"https://m-poc-dev.zaxline.com\",\n token:\n \"eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iLCJhdWQiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iLCJuYmYiOjE3NzMwNjI5MjUsInVzZXJfaWQiOiJWNFNPSG1KbzNaZWE0Uk51ZzdYWDJBPT0iLCJzY29wZSI6WyIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iXSwiaXNzIjoiaHR0cDovL2htLWF1dGgtc2VydmVyLnhsaW5lLWRldi50ZXN0LnhpbmtlLmJpeiIsImV4cCI6MTc3MzA3MDEyNSwiaWF0IjoxNzczMDYyOTI1LCJqdGkiOiI0YmY3MjcxOS03NzNkLTRkZGYtOGYzNC01YjAwNjA5MWE3Y2IiLCJjbGllbnRfaWQiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08ifQ.AcWWnsWZVHvvpbT9IG64oo6mNNUFDKuaTMSCRMUvgiRyfn8f4Y64GBF_VR_XhgvNgNczXx5pXlU5AEXlvwA3RXv5Voy5Vl1dvyrLOtjZivnRJVeDVzn8Af57cXKE9QBZAS94bUMAtfmZmvqer4Lw6wuFNSg6G32BCpQH6ifR8zei3scf1Gcs0QXr00KcT3dFROmAzJscJC_KnXxGx_729BlQqupdJ05KEGHDIokqJNy5Ev_40IPmW-ZDJprXpEdReHfHnPuaUgGQRAJEW2yTf2OsyNenOwA9l0iKYK1ENDnBpsr08VUgMhJBKq-quzP5AE3eLIn-3KR0O-yT4lyBiQ\",\n config: {\n appNo: \"3jt2YbDjewVn2PHRKaDfJEgO\",\n },\n },\n};\n\n// ============================================\n// 示例 4: 使用 Hooks\n// ============================================\nconst CustomStatsBar = () => {\n const { messages, loading, appInfo } = useChatState();\n const { chat } = useChatActions();\n\n const quickQuestions = [\"介绍一下你自己\", \"你能帮我做什么?\", \"如何开始使用?\"];\n\n return (\n <div\n style={{\n padding: \"16px 20px\",\n background: \"white\",\n borderBottom: \"1px solid #f0f0f0\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n marginBottom: \"12px\",\n }}\n >\n <Space>\n <span style={{ fontSize: \"12px\", color: \"#999\" }}>\n 💬 消息数: <strong>{messages.length}</strong>\n </span>\n <span style={{ fontSize: \"12px\", color: \"#999\" }}>\n 🤖 {appInfo?.appName || \"加载中...\"}\n </span>\n </Space>\n <span\n style={{ fontSize: \"12px\", color: loading ? \"#1890ff\" : \"#52c41a\" }}\n >\n {loading ? \"● 生成中...\" : \"● 就绪\"}\n </span>\n </div>\n <div style={{ fontSize: \"12px\", color: \"#666\", marginBottom: \"8px\" }}>\n 💡 快捷问题:\n </div>\n <Space wrap>\n {quickQuestions.map((q, i) => (\n <Button\n key={i}\n size=\"small\"\n onClick={() => chat({ text: q })}\n disabled={loading}\n >\n {q}\n </Button>\n ))}\n </Space>\n </div>\n );\n};\n\nexport const 使用Hooks: Story = {\n render: (args) => (\n <div style={{ height: \"100vh\" }}>\n <XAdkProvider url={args.url} token={args.token} config={args.config}>\n <div\n style={{ display: \"flex\", flexDirection: \"column\", height: \"100%\" }}\n >\n <CustomStatsBar />\n <div style={{ flex: 1 }}>\n <XAdkProvider.Chatbot />\n </div>\n </div>\n </XAdkProvider>\n </div>\n ),\n parameters: {\n docs: {\n description: {\n story: `\n使用 \\`useChatState\\` 和 \\`useChatActions\\` Hooks 访问状态和方法。\n\n可以在任意子组件中使用这些 Hooks 来访问聊天数据和操作。\n\n\\`\\`\\`tsx\nfunction CustomStatsBar() {\n const { messages, loading } = useChatState();\n const { chat } = useChatActions();\n\n return (\n <div>\n <p>消息数: {messages.length}</p>\n <button onClick={() => chat({ text: 'Hello' })}>\n 发送\n </button>\n </div>\n );\n}\n\\`\\`\\`\n `,\n },\n },\n },\n args: {\n url: \"https://m-poc-dev.zaxline.com\",\n token:\n \"eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iLCJhdWQiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iLCJuYmYiOjE3NzI3NjE1OTQsInVzZXJfaWQiOiJWNFNPSG1KbzNaZWE0Uk51ZzdYWDJBPT0iLCJzY29wZSI6WyIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iXSwiaXNzIjoiaHR0cDovL2htLWF1dGgtc2VydmVyLnhsaW5lLWRldi50ZXN0LnhpbmtlLmJpeiIsImV4cCI6MTc3Mjc2ODc5NCwiaWF0IjoxNzcyNzYxNTk0LCJqdGkiOiI2M2IyMjRkNC1iODY3LTQzNjYtYTM5ZC1hZjNmOWQ0M2YyZmMiLCJjbGllbnRfaWQiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08ifQ.QNI4bD6MjIIvv-_SFxYEOiNv9304Ps5WF3b8_qmi3YIrqJQiaJ-iT1_fENpe9dD25RXcpgIv2Xnz9cI3Lz3gHfPKwoefijhrD7_Ye-9C5ztM2OI5pfoUurc1xPvjS7FGrTMZHNbpIFXyPoDAxtzGt-hLoQAEhBhLib8lLAbAQACmBOYy3KGwJg4sSFvbLkGWgqkH2aqC8MdH50ce35leybbEJu7ImithH3rj4E2oF6EqTb3vK181DFooEJ9E_LaC_hrw8zqGh9PSJah1rO3nxUDOPnz946RLKUi0xLOtz42l6qY2nUFsd9axYunGnk2ds5gg-PcBZN_X_aa-w7SLnw\",\n config: {\n appNo: \"3jt2YbDjewVn2PHRKaDfJEgO\",\n },\n },\n};\n\n// ============================================\n// 示例 5: 简化的 Chatbot\n// ============================================\nexport const 简化界面: Story = {\n render: (args) => (\n <div\n style={{\n height: \"100vh\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n background: \"#f5f5f5\",\n padding: \"40px\",\n }}\n >\n <div\n style={{\n width: \"100%\",\n maxWidth: \"900px\",\n height: \"700px\",\n background: \"white\",\n borderRadius: \"12px\",\n overflow: \"hidden\",\n boxShadow: \"0 8px 24px rgba(0,0,0,0.12)\",\n }}\n >\n <XAdkProvider url={args.url} token={args.token} config={args.config}>\n <XAdkProvider.Chatbot />\n </XAdkProvider>\n </div>\n </div>\n ),\n parameters: {\n docs: {\n description: {\n story: `\n最简化的聊天界面,只包含消息列表和输入框。\n\n适合嵌入到其他页面或作为对话窗口使用。\n\n\\`\\`\\`tsx\n<XAdkProvider url=\"...\" token=\"...\" config={{ appNo: 'xxx' }}>\n <XAdkProvider.Chatbot />\n</XAdkProvider>\n\\`\\`\\`\n `,\n },\n },\n },\n args: {\n url: \"https://m-poc-dev.zaxline.com\",\n token:\n \"eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iLCJhdWQiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iLCJuYmYiOjE3NzI3NjE1OTQsInVzZXJfaWQiOiJWNFNPSG1KbzNaZWE0Uk51ZzdYWDJBPT0iLCJzY29wZSI6WyIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iXSwiaXNzIjoiaHR0cDovL2htLWF1dGgtc2VydmVyLnhsaW5lLWRldi50ZXN0LnhpbmtlLmJpeiIsImV4cCI6MTc3Mjc2ODc5NCwiaWF0IjoxNzcyNzYxNTk0LCJqdGkiOiI2M2IyMjRkNC1iODY3LTQzNjYtYTM5ZC1hZjNmOWQ0M2YyZmMiLCJjbGllbnRfaWQiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08ifQ.QNI4bD6MjIIvv-_SFxYEOiNv9304Ps5WF3b8_qmi3YIrqJQiaJ-iT1_fENpe9dD25RXcpgIv2Xnz9cI3Lz3gHfPKwoefijhrD7_Ye-9C5ztM2OI5pfoUurc1xPvjS7FGrTMZHNbpIFXyPoDAxtzGt-hLoQAEhBhLib8lLAbAQACmBOYy3KGwJg4sSFvbLkGWgqkH2aqC8MdH50ce35leybbEJu7ImithH3rj4E2oF6EqTb3vK181DFooEJ9E_LaC_hrw8zqGh9PSJah1rO3nxUDOPnz946RLKUi0xLOtz42l6qY2nUFsd9axYunGnk2ds5gg-PcBZN_X_aa-w7SLnw\",\n config: {\n appNo: \"3jt2YbDjewVn2PHRKaDfJEgO\",\n },\n },\n};\n"],"mappings":"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"}
@@ -1,8 +1,16 @@
1
- import React from "react";
1
+ import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
2
+ import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
3
+ import React, { useCallback } from "react";
4
+ import { message, Tooltip, Flex } from "antd";
5
+ import { LikeFilled, LikeOutlined, ReloadOutlined, CopyOutlined } from "@ant-design/icons";
6
+ import copy from "copy-to-clipboard";
2
7
  import XAdkChatbot from "../../XAdkChatbot";
8
+ import DislikeFeedback from "./DislikeFeedBack";
3
9
  import { useChatState } from "../context/ChatStateContext";
4
10
  import { useChatActions } from "../context/ChatActionContext";
5
11
  import { jsx as _jsx } from "react/jsx-runtime";
12
+ import { Fragment as _Fragment } from "react/jsx-runtime";
13
+ import { jsxs as _jsxs } from "react/jsx-runtime";
6
14
  /**
7
15
  * Messages - XAdkProvider 的消息展示组件
8
16
  *
@@ -16,24 +24,128 @@ var Messages = function Messages(_ref) {
16
24
  messages = _useChatState.messages,
17
25
  loading = _useChatState.loading,
18
26
  prologue = _useChatState.prologue,
19
- suggestions = _useChatState.suggestions;
27
+ suggestions = _useChatState.suggestions,
28
+ initialized = _useChatState.initialized,
29
+ showFeedback = _useChatState.showFeedback,
30
+ appInfo = _useChatState.appInfo;
20
31
  var _useChatActions = useChatActions(),
21
32
  suggestChat = _useChatActions.suggestChat,
22
- reChat = _useChatActions.reChat;
33
+ reChat = _useChatActions.reChat,
34
+ likeMessage = _useChatActions.likeMessage;
35
+ var primaryColor = (appInfo === null || appInfo === void 0 ? void 0 : appInfo.appTheme) || "#1677ff";
36
+ var defaultActions = useCallback(function (_ref2) {
37
+ var _group$isLike;
38
+ var group = _ref2.message,
39
+ isLastBotMsg = _ref2.isLastBotMsg;
40
+ // 取该组最后一条 bot 消息的 invocationId 和 isLike 状态
41
+ var lastMsg = group.msgs[group.msgs.length - 1];
42
+ var invocationId = lastMsg === null || lastMsg === void 0 ? void 0 : lastMsg.invocationId;
43
+ var isLikeVal = (_group$isLike = group.isLike) !== null && _group$isLike !== void 0 ? _group$isLike : 0;
44
+ var fullText = group.msgs.filter(function (m) {
45
+ return !m.functionCall && !m.functionResponse;
46
+ }).map(function (m) {
47
+ return m.text || "";
48
+ }).join("");
49
+ return /*#__PURE__*/_jsxs(Flex, {
50
+ gap: 16,
51
+ align: "center",
52
+ style: {
53
+ padding: "4px 0",
54
+ color: "#81858c"
55
+ },
56
+ children: [isLastBotMsg && /*#__PURE__*/_jsx(Tooltip, {
57
+ title: "\u91CD\u65B0\u751F\u6210",
58
+ children: /*#__PURE__*/_jsx(ReloadOutlined, {
59
+ style: {
60
+ cursor: "pointer"
61
+ },
62
+ onClick: reChat
63
+ })
64
+ }), /*#__PURE__*/_jsx(Tooltip, {
65
+ title: "\u590D\u5236\u5185\u5BB9",
66
+ children: /*#__PURE__*/_jsx(CopyOutlined, {
67
+ style: {
68
+ cursor: "pointer"
69
+ },
70
+ onClick: function onClick() {
71
+ copy(fullText);
72
+ message.success("复制成功");
73
+ }
74
+ })
75
+ }), showFeedback && invocationId && /*#__PURE__*/_jsxs(_Fragment, {
76
+ children: [/*#__PURE__*/_jsx(Tooltip, {
77
+ title: "\u8D5E",
78
+ children: isLikeVal === 1 ? /*#__PURE__*/_jsx(LikeFilled, {
79
+ style: {
80
+ color: primaryColor,
81
+ cursor: "pointer"
82
+ }
83
+ }) : /*#__PURE__*/_jsx(LikeOutlined, {
84
+ style: {
85
+ cursor: "pointer"
86
+ },
87
+ onClick: /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
88
+ var ok;
89
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
90
+ while (1) switch (_context.prev = _context.next) {
91
+ case 0:
92
+ if (!(isLikeVal !== 0)) {
93
+ _context.next = 3;
94
+ break;
95
+ }
96
+ message.warning("已收到您的反馈,无需重复提交");
97
+ return _context.abrupt("return");
98
+ case 3:
99
+ _context.next = 5;
100
+ return likeMessage(invocationId, 1);
101
+ case 5:
102
+ ok = _context.sent;
103
+ if (ok) message.success("感谢您的反馈");else message.error("反馈失败,请稍后再试");
104
+ case 7:
105
+ case "end":
106
+ return _context.stop();
107
+ }
108
+ }, _callee);
109
+ }))
110
+ })
111
+ }), /*#__PURE__*/_jsx(DislikeFeedback, {
112
+ msg: group,
113
+ activeColor: primaryColor,
114
+ onSubmit: ( /*#__PURE__*/function () {
115
+ var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(formData) {
116
+ var ok;
117
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
118
+ while (1) switch (_context2.prev = _context2.next) {
119
+ case 0:
120
+ _context2.next = 2;
121
+ return likeMessage(invocationId, -1, formData);
122
+ case 2:
123
+ ok = _context2.sent;
124
+ if (ok) message.success("已收到您的反馈,我们会努力做得更好");else message.error("反馈失败,请稍后再试");
125
+ return _context2.abrupt("return", ok);
126
+ case 5:
127
+ case "end":
128
+ return _context2.stop();
129
+ }
130
+ }, _callee2);
131
+ }));
132
+ return function (_x) {
133
+ return _ref4.apply(this, arguments);
134
+ };
135
+ }())
136
+ })]
137
+ })]
138
+ });
139
+ }, [reChat, likeMessage, showFeedback, primaryColor]);
23
140
  return /*#__PURE__*/_jsx(XAdkChatbot, {
24
141
  messages: messages,
25
142
  loading: loading,
26
143
  prologue: prologue,
27
144
  suggestions: suggestions,
28
145
  onSuggest: suggestChat
29
- // 操作栏
146
+ // 操作栏:使用外部传入的 actions,否则用内置默认 actions
30
147
  ,
31
- showRetry: true,
32
- showCopy: true,
33
- showLog: false,
34
- onRetry: reChat,
35
- onShowLog: function onShowLog() {},
36
- actions: actions
148
+ actions: actions !== null && actions !== void 0 ? actions : defaultActions
37
149
  // 启用分组和解析
38
150
  ,
39
151
  enableGrouping: true,
@@ -42,7 +154,8 @@ var Messages = function Messages(_ref) {
42
154
  ,
43
155
  parseOptions: {
44
156
  mode: "comment"
45
- }
157
+ },
158
+ initialized: initialized
46
159
  // 样式
47
160
  ,
48
161
  className: className,
@@ -1 +1 @@
1
- {"version":3,"names":["React","XAdkChatbot","useChatState","useChatActions","jsx","_jsx","Messages","_ref","actions","className","style","_useChatState","messages","loading","prologue","suggestions","_useChatActions","suggestChat","reChat","onSuggest","showRetry","showCopy","showLog","onRetry","onShowLog","enableGrouping","enableProcessParsing","parseOptions","mode"],"sources":["../../../../../src/components/XAdkProvider/compound/Messages.tsx"],"sourcesContent":["import React from \"react\";\nimport XAdkChatbot from \"../../XAdkChatbot\";\nimport { useChatState } from \"../context/ChatStateContext\";\nimport { useChatActions } from \"../context/ChatActionContext\";\nimport type { ActionProps } from \"@/types\";\n\nexport interface XAdkMessagesProps {\n /** 自定义操作栏渲染 */\n actions?: ActionProps;\n /** 类名 */\n className?: string;\n /** 样式 */\n style?: React.CSSProperties;\n}\n\n/**\n * Messages - XAdkProvider 的消息展示组件\n *\n * 使用 XAdkChatbot 渲染消息列表\n */\nconst Messages: React.FC<XAdkMessagesProps> = ({\n actions,\n className,\n style,\n}) => {\n const { messages, loading, prologue, suggestions } = useChatState();\n const { suggestChat, reChat } = useChatActions();\n\n return (\n <XAdkChatbot\n messages={messages}\n loading={loading}\n prologue={prologue}\n suggestions={suggestions}\n onSuggest={suggestChat}\n // 操作栏\n showRetry\n showCopy\n showLog={false}\n onRetry={reChat}\n onShowLog={() => {}}\n actions={actions}\n // 启用分组和解析\n enableGrouping={true}\n enableProcessParsing={true}\n // 使用注释模式解析\n parseOptions={{ mode: \"comment\" }}\n // 样式\n className={className}\n style={style}\n />\n );\n};\n\nexport default Messages;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,WAAW;AAClB,SAASC,YAAY;AACrB,SAASC,cAAc;AAAuC,SAAAC,GAAA,IAAAC,IAAA;AAY9D;AACA;AACA;AACA;AACA;AACA,IAAMC,QAAqC,GAAG,SAAxCA,QAAqCA,CAAAC,IAAA,EAIrC;EAAA,IAHJC,OAAO,GAAAD,IAAA,CAAPC,OAAO;IACPC,SAAS,GAAAF,IAAA,CAATE,SAAS;IACTC,KAAK,GAAAH,IAAA,CAALG,KAAK;EAEL,IAAAC,aAAA,GAAqDT,YAAY,CAAC,CAAC;IAA3DU,QAAQ,GAAAD,aAAA,CAARC,QAAQ;IAAEC,OAAO,GAAAF,aAAA,CAAPE,OAAO;IAAEC,QAAQ,GAAAH,aAAA,CAARG,QAAQ;IAAEC,WAAW,GAAAJ,aAAA,CAAXI,WAAW;EAChD,IAAAC,eAAA,GAAgCb,cAAc,CAAC,CAAC;IAAxCc,WAAW,GAAAD,eAAA,CAAXC,WAAW;IAAEC,MAAM,GAAAF,eAAA,CAANE,MAAM;EAE3B,oBACEb,IAAA,CAACJ,WAAW;IACVW,QAAQ,EAAEA,QAAS;IACnBC,OAAO,EAAEA,OAAQ;IACjBC,QAAQ,EAAEA,QAAS;IACnBC,WAAW,EAAEA,WAAY;IACzBI,SAAS,EAAEF;IACX;IAAA;IACAG,SAAS;IACTC,QAAQ;IACRC,OAAO,EAAE,KAAM;IACfC,OAAO,EAAEL,MAAO;IAChBM,SAAS,EAAE,SAAAA,UAAA,EAAM,CAAC,CAAE;IACpBhB,OAAO,EAAEA;IACT;IAAA;IACAiB,cAAc,EAAE,IAAK;IACrBC,oBAAoB,EAAE;IACtB;IAAA;IACAC,YAAY,EAAE;MAAEC,IAAI,EAAE;IAAU;IAChC;IAAA;IACAnB,SAAS,EAAEA,SAAU;IACrBC,KAAK,EAAEA;EAAM,CACd,CAAC;AAEN,CAAC;AAED,eAAeJ,QAAQ"}
1
+ {"version":3,"names":["React","useCallback","message","Tooltip","Flex","LikeFilled","LikeOutlined","ReloadOutlined","CopyOutlined","copy","XAdkChatbot","DislikeFeedback","useChatState","useChatActions","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","Messages","_ref","actions","className","style","_useChatState","messages","loading","prologue","suggestions","initialized","showFeedback","appInfo","_useChatActions","suggestChat","reChat","likeMessage","primaryColor","appTheme","defaultActions","_ref2","_group$isLike","group","isLastBotMsg","lastMsg","msgs","length","invocationId","isLikeVal","isLike","fullText","filter","m","functionCall","functionResponse","map","text","join","gap","align","padding","color","children","title","cursor","onClick","success","_asyncToGenerator","_regeneratorRuntime","mark","_callee","ok","wrap","_callee$","_context","prev","next","warning","abrupt","sent","error","stop","msg","activeColor","onSubmit","_ref4","_callee2","formData","_callee2$","_context2","_x","apply","arguments","onSuggest","enableGrouping","enableProcessParsing","parseOptions","mode"],"sources":["../../../../../src/components/XAdkProvider/compound/Messages.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { message, Tooltip, Flex } from \"antd\";\nimport { LikeFilled, LikeOutlined, ReloadOutlined, CopyOutlined } from \"@ant-design/icons\";\nimport copy from \"copy-to-clipboard\";\nimport XAdkChatbot from \"../../XAdkChatbot\";\nimport DislikeFeedback from \"./DislikeFeedBack\";\nimport { useChatState } from \"../context/ChatStateContext\";\nimport { useChatActions } from \"../context/ChatActionContext\";\nimport type { ActionProps } from \"@/types\";\n\nexport interface XAdkMessagesProps {\n /** 自定义操作栏渲染 */\n actions?: ActionProps;\n /** 类名 */\n className?: string;\n /** 样式 */\n style?: React.CSSProperties;\n}\n\n/**\n * Messages - XAdkProvider 的消息展示组件\n *\n * 使用 XAdkChatbot 渲染消息列表\n */\nconst Messages: React.FC<XAdkMessagesProps> = ({\n actions,\n className,\n style,\n}) => {\n const { messages, loading, prologue, suggestions, initialized, showFeedback, appInfo } = useChatState();\n const { suggestChat, reChat, likeMessage } = useChatActions();\n\n const primaryColor = appInfo?.appTheme || \"#1677ff\";\n\n const defaultActions = useCallback<ActionProps>(({ message: group, isLastBotMsg }) => {\n // 取该组最后一条 bot 消息的 invocationId 和 isLike 状态\n const lastMsg = group.msgs[group.msgs.length - 1];\n const invocationId = lastMsg?.invocationId;\n const isLikeVal = group.isLike ?? 0;\n\n const fullText = group.msgs\n .filter((m) => !m.functionCall && !m.functionResponse)\n .map((m) => m.text || \"\")\n .join(\"\");\n\n return (\n <Flex gap={16} align=\"center\" style={{ padding: \"4px 0\", color: \"#81858c\" }}>\n {isLastBotMsg && (\n <Tooltip title=\"重新生成\">\n <ReloadOutlined style={{ cursor: \"pointer\" }} onClick={reChat} />\n </Tooltip>\n )}\n <Tooltip title=\"复制内容\">\n <CopyOutlined\n style={{ cursor: \"pointer\" }}\n onClick={() => {\n copy(fullText);\n message.success(\"复制成功\");\n }}\n />\n </Tooltip>\n {showFeedback && invocationId && (\n <>\n <Tooltip title=\"赞\">\n {isLikeVal === 1 ? (\n <LikeFilled style={{ color: primaryColor, cursor: \"pointer\" }} />\n ) : (\n <LikeOutlined\n style={{ cursor: \"pointer\" }}\n onClick={async () => {\n if (isLikeVal !== 0) {\n message.warning(\"已收到您的反馈,无需重复提交\");\n return;\n }\n const ok = await likeMessage(invocationId, 1);\n if (ok) message.success(\"感谢您的反馈\");\n else message.error(\"反馈失败,请稍后再试\");\n }}\n />\n )}\n </Tooltip>\n <DislikeFeedback\n msg={group}\n activeColor={primaryColor}\n onSubmit={async (formData) => {\n const ok = await likeMessage(invocationId, -1, formData);\n if (ok) message.success(\"已收到您的反馈,我们会努力做得更好\");\n else message.error(\"反馈失败,请稍后再试\");\n return ok;\n }}\n />\n </>\n )}\n </Flex>\n );\n }, [reChat, likeMessage, showFeedback, primaryColor]);\n\n return (\n <XAdkChatbot\n messages={messages}\n loading={loading}\n prologue={prologue}\n suggestions={suggestions}\n onSuggest={suggestChat}\n // 操作栏:使用外部传入的 actions,否则用内置默认 actions\n actions={actions ?? defaultActions}\n // 启用分组和解析\n enableGrouping={true}\n enableProcessParsing={true}\n // 使用注释模式解析\n parseOptions={{ mode: \"comment\" }}\n initialized={initialized}\n // 样式\n className={className}\n style={style}\n />\n );\n};\n\nexport default Messages;\n"],"mappings":"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"}
@@ -20,6 +20,11 @@ export interface ChatActionContextType {
20
20
  confirmFnCall: (fnCall: FunctionCall, confirmed: boolean) => void;
21
21
  /** 设置消息列表 */
22
22
  setMessages: React.Dispatch<React.SetStateAction<IMessage[]>>;
23
+ /** 点赞/点踩消息 */
24
+ likeMessage: (invocationId: string, isLike: 1 | -1, feedbackData?: {
25
+ feedbackTags?: string;
26
+ feedbackDescription?: string;
27
+ }) => Promise<boolean>;
23
28
  }
24
29
  export declare const ChatActionContext: import("react").Context<ChatActionContextType | null>;
25
30
  /**
@@ -1 +1 @@
1
- {"version":3,"names":["createContext","useContext","ChatActionContext","useChatActions","context","Error"],"sources":["../../../../../src/components/XAdkProvider/context/ChatActionContext.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\nimport type { SendContent, FunctionCall, IMessage } from '@/types';\n\n/**\n * 聊天动作 Context\n * 只包含操作方法,不包含状态数据\n * 与 ChatStateContext 分离可以优化性能\n */\nexport interface ChatActionContextType {\n /** 发送消息 */\n chat: (content: SendContent) => void;\n /** 停止聊天 */\n stopChat: () => void;\n /** 清空/重置聊天 */\n clearChat: () => void;\n /** 重新发送 */\n reChat: () => void;\n /** 使用建议问题 */\n suggestChat: (text: string) => void;\n /** 确认函数调用 */\n confirmFnCall: (fnCall: FunctionCall, confirmed: boolean) => void;\n /** 设置消息列表 */\n setMessages: React.Dispatch<React.SetStateAction<IMessage[]>>;\n}\n\nexport const ChatActionContext = createContext<ChatActionContextType | null>(null);\n\n/**\n * 使用聊天动作 Hook\n * @returns ChatActionContextType\n * @throws Error 如果在 XAdkProvider 外部使用\n */\nexport const useChatActions = () => {\n const context = useContext(ChatActionContext);\n if (!context) {\n throw new Error('useChatActions must be used within XAdkProvider');\n }\n return context;\n};\n"],"mappings":"AAAA,SAASA,aAAa,EAAEC,UAAU,QAAQ,OAAO;;AAGjD;AACA;AACA;AACA;AACA;;AAkBA,OAAO,IAAMC,iBAAiB,gBAAGF,aAAa,CAA+B,IAAI,CAAC;;AAElF;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMG,cAAc,GAAG,SAAjBA,cAAcA,CAAA,EAAS;EAClC,IAAMC,OAAO,GAAGH,UAAU,CAACC,iBAAiB,CAAC;EAC7C,IAAI,CAACE,OAAO,EAAE;IACZ,MAAM,IAAIC,KAAK,CAAC,iDAAiD,CAAC;EACpE;EACA,OAAOD,OAAO;AAChB,CAAC"}
1
+ {"version":3,"names":["createContext","useContext","ChatActionContext","useChatActions","context","Error"],"sources":["../../../../../src/components/XAdkProvider/context/ChatActionContext.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\nimport type { SendContent, FunctionCall, IMessage } from '@/types';\n\n/**\n * 聊天动作 Context\n * 只包含操作方法,不包含状态数据\n * 与 ChatStateContext 分离可以优化性能\n */\nexport interface ChatActionContextType {\n /** 发送消息 */\n chat: (content: SendContent) => void;\n /** 停止聊天 */\n stopChat: () => void;\n /** 清空/重置聊天 */\n clearChat: () => void;\n /** 重新发送 */\n reChat: () => void;\n /** 使用建议问题 */\n suggestChat: (text: string) => void;\n /** 确认函数调用 */\n confirmFnCall: (fnCall: FunctionCall, confirmed: boolean) => void;\n /** 设置消息列表 */\n setMessages: React.Dispatch<React.SetStateAction<IMessage[]>>;\n /** 点赞/点踩消息 */\n likeMessage: (\n invocationId: string,\n isLike: 1 | -1,\n feedbackData?: { feedbackTags?: string; feedbackDescription?: string },\n ) => Promise<boolean>;\n}\n\nexport const ChatActionContext = createContext<ChatActionContextType | null>(null);\n\n/**\n * 使用聊天动作 Hook\n * @returns ChatActionContextType\n * @throws Error 如果在 XAdkProvider 外部使用\n */\nexport const useChatActions = () => {\n const context = useContext(ChatActionContext);\n if (!context) {\n throw new Error('useChatActions must be used within XAdkProvider');\n }\n return context;\n};\n"],"mappings":"AAAA,SAASA,aAAa,EAAEC,UAAU,QAAQ,OAAO;;AAGjD;AACA;AACA;AACA;AACA;;AAwBA,OAAO,IAAMC,iBAAiB,gBAAGF,aAAa,CAA+B,IAAI,CAAC;;AAElF;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMG,cAAc,GAAG,SAAjBA,cAAcA,CAAA,EAAS;EAClC,IAAMC,OAAO,GAAGH,UAAU,CAACC,iBAAiB,CAAC;EAC7C,IAAI,CAACE,OAAO,EAAE;IACZ,MAAM,IAAIC,KAAK,CAAC,iDAAiD,CAAC;EACpE;EACA,OAAOD,OAAO;AAChB,CAAC"}
@@ -25,6 +25,8 @@ export interface ChatStateContextType {
25
25
  appInfo: ChatConfig | null;
26
26
  /** 是否已初始化 */
27
27
  initialized: boolean;
28
+ /** 是否展示点赞/点踩 */
29
+ showFeedback: boolean;
28
30
  }
29
31
  export declare const ChatStateContext: import("react").Context<ChatStateContextType | null>;
30
32
  /**
@@ -1 +1 @@
1
- {"version":3,"names":["createContext","useContext","ChatStateContext","useChatState","context","Error"],"sources":["../../../../../src/components/XAdkProvider/context/ChatStateContext.tsx"],"sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { IMessage } from \"@/types\";\nimport type { ChatConfig } from \"@/services/api\";\n\n/**\n * 聊天状态 Context\n * 只包含状态数据,不包含操作方法\n * 这样可以避免不必要的 rerender\n */\nexport interface ChatStateContextType {\n /** 请求地址 */\n url: string;\n /** 会话令牌 */\n token: string;\n /** 消息列表 */\n messages: IMessage[];\n /** 加载状态 */\n loading: boolean;\n /** 当前会话 ID */\n currentSessionId: string;\n /** 开场白 */\n prologue: string;\n /** 建议问题列表 */\n suggestions: string[];\n /** 应用配置信息 */\n appInfo: ChatConfig | null;\n /** 是否已初始化 */\n initialized: boolean;\n}\n\nexport const ChatStateContext = createContext<ChatStateContextType | null>(\n null,\n);\n\n/**\n * 使用聊天状态 Hook\n * @returns ChatStateContextType\n * @throws Error 如果在 XAdkProvider 外部使用\n */\nexport const useChatState = () => {\n const context = useContext(ChatStateContext);\n if (!context) {\n throw new Error(\"useChatState must be used within XAdkProvider\");\n }\n return context;\n};\n"],"mappings":"AAAA,SAASA,aAAa,EAAEC,UAAU,QAAQ,OAAO;;AAIjD;AACA;AACA;AACA;AACA;;AAsBA,OAAO,IAAMC,gBAAgB,gBAAGF,aAAa,CAC3C,IACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMG,YAAY,GAAG,SAAfA,YAAYA,CAAA,EAAS;EAChC,IAAMC,OAAO,GAAGH,UAAU,CAACC,gBAAgB,CAAC;EAC5C,IAAI,CAACE,OAAO,EAAE;IACZ,MAAM,IAAIC,KAAK,CAAC,+CAA+C,CAAC;EAClE;EACA,OAAOD,OAAO;AAChB,CAAC"}
1
+ {"version":3,"names":["createContext","useContext","ChatStateContext","useChatState","context","Error"],"sources":["../../../../../src/components/XAdkProvider/context/ChatStateContext.tsx"],"sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { IMessage } from \"@/types\";\nimport type { ChatConfig } from \"@/services/api\";\n\n/**\n * 聊天状态 Context\n * 只包含状态数据,不包含操作方法\n * 这样可以避免不必要的 rerender\n */\nexport interface ChatStateContextType {\n /** 请求地址 */\n url: string;\n /** 会话令牌 */\n token: string;\n /** 消息列表 */\n messages: IMessage[];\n /** 加载状态 */\n loading: boolean;\n /** 当前会话 ID */\n currentSessionId: string;\n /** 开场白 */\n prologue: string;\n /** 建议问题列表 */\n suggestions: string[];\n /** 应用配置信息 */\n appInfo: ChatConfig | null;\n /** 是否已初始化 */\n initialized: boolean;\n /** 是否展示点赞/点踩 */\n showFeedback: boolean;\n}\n\nexport const ChatStateContext = createContext<ChatStateContextType | null>(\n null,\n);\n\n/**\n * 使用聊天状态 Hook\n * @returns ChatStateContextType\n * @throws Error 如果在 XAdkProvider 外部使用\n */\nexport const useChatState = () => {\n const context = useContext(ChatStateContext);\n if (!context) {\n throw new Error(\"useChatState must be used within XAdkProvider\");\n }\n return context;\n};\n"],"mappings":"AAAA,SAASA,aAAa,EAAEC,UAAU,QAAQ,OAAO;;AAIjD;AACA;AACA;AACA;AACA;;AAwBA,OAAO,IAAMC,gBAAgB,gBAAGF,aAAa,CAC3C,IACF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMG,YAAY,GAAG,SAAfA,YAAYA,CAAA,EAAS;EAChC,IAAMC,OAAO,GAAGH,UAAU,CAACC,gBAAgB,CAAC;EAC5C,IAAI,CAACE,OAAO,EAAE;IACZ,MAAM,IAAIC,KAAK,CAAC,+CAA+C,CAAC;EAClE;EACA,OAAOD,OAAO;AAChB,CAAC"}
@@ -1,3 +1,5 @@
1
+ import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
2
+ import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
1
3
  import React, { forwardRef, useImperativeHandle, useMemo } from "react";
2
4
  import { ConfigProvider } from "antd";
3
5
  import { XProvider } from "@ant-design/x";
@@ -55,6 +57,7 @@ import { primaryBlue } from "../../styles/common";
55
57
  * </XAdkProvider>
56
58
  */
57
59
  var XAdkProviderComponent = /*#__PURE__*/forwardRef(function (_ref, ref) {
60
+ var _config$showFeedback;
58
61
  var url = _ref.url,
59
62
  token = _ref.token,
60
63
  config = _ref.config,
@@ -101,7 +104,20 @@ var XAdkProviderComponent = /*#__PURE__*/forwardRef(function (_ref, ref) {
101
104
  suggestions = data.suggestions,
102
105
  initialized = data.initialized,
103
106
  setCurrentSessionDetail = data.setCurrentSessionDetail,
104
- setMessages = data.setMessages;
107
+ setMessages = data.setMessages,
108
+ _data$likeMessage = data.likeMessage,
109
+ likeMessage = _data$likeMessage === void 0 ? /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
110
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
111
+ while (1) switch (_context.prev = _context.next) {
112
+ case 0:
113
+ return _context.abrupt("return", false);
114
+ case 1:
115
+ case "end":
116
+ return _context.stop();
117
+ }
118
+ }, _callee);
119
+ })) : _data$likeMessage;
120
+ var showFeedback = (_config$showFeedback = config === null || config === void 0 ? void 0 : config.showFeedback) !== null && _config$showFeedback !== void 0 ? _config$showFeedback : true;
105
121
 
106
122
  // 暴露 API 给 ref
107
123
  useImperativeHandle(ref, function () {
@@ -138,9 +154,10 @@ var XAdkProviderComponent = /*#__PURE__*/forwardRef(function (_ref, ref) {
138
154
  appInfo: appInfo,
139
155
  initialized: initialized,
140
156
  url: url,
141
- token: token
157
+ token: token,
158
+ showFeedback: showFeedback
142
159
  };
143
- }, [messages, loading, currentSessionId, prologue, suggestions, appInfo, initialized]);
160
+ }, [messages, loading, currentSessionId, prologue, suggestions, appInfo, initialized, showFeedback]);
144
161
 
145
162
  // 动作 Context Value - 函数引用稳定,不需要每次都创建新对象
146
163
  var chatActionValue = useMemo(function () {
@@ -151,9 +168,10 @@ var XAdkProviderComponent = /*#__PURE__*/forwardRef(function (_ref, ref) {
151
168
  reChat: reChat,
152
169
  suggestChat: suggestChat,
153
170
  confirmFnCall: confirmFnCall,
154
- setMessages: setMessages
171
+ setMessages: setMessages,
172
+ likeMessage: likeMessage
155
173
  };
156
- }, [startChat, stopChat, clearChat, reChat, suggestChat, confirmFnCall, setMessages]);
174
+ }, [startChat, stopChat, clearChat, reChat, suggestChat, confirmFnCall, setMessages, likeMessage]);
157
175
 
158
176
  // 会话 Context Value
159
177
  var sessionValue = useMemo(function () {