@ai-group/chat-sdk 3.5.12 → 3.6.0

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 (62) hide show
  1. package/dist/cjs/components/FileGallery/index.js +1 -1
  2. package/dist/cjs/components/FileGallery/index.js.map +1 -1
  3. package/dist/cjs/components/FolderTree/DirectoryTree.d.ts +1 -1
  4. package/dist/cjs/components/FolderTree/DirectoryTree.js +56 -18
  5. package/dist/cjs/components/FolderTree/DirectoryTree.js.map +2 -2
  6. package/dist/cjs/components/FolderTree/index.js +2 -2
  7. package/dist/cjs/components/FolderTree/index.js.map +2 -2
  8. package/dist/cjs/components/FolderTree/styles.js +4 -1
  9. package/dist/cjs/components/FolderTree/styles.js.map +2 -2
  10. package/dist/cjs/components/XAdkChatbot/index.js +8 -8
  11. package/dist/cjs/components/XAdkChatbot/index.js.map +2 -2
  12. package/dist/cjs/components/XAdkChatbot/styles.d.ts +1 -0
  13. package/dist/cjs/components/XAdkChatbot/styles.js +7 -1
  14. package/dist/cjs/components/XAdkChatbot/styles.js.map +2 -2
  15. package/dist/cjs/components/XAdkProvider/index.js +2 -0
  16. package/dist/cjs/components/XAdkProvider/index.js.map +2 -2
  17. package/dist/cjs/components/XAdkThoughtChain/index.js +75 -39
  18. package/dist/cjs/components/XAdkThoughtChain/index.js.map +2 -2
  19. package/dist/cjs/components/XAdkThoughtChain/styles.js +27 -26
  20. package/dist/cjs/components/XAdkThoughtChain/styles.js.map +2 -2
  21. package/dist/cjs/index.d.ts +2 -1
  22. package/dist/cjs/index.js +9 -0
  23. package/dist/cjs/index.js.map +2 -2
  24. package/dist/cjs/styles/tokens.d.ts +27 -0
  25. package/dist/cjs/styles/tokens.js +72 -0
  26. package/dist/cjs/styles/tokens.js.map +7 -0
  27. package/dist/cjs/types/XAdkChatbot.d.ts +7 -1
  28. package/dist/cjs/types/XAdkChatbot.js.map +1 -1
  29. package/dist/cjs/types/XAdkThoughtChain.d.ts +13 -0
  30. package/dist/cjs/types/XAdkThoughtChain.js.map +1 -1
  31. package/dist/esm/components/FileGallery/index.js +1 -1
  32. package/dist/esm/components/FileGallery/index.js.map +1 -1
  33. package/dist/esm/components/FolderTree/DirectoryTree.d.ts +1 -1
  34. package/dist/esm/components/FolderTree/DirectoryTree.js +86 -54
  35. package/dist/esm/components/FolderTree/DirectoryTree.js.map +1 -1
  36. package/dist/esm/components/FolderTree/index.js +2 -2
  37. package/dist/esm/components/FolderTree/index.js.map +1 -1
  38. package/dist/esm/components/FolderTree/styles.js +2 -2
  39. package/dist/esm/components/FolderTree/styles.js.map +1 -1
  40. package/dist/esm/components/XAdkChatbot/index.js +15 -38
  41. package/dist/esm/components/XAdkChatbot/index.js.map +1 -1
  42. package/dist/esm/components/XAdkChatbot/styles.d.ts +1 -0
  43. package/dist/esm/components/XAdkChatbot/styles.js +20 -19
  44. package/dist/esm/components/XAdkChatbot/styles.js.map +1 -1
  45. package/dist/esm/components/XAdkProvider/index.js +3 -2
  46. package/dist/esm/components/XAdkProvider/index.js.map +1 -1
  47. package/dist/esm/components/XAdkThoughtChain/index.js +100 -50
  48. package/dist/esm/components/XAdkThoughtChain/index.js.map +1 -1
  49. package/dist/esm/components/XAdkThoughtChain/styles.js +20 -19
  50. package/dist/esm/components/XAdkThoughtChain/styles.js.map +1 -1
  51. package/dist/esm/index.d.ts +2 -1
  52. package/dist/esm/index.js +3 -0
  53. package/dist/esm/index.js.map +1 -1
  54. package/dist/esm/styles/tokens.d.ts +27 -0
  55. package/dist/esm/styles/tokens.js +42 -0
  56. package/dist/esm/styles/tokens.js.map +1 -0
  57. package/dist/esm/types/XAdkChatbot.d.ts +7 -1
  58. package/dist/esm/types/XAdkChatbot.js.map +1 -1
  59. package/dist/esm/types/XAdkThoughtChain.d.ts +13 -0
  60. package/dist/esm/types/XAdkThoughtChain.js.map +1 -1
  61. package/dist/umd/chat-sdk.min.js +1 -1
  62. package/package.json +1 -1
@@ -24,6 +24,7 @@ __export(styles_exports, {
24
24
  module.exports = __toCommonJS(styles_exports);
25
25
  var import_css = require("@emotion/css");
26
26
  var import_common = require("../../styles/common");
27
+ var import_tokens = require("../../styles/tokens");
27
28
  var blinkAnimation = import_css.keyframes`
28
29
  0% { background-position-x: -200%; background-position-y: 100%; }
29
30
  25% { background-position-x: -100%; background-position-y: 100%; }
@@ -34,8 +35,8 @@ var blinkAnimation = import_css.keyframes`
34
35
  var useStyles = (0, import_common.withBasicStyles)(() => ({
35
36
  /* --- ThoughtChain --- */
36
37
  thoughtChainBlock: import_css.css`
37
- margin-bottom: 16px;
38
- border-radius: 8px;
38
+ margin-bottom: ${(0, import_tokens.token)(import_tokens.tokens.spacingMd)};
39
+ border-radius: ${(0, import_tokens.token)(import_tokens.tokens.borderRadius)};
39
40
  overflow: hidden;
40
41
  `,
41
42
  thoughtHeader: import_css.css`
@@ -46,18 +47,18 @@ var useStyles = (0, import_common.withBasicStyles)(() => ({
46
47
  user-select: none;
47
48
  transition: background 0.2s;
48
49
  &:hover {
49
- background: #f0f0f0;
50
+ background: ${(0, import_tokens.token)(import_tokens.tokens.colorBgHover)};
50
51
  border-color: #ccc;
51
52
  }
52
53
  `,
53
54
  headerLeft: import_css.css`
54
55
  display: flex;
55
56
  align-items: center;
56
- gap: 8px;
57
+ gap: ${(0, import_tokens.token)(import_tokens.tokens.spacingSm)};
57
58
  `,
58
59
  caret: import_css.css`
59
- font-size: 12px;
60
- color: #8194ad;
60
+ font-size: ${(0, import_tokens.token)(import_tokens.tokens.fontSizeSm)};
61
+ color: ${(0, import_tokens.token)(import_tokens.tokens.colorTextSecondary)};
61
62
  transition: transform 0.2s;
62
63
  &.open {
63
64
  transform: rotate(90deg);
@@ -69,13 +70,13 @@ var useStyles = (0, import_common.withBasicStyles)(() => ({
69
70
  align-items: center;
70
71
  `,
71
72
  headerTitle: import_css.css`
72
- font-size: 13px;
73
- color: #8194ad;
73
+ font-size: ${(0, import_tokens.token)(import_tokens.tokens.fontSizeBase)};
74
+ color: ${(0, import_tokens.token)(import_tokens.tokens.colorTextSecondary)};
74
75
  font-weight: 500;
75
76
  `,
76
77
  headerRight: import_css.css``,
77
78
  thinkingBody: import_css.css`
78
- padding: 0 16px;
79
+ padding: 0 ${(0, import_tokens.token)(import_tokens.tokens.spacingMd)};
79
80
  animation: fadeIn 0.2s ease-in-out;
80
81
  `,
81
82
  /* --- Timeline --- */
@@ -95,19 +96,19 @@ var useStyles = (0, import_common.withBasicStyles)(() => ({
95
96
  flex-shrink: 0;
96
97
  `,
97
98
  timelineIcon: import_css.css`
98
- color: #8194ad;
99
+ color: ${(0, import_tokens.token)(import_tokens.tokens.colorTextSecondary)};
99
100
  font-size: 16px;
100
101
  margin-top: 6px;
101
102
  `,
102
103
  timelineIconTool: import_css.css`
103
- color: #faad14;
104
+ color: ${(0, import_tokens.token)(import_tokens.tokens.colorWarning)};
104
105
  font-size: 16px;
105
106
  margin-top: 6px;
106
107
  `,
107
108
  timelineConnector: import_css.css`
108
109
  flex: 1;
109
110
  width: 1px;
110
- background-color: #e5e5e5;
111
+ background-color: ${(0, import_tokens.token)(import_tokens.tokens.colorBorder)};
111
112
  margin: 4px 0;
112
113
  min-height: 12px;
113
114
  `,
@@ -117,7 +118,7 @@ var useStyles = (0, import_common.withBasicStyles)(() => ({
117
118
  `,
118
119
  timelineRight: import_css.css`
119
120
  flex: 1;
120
- padding-bottom: 8px;
121
+ padding-bottom: ${(0, import_tokens.token)(import_tokens.tokens.spacingSm)};
121
122
  min-width: 0;
122
123
  `,
123
124
  collapsibleHeader: import_css.css`
@@ -132,31 +133,31 @@ var useStyles = (0, import_common.withBasicStyles)(() => ({
132
133
  user-select: none;
133
134
 
134
135
  &:hover {
135
- background: #f5f5f5;
136
+ background: ${(0, import_tokens.token)(import_tokens.tokens.colorBgHover)};
136
137
  }
137
138
  `,
138
139
  titleText: import_css.css`
139
- font-size: 13px;
140
+ font-size: ${(0, import_tokens.token)(import_tokens.tokens.fontSizeBase)};
140
141
  font-weight: 600;
141
- color: #8194ad;
142
+ color: ${(0, import_tokens.token)(import_tokens.tokens.colorTextSecondary)};
142
143
  `,
143
144
  toolTitleGroup: import_css.css`
144
145
  display: flex;
145
146
  align-items: center;
146
- gap: 8px;
147
+ gap: ${(0, import_tokens.token)(import_tokens.tokens.spacingSm)};
147
148
  overflow: hidden;
148
149
  `,
149
150
  toolName: import_css.css`
150
- font-size: 13px;
151
+ font-size: ${(0, import_tokens.token)(import_tokens.tokens.fontSizeBase)};
151
152
  font-weight: 600;
152
- color: #8194ad;
153
+ color: ${(0, import_tokens.token)(import_tokens.tokens.colorTextSecondary)};
153
154
  white-space: nowrap;
154
155
  overflow: hidden;
155
156
  text-overflow: ellipsis;
156
157
  `,
157
158
  toolStatusTag: import_css.css`
158
159
  font-size: 11px;
159
- color: #52c41a;
160
+ color: ${(0, import_tokens.token)(import_tokens.tokens.colorSuccess)};
160
161
  background: #f6ffed;
161
162
  border: 1px solid #b7eb8f;
162
163
  padding: 0 6px;
@@ -166,22 +167,22 @@ var useStyles = (0, import_common.withBasicStyles)(() => ({
166
167
  arrowIcon: import_css.css`
167
168
  font-size: 10px;
168
169
  color: #bbb;
169
- margin-left: 8px;
170
+ margin-left: ${(0, import_tokens.token)(import_tokens.tokens.spacingSm)};
170
171
  `,
171
172
  stepContent: import_css.css`
172
- font-size: 13px;
173
- color: #8194ad;
173
+ font-size: ${(0, import_tokens.token)(import_tokens.tokens.fontSizeBase)};
174
+ color: ${(0, import_tokens.token)(import_tokens.tokens.colorTextSecondary)};
174
175
  line-height: 1.6;
175
176
  padding-left: 4px;
176
177
  `,
177
178
  statusInfo: import_css.css`
178
- font-size: 12px;
179
- color: #8194ad;
179
+ font-size: ${(0, import_tokens.token)(import_tokens.tokens.fontSizeSm)};
180
+ color: ${(0, import_tokens.token)(import_tokens.tokens.colorTextSecondary)};
180
181
  margin-bottom: 4px;
181
182
  font-style: italic;
182
183
  `,
183
184
  blink: import_css.css`
184
- color: #8194ad;
185
+ color: ${(0, import_tokens.token)(import_tokens.tokens.colorTextSecondary)};
185
186
  background-image: linear-gradient(
186
187
  90deg,
187
188
  transparent,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/XAdkThoughtChain/styles.tsx"],
4
- "sourcesContent": ["/* eslint-disable import/prefer-default-export */\nimport { css, keyframes } from \"@emotion/css\";\nimport { withBasicStyles, lightBlue, primaryBlue } from \"@/styles/common\";\n\nconst blinkAnimation = keyframes`\n 0% { background-position-x: -200%; background-position-y: 100%; }\n 25% { background-position-x: -100%; background-position-y: 100%; }\n 50% { background-position-x: 0%; background-position-y: 100%; }\n 75% { background-position-x: 100%; background-position-y: 100%; }\n 100% { background-position-x: 200%; background-position-y: 100%; }\n`;\n\nexport const useStyles = withBasicStyles(() => ({\n /* --- ThoughtChain --- */\n\n thoughtChainBlock: css`\n margin-bottom: 16px;\n border-radius: 8px;\n overflow: hidden;\n `,\n\n thoughtHeader: css`\n display: flex;\n align-items: center;\n padding: 10px 14px;\n cursor: pointer;\n user-select: none;\n transition: background 0.2s;\n &:hover {\n background: #f0f0f0;\n border-color: #ccc;\n }\n `,\n\n headerLeft: css`\n display: flex;\n align-items: center;\n gap: 8px;\n `,\n\n caret: css`\n font-size: 12px;\n color: #8194ad;\n transition: transform 0.2s;\n &.open {\n transform: rotate(90deg);\n }\n `,\n\n statusIcon: css`\n font-size: 14px;\n display: flex;\n align-items: center;\n `,\n\n headerTitle: css`\n font-size: 13px;\n color: #8194ad;\n font-weight: 500;\n `,\n\n headerRight: css``,\n\n thinkingBody: css`\n padding: 0 16px;\n animation: fadeIn 0.2s ease-in-out;\n `,\n\n /* --- Timeline --- */\n\n timeline: css`\n width: 100%;\n `,\n\n timelineItem: css`\n display: flex;\n gap: 12px;\n position: relative;\n `,\n\n timelineLeft: css`\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 20px;\n flex-shrink: 0;\n `,\n\n timelineIcon: css`\n color: #8194ad;\n font-size: 16px;\n margin-top: 6px;\n `,\n\n timelineIconTool: css`\n color: #faad14;\n font-size: 16px;\n margin-top: 6px;\n `,\n\n timelineConnector: css`\n flex: 1;\n width: 1px;\n background-color: #e5e5e5;\n margin: 4px 0;\n min-height: 12px;\n `,\n\n /* Hide connector on last item */\n timelineItemLastConnector: css`\n display: none;\n `,\n\n timelineRight: css`\n flex: 1;\n padding-bottom: 8px;\n min-width: 0;\n `,\n\n collapsibleHeader: css`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 5px 8px;\n margin: 0 -8px 4px -8px;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n user-select: none;\n\n &:hover {\n background: #f5f5f5;\n }\n `,\n\n titleText: css`\n font-size: 13px;\n font-weight: 600;\n color: #8194ad;\n `,\n\n toolTitleGroup: css`\n display: flex;\n align-items: center;\n gap: 8px;\n overflow: hidden;\n `,\n\n toolName: css`\n font-size: 13px;\n font-weight: 600;\n color: #8194ad;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n `,\n\n toolStatusTag: css`\n font-size: 11px;\n color: #52c41a;\n background: #f6ffed;\n border: 1px solid #b7eb8f;\n padding: 0 6px;\n border-radius: 4px;\n flex-shrink: 0;\n `,\n\n arrowIcon: css`\n font-size: 10px;\n color: #bbb;\n margin-left: 8px;\n `,\n\n stepContent: css`\n font-size: 13px;\n color: #8194ad;\n line-height: 1.6;\n padding-left: 4px;\n `,\n\n statusInfo: css`\n font-size: 12px;\n color: #8194ad;\n margin-bottom: 4px;\n font-style: italic;\n `,\n\n blink: css`\n color: #8194ad;\n background-image: linear-gradient(\n 90deg,\n transparent,\n rgba(0, 0, 0, 0.88),\n transparent\n );\n background-clip: text;\n -webkit-background-clip: text;\n background-size: 50%;\n background-repeat: no-repeat;\n animation-name: ${blinkAnimation};\n animation-duration: 1s;\n animation-iteration-count: infinite;\n animation-timing-function: linear;\n animation-fill-mode: forwards;\n `,\n}));\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,iBAA+B;AAC/B,oBAAwD;AAExD,IAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQhB,IAAM,gBAAY,+BAAgB,OAAO;AAAA;AAAA,EAG9C,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMnB,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaf,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA,EAMZ,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASP,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA,EAMZ,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA,EAMb,aAAa;AAAA,EAEb,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA,EAOd,UAAU;AAAA;AAAA;AAAA,EAIV,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA,EAMd,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQd,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA,EAMd,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA,EAMlB,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASnB,2BAA2B;AAAA;AAAA;AAAA,EAI3B,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA,EAMf,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBnB,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,EAMX,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOhB,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASV,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUf,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,EAMX,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOb,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOZ,OAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAYa;AAAA;AAAA;AAAA;AAAA;AAAA;AAMtB,EAAE;",
4
+ "sourcesContent": ["/* eslint-disable import/prefer-default-export */\nimport { css, keyframes } from \"@emotion/css\";\nimport { withBasicStyles } from \"@/styles/common\";\nimport { token, tokens } from \"@/styles/tokens\";\n\nconst blinkAnimation = keyframes`\n 0% { background-position-x: -200%; background-position-y: 100%; }\n 25% { background-position-x: -100%; background-position-y: 100%; }\n 50% { background-position-x: 0%; background-position-y: 100%; }\n 75% { background-position-x: 100%; background-position-y: 100%; }\n 100% { background-position-x: 200%; background-position-y: 100%; }\n`;\n\nexport const useStyles = withBasicStyles(() => ({\n /* --- ThoughtChain --- */\n\n thoughtChainBlock: css`\n margin-bottom: ${token(tokens.spacingMd)};\n border-radius: ${token(tokens.borderRadius)};\n overflow: hidden;\n `,\n\n thoughtHeader: css`\n display: flex;\n align-items: center;\n padding: 10px 14px;\n cursor: pointer;\n user-select: none;\n transition: background 0.2s;\n &:hover {\n background: ${token(tokens.colorBgHover)};\n border-color: #ccc;\n }\n `,\n\n headerLeft: css`\n display: flex;\n align-items: center;\n gap: ${token(tokens.spacingSm)};\n `,\n\n caret: css`\n font-size: ${token(tokens.fontSizeSm)};\n color: ${token(tokens.colorTextSecondary)};\n transition: transform 0.2s;\n &.open {\n transform: rotate(90deg);\n }\n `,\n\n statusIcon: css`\n font-size: 14px;\n display: flex;\n align-items: center;\n `,\n\n headerTitle: css`\n font-size: ${token(tokens.fontSizeBase)};\n color: ${token(tokens.colorTextSecondary)};\n font-weight: 500;\n `,\n\n headerRight: css``,\n\n thinkingBody: css`\n padding: 0 ${token(tokens.spacingMd)};\n animation: fadeIn 0.2s ease-in-out;\n `,\n\n /* --- Timeline --- */\n\n timeline: css`\n width: 100%;\n `,\n\n timelineItem: css`\n display: flex;\n gap: 12px;\n position: relative;\n `,\n\n timelineLeft: css`\n display: flex;\n flex-direction: column;\n align-items: center;\n width: 20px;\n flex-shrink: 0;\n `,\n\n timelineIcon: css`\n color: ${token(tokens.colorTextSecondary)};\n font-size: 16px;\n margin-top: 6px;\n `,\n\n timelineIconTool: css`\n color: ${token(tokens.colorWarning)};\n font-size: 16px;\n margin-top: 6px;\n `,\n\n timelineConnector: css`\n flex: 1;\n width: 1px;\n background-color: ${token(tokens.colorBorder)};\n margin: 4px 0;\n min-height: 12px;\n `,\n\n /* Hide connector on last item */\n timelineItemLastConnector: css`\n display: none;\n `,\n\n timelineRight: css`\n flex: 1;\n padding-bottom: ${token(tokens.spacingSm)};\n min-width: 0;\n `,\n\n collapsibleHeader: css`\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 5px 8px;\n margin: 0 -8px 4px -8px;\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.2s;\n user-select: none;\n\n &:hover {\n background: ${token(tokens.colorBgHover)};\n }\n `,\n\n titleText: css`\n font-size: ${token(tokens.fontSizeBase)};\n font-weight: 600;\n color: ${token(tokens.colorTextSecondary)};\n `,\n\n toolTitleGroup: css`\n display: flex;\n align-items: center;\n gap: ${token(tokens.spacingSm)};\n overflow: hidden;\n `,\n\n toolName: css`\n font-size: ${token(tokens.fontSizeBase)};\n font-weight: 600;\n color: ${token(tokens.colorTextSecondary)};\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n `,\n\n toolStatusTag: css`\n font-size: 11px;\n color: ${token(tokens.colorSuccess)};\n background: #f6ffed;\n border: 1px solid #b7eb8f;\n padding: 0 6px;\n border-radius: 4px;\n flex-shrink: 0;\n `,\n\n arrowIcon: css`\n font-size: 10px;\n color: #bbb;\n margin-left: ${token(tokens.spacingSm)};\n `,\n\n stepContent: css`\n font-size: ${token(tokens.fontSizeBase)};\n color: ${token(tokens.colorTextSecondary)};\n line-height: 1.6;\n padding-left: 4px;\n `,\n\n statusInfo: css`\n font-size: ${token(tokens.fontSizeSm)};\n color: ${token(tokens.colorTextSecondary)};\n margin-bottom: 4px;\n font-style: italic;\n `,\n\n blink: css`\n color: ${token(tokens.colorTextSecondary)};\n background-image: linear-gradient(\n 90deg,\n transparent,\n rgba(0, 0, 0, 0.88),\n transparent\n );\n background-clip: text;\n -webkit-background-clip: text;\n background-size: 50%;\n background-repeat: no-repeat;\n animation-name: ${blinkAnimation};\n animation-duration: 1s;\n animation-iteration-count: infinite;\n animation-timing-function: linear;\n animation-fill-mode: forwards;\n `,\n}));\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,iBAA+B;AAC/B,oBAAgC;AAChC,oBAA8B;AAE9B,IAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQhB,IAAM,gBAAY,+BAAgB,OAAO;AAAA;AAAA,EAG9C,mBAAmB;AAAA,yBACA,qBAAM,qBAAO,SAAS;AAAA,yBACtB,qBAAM,qBAAO,YAAY;AAAA;AAAA;AAAA,EAI5C,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAQG,qBAAM,qBAAO,YAAY;AAAA;AAAA;AAAA;AAAA,EAK3C,YAAY;AAAA;AAAA;AAAA,eAGH,qBAAM,qBAAO,SAAS;AAAA;AAAA,EAG/B,OAAO;AAAA,qBACQ,qBAAM,qBAAO,UAAU;AAAA,iBAC3B,qBAAM,qBAAO,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO1C,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA,EAMZ,aAAa;AAAA,qBACE,qBAAM,qBAAO,YAAY;AAAA,iBAC7B,qBAAM,qBAAO,kBAAkB;AAAA;AAAA;AAAA,EAI1C,aAAa;AAAA,EAEb,cAAc;AAAA,qBACC,qBAAM,qBAAO,SAAS;AAAA;AAAA;AAAA;AAAA,EAMrC,UAAU;AAAA;AAAA;AAAA,EAIV,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA,EAMd,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQd,cAAc;AAAA,iBACH,qBAAM,qBAAO,kBAAkB;AAAA;AAAA;AAAA;AAAA,EAK1C,kBAAkB;AAAA,iBACP,qBAAM,qBAAO,YAAY;AAAA;AAAA;AAAA;AAAA,EAKpC,mBAAmB;AAAA;AAAA;AAAA,4BAGG,qBAAM,qBAAO,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,EAM9C,2BAA2B;AAAA;AAAA;AAAA,EAI3B,eAAe;AAAA;AAAA,0BAEK,qBAAM,qBAAO,SAAS;AAAA;AAAA;AAAA,EAI1C,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAYD,qBAAM,qBAAO,YAAY;AAAA;AAAA;AAAA,EAI3C,WAAW;AAAA,qBACI,qBAAM,qBAAO,YAAY;AAAA;AAAA,iBAE7B,qBAAM,qBAAO,kBAAkB;AAAA;AAAA,EAG1C,gBAAgB;AAAA;AAAA;AAAA,eAGP,qBAAM,qBAAO,SAAS;AAAA;AAAA;AAAA,EAI/B,UAAU;AAAA,qBACK,qBAAM,qBAAO,YAAY;AAAA;AAAA,iBAE7B,qBAAM,qBAAO,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA,EAM1C,eAAe;AAAA;AAAA,iBAEJ,qBAAM,qBAAO,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQpC,WAAW;AAAA;AAAA;AAAA,uBAGM,qBAAM,qBAAO,SAAS;AAAA;AAAA,EAGvC,aAAa;AAAA,qBACE,qBAAM,qBAAO,YAAY;AAAA,iBAC7B,qBAAM,qBAAO,kBAAkB;AAAA;AAAA;AAAA;AAAA,EAK1C,YAAY;AAAA,qBACG,qBAAM,qBAAO,UAAU;AAAA,iBAC3B,qBAAM,qBAAO,kBAAkB;AAAA;AAAA;AAAA;AAAA,EAK1C,OAAO;AAAA,iBACI,qBAAM,qBAAO,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAWtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAMtB,EAAE;",
6
6
  "names": []
7
7
  }
@@ -27,4 +27,5 @@ export { default as FunctionCallRender } from "./components/XAdkChatbot/componen
27
27
  export { default as ThinkRender } from "./components/XAdkChatbot/components/ThinkRender";
28
28
  export type { MarkdownRenderProps } from "./components/XAdkChatbot/components/MarkdownRender";
29
29
  export type { FunctionCallRenderProps } from "./types/FunctionCallRender";
30
- export type { XAdkThoughtChainProps, ThoughtChainItemType, } from "./types/XAdkThoughtChain";
30
+ export type { XAdkThoughtChainProps, ThoughtChainItemType, ThoughtChainStatus, } from "./types/XAdkThoughtChain";
31
+ export { tokens, tokenDefaults, token, cssVarStyle } from "./styles/tokens";
package/dist/cjs/index.js CHANGED
@@ -49,10 +49,14 @@ __export(src_exports, {
49
49
  basePreset: () => import_xGroupAdk.basePreset,
50
50
  baseToolKindResolver: () => import_xGroupAdk.baseToolKindResolver,
51
51
  createXGroupUploadRequest: () => import_xGroupAdk.createXGroupUploadRequest,
52
+ cssVarStyle: () => import_tokens.cssVarStyle,
52
53
  mergeChatStrategies: () => import_xGroupAdk.mergeChatStrategies,
53
54
  request: () => import_request.default,
54
55
  resolveChatPreset: () => import_xGroupAdk.resolveChatPreset,
55
56
  resolvePresetUploadRequest: () => import_xGroupAdk.resolvePresetUploadRequest,
57
+ token: () => import_tokens.token,
58
+ tokenDefaults: () => import_tokens.tokenDefaults,
59
+ tokens: () => import_tokens.tokens,
56
60
  useADKChat: () => import_useADKChat.default,
57
61
  useChatActions: () => import_context.useChatActions,
58
62
  useChatState: () => import_context.useChatState,
@@ -85,6 +89,7 @@ var import_FolderTree = __toESM(require("./components/FolderTree"));
85
89
  var import_MarkdownRender = __toESM(require("./components/XAdkChatbot/components/MarkdownRender"));
86
90
  var import_FunctionCallRender = __toESM(require("./components/XAdkChatbot/components/FunctionCallRender"));
87
91
  var import_ThinkRender = __toESM(require("./components/XAdkChatbot/components/ThinkRender"));
92
+ var import_tokens = require("./styles/tokens");
88
93
  // Annotate the CommonJS export names for ESM import in node:
89
94
  0 && (module.exports = {
90
95
  FileGallery,
@@ -106,10 +111,14 @@ var import_ThinkRender = __toESM(require("./components/XAdkChatbot/components/Th
106
111
  basePreset,
107
112
  baseToolKindResolver,
108
113
  createXGroupUploadRequest,
114
+ cssVarStyle,
109
115
  mergeChatStrategies,
110
116
  request,
111
117
  resolveChatPreset,
112
118
  resolvePresetUploadRequest,
119
+ token,
120
+ tokenDefaults,
121
+ tokens,
113
122
  useADKChat,
114
123
  useChatActions,
115
124
  useChatState,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/index.ts"],
4
- "sourcesContent": ["// index.ts\nimport { useXAi } from \"./context/AiProviderContext\";\nimport XAiProvider from \"./components/XAiProvider\";\nimport XAiChatbot from \"./components/XAiChatbot\";\nimport XAiSDK from \"./components/XAiSDK\";\nimport XAiSender from \"./components/XAiSender\";\nimport FileGallery from \"./components/FileGallery\";\nimport XAiConversations from \"./components/XAiConversations\";\nimport XAdkThoughtChain from \"./components/XAdkThoughtChain\";\nimport useXAiSDK from \"./hooks/useXAiSDK\";\nimport request from \"./utils/request\";\n\n// 新的 Compound Components 架构\nimport XAdkProvider from \"./components/XAdkProvider\";\nimport XAdkChatbot from \"./components/XAdkChatbot\";\nimport XAdkSender from \"./components/XAdkSender\";\nimport XAdkSenderSwitch from \"./components/XAdkSender/Switch\";\nimport useADKChat from \"./hooks/useADKChat\";\nimport {\n baseChatStrategies,\n basePreset,\n baseToolKindResolver,\n mergeChatStrategies,\n resolvePresetUploadRequest,\n resolveChatPreset,\n createXGroupUploadRequest,\n xGroupAdkPreset,\n xGroupToolKindResolver,\n} from \"./presets/xGroupAdk\";\n\n// 导出新的 Context Hooks\nexport {\n useChatState,\n useChatActions,\n useSession,\n} from \"./components/XAdkProvider/context\";\n\nexport * from \"./types\";\n\n// 导出自定义 Hook 相关类型\nexport type { ChatHookResult, ChatHookFactory } from \"./types/ChatHook\";\n\n// 旧 API - 保持向后兼容\nexport {\n useXAi,\n XAiProvider,\n XAiChatbot,\n XAiSDK,\n XAiSender,\n XAiConversations,\n useXAiSDK,\n request,\n};\n\n// 新 API - 推荐使用\nexport {\n XAdkProvider,\n XAdkChatbot,\n XAdkSender,\n XAdkSenderSwitch,\n FileGallery,\n XAdkThoughtChain,\n useADKChat,\n baseChatStrategies,\n basePreset,\n baseToolKindResolver,\n createXGroupUploadRequest,\n mergeChatStrategies,\n resolvePresetUploadRequest,\n resolveChatPreset,\n xGroupAdkPreset,\n xGroupToolKindResolver,\n};\n\n// FolderTree 文件树组件\nimport FolderTree from \"./components/FolderTree\";\nexport { FolderTree };\nexport type {\n FolderTreeProps,\n FolderTreeData,\n FileContentService,\n FolderTreeRef,\n} from \"./components/FolderTree\";\n\n// 基础组件导出 - 供高级用户和业务侧使用\nexport { default as MarkdownRender } from \"./components/XAdkChatbot/components/MarkdownRender\";\nexport { default as FunctionCallRender } from \"./components/XAdkChatbot/components/FunctionCallRender\";\nexport { default as ThinkRender } from \"./components/XAdkChatbot/components/ThinkRender\";\n\n// 基础组件类型导出\nexport type { MarkdownRenderProps } from \"./components/XAdkChatbot/components/MarkdownRender\";\nexport type { FunctionCallRenderProps } from \"./types/FunctionCallRender\";\nexport type {\n XAdkThoughtChainProps,\n ThoughtChainItemType,\n} from \"./types/XAdkThoughtChain\";\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,wCAAAA;AAAA,EAAA,oCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA,wCAAAC;AAAA,EAAA,wCAAAC;AAAA,EAAA,oCAAAC;AAAA,EAAA,sCAAAC;AAAA,EAAA,gDAAAC;AAAA,EAAA,oCAAAC;AAAA,EAAA,gDAAAC;AAAA,EAAA,sCAAAC;AAAA,EAAA,4BAAAC;AAAA,EAAA,kCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAAAC;AAAA,EAAA;AAAA;AAAA,sCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA,oCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AACA,+BAAuB;AACvB,yBAAwB;AACxB,wBAAuB;AACvB,oBAAmB;AACnB,uBAAsB;AACtB,yBAAwB;AACxB,8BAA6B;AAC7B,8BAA6B;AAC7B,uBAAsB;AACtB,qBAAoB;AAGpB,0BAAyB;AACzB,yBAAwB;AACxB,wBAAuB;AACvB,oBAA6B;AAC7B,wBAAuB;AACvB,uBAUO;AAGP,qBAIO;AAEP,wBAAc,oBArCd;AA2EA,wBAAuB;AAUvB,4BAA0C;AAC1C,gCAA8C;AAC9C,yBAAuC;",
4
+ "sourcesContent": ["// index.ts\nimport { useXAi } from \"./context/AiProviderContext\";\nimport XAiProvider from \"./components/XAiProvider\";\nimport XAiChatbot from \"./components/XAiChatbot\";\nimport XAiSDK from \"./components/XAiSDK\";\nimport XAiSender from \"./components/XAiSender\";\nimport FileGallery from \"./components/FileGallery\";\nimport XAiConversations from \"./components/XAiConversations\";\nimport XAdkThoughtChain from \"./components/XAdkThoughtChain\";\nimport useXAiSDK from \"./hooks/useXAiSDK\";\nimport request from \"./utils/request\";\n\n// 新的 Compound Components 架构\nimport XAdkProvider from \"./components/XAdkProvider\";\nimport XAdkChatbot from \"./components/XAdkChatbot\";\nimport XAdkSender from \"./components/XAdkSender\";\nimport XAdkSenderSwitch from \"./components/XAdkSender/Switch\";\nimport useADKChat from \"./hooks/useADKChat\";\nimport {\n baseChatStrategies,\n basePreset,\n baseToolKindResolver,\n mergeChatStrategies,\n resolvePresetUploadRequest,\n resolveChatPreset,\n createXGroupUploadRequest,\n xGroupAdkPreset,\n xGroupToolKindResolver,\n} from \"./presets/xGroupAdk\";\n\n// 导出新的 Context Hooks\nexport {\n useChatState,\n useChatActions,\n useSession,\n} from \"./components/XAdkProvider/context\";\n\nexport * from \"./types\";\n\n// 导出自定义 Hook 相关类型\nexport type { ChatHookResult, ChatHookFactory } from \"./types/ChatHook\";\n\n// 旧 API - 保持向后兼容\nexport {\n useXAi,\n XAiProvider,\n XAiChatbot,\n XAiSDK,\n XAiSender,\n XAiConversations,\n useXAiSDK,\n request,\n};\n\n// 新 API - 推荐使用\nexport {\n XAdkProvider,\n XAdkChatbot,\n XAdkSender,\n XAdkSenderSwitch,\n FileGallery,\n XAdkThoughtChain,\n useADKChat,\n baseChatStrategies,\n basePreset,\n baseToolKindResolver,\n createXGroupUploadRequest,\n mergeChatStrategies,\n resolvePresetUploadRequest,\n resolveChatPreset,\n xGroupAdkPreset,\n xGroupToolKindResolver,\n};\n\n// FolderTree 文件树组件\nimport FolderTree from \"./components/FolderTree\";\nexport { FolderTree };\nexport type {\n FolderTreeProps,\n FolderTreeData,\n FileContentService,\n FolderTreeRef,\n} from \"./components/FolderTree\";\n\n// 基础组件导出 - 供高级用户和业务侧使用\nexport { default as MarkdownRender } from \"./components/XAdkChatbot/components/MarkdownRender\";\nexport { default as FunctionCallRender } from \"./components/XAdkChatbot/components/FunctionCallRender\";\nexport { default as ThinkRender } from \"./components/XAdkChatbot/components/ThinkRender\";\n\n// 基础组件类型导出\nexport type { MarkdownRenderProps } from \"./components/XAdkChatbot/components/MarkdownRender\";\nexport type { FunctionCallRenderProps } from \"./types/FunctionCallRender\";\nexport type {\n XAdkThoughtChainProps,\n ThoughtChainItemType,\n ThoughtChainStatus,\n} from \"./types/XAdkThoughtChain\";\n\n// 设计令牌导出 - 供引用方覆盖样式\nexport { tokens, tokenDefaults, token, cssVarStyle } from \"./styles/tokens\";\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,wCAAAA;AAAA,EAAA,oCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA,wCAAAC;AAAA,EAAA,wCAAAC;AAAA,EAAA,oCAAAC;AAAA,EAAA,sCAAAC;AAAA,EAAA,gDAAAC;AAAA,EAAA,oCAAAC;AAAA,EAAA,gDAAAC;AAAA,EAAA,sCAAAC;AAAA,EAAA,4BAAAC;AAAA,EAAA,kCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA,oCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AACA,+BAAuB;AACvB,yBAAwB;AACxB,wBAAuB;AACvB,oBAAmB;AACnB,uBAAsB;AACtB,yBAAwB;AACxB,8BAA6B;AAC7B,8BAA6B;AAC7B,uBAAsB;AACtB,qBAAoB;AAGpB,0BAAyB;AACzB,yBAAwB;AACxB,wBAAuB;AACvB,oBAA6B;AAC7B,wBAAuB;AACvB,uBAUO;AAGP,qBAIO;AAEP,wBAAc,oBArCd;AA2EA,wBAAuB;AAUvB,4BAA0C;AAC1C,gCAA8C;AAC9C,yBAAuC;AAYvC,oBAA0D;",
6
6
  "names": ["FileGallery", "FolderTree", "XAdkChatbot", "XAdkProvider", "XAdkSender", "XAdkSenderSwitch", "XAdkThoughtChain", "XAiChatbot", "XAiConversations", "XAiProvider", "XAiSDK", "XAiSender", "request", "useADKChat", "useXAiSDK"]
7
7
  }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * CSS Variables 设计令牌统一管理
3
+ *
4
+ * 引用方可通过在父容器设置同名 CSS 变量来覆盖组件样式:
5
+ * .my-app { --xadk-color-primary: #7c3aed; }
6
+ */
7
+ /** CSS 变量名常量 */
8
+ export declare const tokens: {
9
+ readonly colorPrimary: "--xadk-color-primary";
10
+ readonly colorSuccess: "--xadk-color-success";
11
+ readonly colorError: "--xadk-color-error";
12
+ readonly colorWarning: "--xadk-color-warning";
13
+ readonly colorTextSecondary: "--xadk-color-text-secondary";
14
+ readonly colorBorder: "--xadk-color-border";
15
+ readonly colorBgHover: "--xadk-color-bg-hover";
16
+ readonly fontSizeSm: "--xadk-font-size-sm";
17
+ readonly fontSizeBase: "--xadk-font-size-base";
18
+ readonly borderRadius: "--xadk-border-radius";
19
+ readonly spacingSm: "--xadk-spacing-sm";
20
+ readonly spacingMd: "--xadk-spacing-md";
21
+ };
22
+ /** 默认值映射 */
23
+ export declare const tokenDefaults: Record<string, string>;
24
+ /** 生成 var() 引用(带 fallback 默认值) */
25
+ export declare const token: (name: string, fallback?: string) => string;
26
+ /** 将 tokenDefaults 转为可注入到 style 属性的对象 */
27
+ export declare const cssVarStyle: Record<string, string>;
@@ -0,0 +1,72 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // src/styles/tokens.ts
20
+ var tokens_exports = {};
21
+ __export(tokens_exports, {
22
+ cssVarStyle: () => cssVarStyle,
23
+ token: () => token,
24
+ tokenDefaults: () => tokenDefaults,
25
+ tokens: () => tokens
26
+ });
27
+ module.exports = __toCommonJS(tokens_exports);
28
+ var tokens = {
29
+ // 颜色
30
+ colorPrimary: "--xadk-color-primary",
31
+ colorSuccess: "--xadk-color-success",
32
+ colorError: "--xadk-color-error",
33
+ colorWarning: "--xadk-color-warning",
34
+ colorTextSecondary: "--xadk-color-text-secondary",
35
+ colorBorder: "--xadk-color-border",
36
+ colorBgHover: "--xadk-color-bg-hover",
37
+ // 字体
38
+ fontSizeSm: "--xadk-font-size-sm",
39
+ fontSizeBase: "--xadk-font-size-base",
40
+ // 圆角
41
+ borderRadius: "--xadk-border-radius",
42
+ // 间距
43
+ spacingSm: "--xadk-spacing-sm",
44
+ spacingMd: "--xadk-spacing-md"
45
+ };
46
+ var tokenDefaults = {
47
+ [tokens.colorPrimary]: "#0078FF",
48
+ [tokens.colorSuccess]: "#52c41a",
49
+ [tokens.colorError]: "#ff4d4f",
50
+ [tokens.colorWarning]: "#faad14",
51
+ [tokens.colorTextSecondary]: "#8194ad",
52
+ [tokens.colorBorder]: "#e5e5e5",
53
+ [tokens.colorBgHover]: "#f5f5f5",
54
+ [tokens.fontSizeSm]: "12px",
55
+ [tokens.fontSizeBase]: "13px",
56
+ [tokens.borderRadius]: "8px",
57
+ [tokens.spacingSm]: "8px",
58
+ [tokens.spacingMd]: "16px"
59
+ };
60
+ var token = (name, fallback) => {
61
+ const defaultVal = fallback ?? tokenDefaults[name];
62
+ return defaultVal ? `var(${name}, ${defaultVal})` : `var(${name})`;
63
+ };
64
+ var cssVarStyle = { ...tokenDefaults };
65
+ // Annotate the CommonJS export names for ESM import in node:
66
+ 0 && (module.exports = {
67
+ cssVarStyle,
68
+ token,
69
+ tokenDefaults,
70
+ tokens
71
+ });
72
+ //# sourceMappingURL=tokens.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/styles/tokens.ts"],
4
+ "sourcesContent": ["/**\n * CSS Variables 设计令牌统一管理\n *\n * 引用方可通过在父容器设置同名 CSS 变量来覆盖组件样式:\n * .my-app { --xadk-color-primary: #7c3aed; }\n */\n\n/** CSS 变量名常量 */\nexport const tokens = {\n // 颜色\n colorPrimary: \"--xadk-color-primary\",\n colorSuccess: \"--xadk-color-success\",\n colorError: \"--xadk-color-error\",\n colorWarning: \"--xadk-color-warning\",\n colorTextSecondary: \"--xadk-color-text-secondary\",\n colorBorder: \"--xadk-color-border\",\n colorBgHover: \"--xadk-color-bg-hover\",\n\n // 字体\n fontSizeSm: \"--xadk-font-size-sm\",\n fontSizeBase: \"--xadk-font-size-base\",\n\n // 圆角\n borderRadius: \"--xadk-border-radius\",\n\n // 间距\n spacingSm: \"--xadk-spacing-sm\",\n spacingMd: \"--xadk-spacing-md\",\n} as const;\n\n/** 默认值映射 */\nexport const tokenDefaults: Record<string, string> = {\n [tokens.colorPrimary]: \"#0078FF\",\n [tokens.colorSuccess]: \"#52c41a\",\n [tokens.colorError]: \"#ff4d4f\",\n [tokens.colorWarning]: \"#faad14\",\n [tokens.colorTextSecondary]: \"#8194ad\",\n [tokens.colorBorder]: \"#e5e5e5\",\n [tokens.colorBgHover]: \"#f5f5f5\",\n [tokens.fontSizeSm]: \"12px\",\n [tokens.fontSizeBase]: \"13px\",\n [tokens.borderRadius]: \"8px\",\n [tokens.spacingSm]: \"8px\",\n [tokens.spacingMd]: \"16px\",\n};\n\n/** 生成 var() 引用(带 fallback 默认值) */\nexport const token = (name: string, fallback?: string): string => {\n const defaultVal = fallback ?? tokenDefaults[name];\n return defaultVal ? `var(${name}, ${defaultVal})` : `var(${name})`;\n};\n\n/** 将 tokenDefaults 转为可注入到 style 属性的对象 */\nexport const cssVarStyle: Record<string, string> = { ...tokenDefaults };\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQO,IAAM,SAAS;AAAA;AAAA,EAEpB,cAAc;AAAA,EACd,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,oBAAoB;AAAA,EACpB,aAAa;AAAA,EACb,cAAc;AAAA;AAAA,EAGd,YAAY;AAAA,EACZ,cAAc;AAAA;AAAA,EAGd,cAAc;AAAA;AAAA,EAGd,WAAW;AAAA,EACX,WAAW;AACb;AAGO,IAAM,gBAAwC;AAAA,EACnD,CAAC,OAAO,YAAY,GAAG;AAAA,EACvB,CAAC,OAAO,YAAY,GAAG;AAAA,EACvB,CAAC,OAAO,UAAU,GAAG;AAAA,EACrB,CAAC,OAAO,YAAY,GAAG;AAAA,EACvB,CAAC,OAAO,kBAAkB,GAAG;AAAA,EAC7B,CAAC,OAAO,WAAW,GAAG;AAAA,EACtB,CAAC,OAAO,YAAY,GAAG;AAAA,EACvB,CAAC,OAAO,UAAU,GAAG;AAAA,EACrB,CAAC,OAAO,YAAY,GAAG;AAAA,EACvB,CAAC,OAAO,YAAY,GAAG;AAAA,EACvB,CAAC,OAAO,SAAS,GAAG;AAAA,EACpB,CAAC,OAAO,SAAS,GAAG;AACtB;AAGO,IAAM,QAAQ,CAAC,MAAc,aAA8B;AAChE,QAAM,aAAa,YAAY,cAAc,IAAI;AACjD,SAAO,aAAa,OAAO,SAAS,gBAAgB,OAAO;AAC7D;AAGO,IAAM,cAAsC,EAAE,GAAG,cAAc;",
6
+ "names": []
7
+ }
@@ -273,7 +273,11 @@ export interface XAdkChatbotProps extends Partial<XAdkSenderProps> {
273
273
  welcome?: ReactNode;
274
274
  /** 显示函数调用详情 */
275
275
  showFnCallDetail?: boolean;
276
- /** 是否初始化完成,初始化完成后自动滚动到最新消息 */
276
+ /**
277
+ * 数据是否就绪,就绪后触发首次自动滚底。默认 true。
278
+ * 仅在需要等待异步加载历史消息的场景(如 XAdkProvider 内)才需设为 false,
279
+ * 待数据加载完成后再切换为 true;独立使用时无需关心此属性。
280
+ */
277
281
  initialized?: boolean;
278
282
  /**
279
283
  * 当前会话 ID,切换时自动重置滚动状态并置底。
@@ -345,4 +349,6 @@ export interface XAdkChatbotProps extends Partial<XAdkSenderProps> {
345
349
  stream?: boolean;
346
350
  /** 点击对话中附件卡片的回调(非图片、非音视频文件) */
347
351
  onFileClick?: (file: FileItem) => void;
352
+ /** 消息列表为空时展示的自定义空状态组件 */
353
+ empty?: ReactNode | (() => ReactNode);
348
354
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/types/XAdkChatbot.ts"],
4
- "sourcesContent": ["import type { CSSProperties, JSX, ReactNode } from \"react\";\nimport { type XAdkSenderProps } from \"./XAdkSender\";\nimport { type SendContent } from \"./XAiSender\";\nimport { type FileItem } from \"./FileGallery\";\nimport { type ToolRenderKind } from \"./FunctionCallRender\";\nimport { type ChatPresetInput, type ChatStrategies } from \"./ChatStrategies\";\n\n/**\n * XAdkChatbot 命令式 API\n */\nexport interface XAdkChatbotHandle {\n /** 手动滚动到底部 */\n scrollToBottom: (behavior?: ScrollBehavior) => void;\n}\n\n/**\n * 消息分组接口\n */\nexport interface ChatGroup {\n id: string;\n role: \"user\" | \"bot\";\n msgs: IMessage[];\n invocationId?: string;\n allFiles: any[];\n /** 点赞状态: 1=赞, -1=踩, 0=未反馈 */\n isLike?: number;\n}\n\nexport interface IInvocation {\n id: string;\n name: string;\n spanId: string;\n traceId: string;\n parentSpanId: string;\n startTime: number;\n endTime: number;\n sessionId: string;\n invocationId: string;\n duration: number;\n attributes: Record<string, string>;\n botName: string;\n workspaceNo: string;\n status: number;\n agentName: string;\n agentNo: string;\n agentVersionNo: string;\n userId: string;\n}\n\nexport interface AgentRunRequest {\n stream?: boolean;\n sessionId: string | undefined;\n content: {\n parts: Array<{\n text?: string;\n functionResponse?: {\n id?: string;\n name?: string;\n response?: any;\n };\n }>;\n role: string;\n };\n files?: Array<{\n fileName: string;\n fileId?: string;\n tempUrl: string;\n type?: string;\n mimeType: string;\n }>;\n stateDelta?: any;\n}\nexport interface Blob {\n displayName?: string;\n mimeType?: string;\n data: string;\n}\n\nexport interface FunctionCall {\n id?: string;\n name: string;\n args: { [key: string]: any };\n}\n\nexport interface FunctionResponse {\n id?: string;\n name: string;\n response: { [key: string]: any };\n}\n\nexport interface FileData {\n displayName: string;\n mimeType: string;\n fileUri: string;\n}\n\nexport interface ExecutableCode {\n language: \"UNKNOWN\" | \"PYTHON\";\n code: string;\n}\n\nexport interface CodeExecutionResult {\n outcome: \"UNKNOWN\" | \"OK\" | \"FAILED\" | \"DEADLINE_EXCEEDED\";\n output: string;\n}\n\nexport interface Part {\n text?: string;\n inlineData?: Blob;\n functionCall?: FunctionCall;\n functionResponse?: FunctionResponse;\n thought?: boolean;\n fileData?: FileData;\n executableCode?: ExecutableCode;\n codeExecutionResult?: CodeExecutionResult;\n errorMessage?: string;\n}\n\nexport interface GenAiContent {\n role: string;\n parts: Part[];\n}\n\nexport interface LlmRequest {\n contents: GenAiContent[];\n}\n\nexport interface LlmResponse {\n partial?: boolean;\n content: GenAiContent;\n error?: string;\n errorMessage?: string;\n errorCode?: string;\n longRunningToolIds?: string[];\n}\n\nexport interface UsageMetadata {\n candidatesTokenCount?: number;\n promptTokenCount?: number;\n totalTokenCount?: number;\n [key: string]: any;\n}\n\nexport interface EventActions {\n message?: string;\n artifactDelta?: any;\n functionCall?: FunctionCall;\n functionResponse?: FunctionResponse;\n finishReason?: string;\n}\n\nexport interface Event extends LlmResponse {\n id?: string;\n author?: string;\n modelCode?: string;\n invocationId?: string;\n actions?: EventActions;\n longRunningToolIds?: string[];\n branch?: string;\n timestamp?: number;\n finishReason?: string;\n usageMetadata?: UsageMetadata;\n evalStatus?: any;\n failedMetric?: any;\n evalScore?: any;\n evalThreshold?: any;\n groundingMetadata?: {\n searchEntryPoint?: {\n renderedContent?: any;\n };\n };\n isLike?: number;\n sessionId?: string;\n}\n\nexport interface SessionState {\n [key: string]: unknown;\n}\n\nexport interface Session {\n id?: string;\n appName?: string;\n userId?: string;\n state?: SessionState;\n events?: Event[];\n lastUpdateTime?: number;\n}\n\nexport interface TimeTick {\n position: number;\n label: string;\n}\n\nexport interface IMessage {\n /** 前端生成的唯一标识 */\n id: string;\n /** 单次请求的唯一标识 */\n invocationId?: string;\n /** 单个Event的唯一标识,一个event里有可能有多个parts的消息 */\n eventId?: string;\n /** 消息发起人:智能体名称、user */\n author?: string;\n role: \"bot\" | \"user\";\n /** 时间戳 */\n timestamp?: number;\n isLoading?: boolean;\n /** 函数调用 */\n functionCall?: FunctionCall;\n /** 函数调用结果 */\n functionResponse?: FunctionResponse;\n /** 文件上传 */\n inlineData?: Blob;\n /** 文本消息 */\n text?: string;\n /** 文件信息 */\n fileData?: FileData[];\n /** 思考 */\n thought?: boolean;\n executableCode?: ExecutableCode;\n codeExecutionResult?: CodeExecutionResult;\n renderedContent?: any;\n /** 原始数据 */\n raw?: any;\n /** 模型编码,通常来自 stream 事件或历史消息 */\n modelCode?: string;\n /** 事件级 token 使用量等模型调用元数据 */\n usageMetadata?: UsageMetadata;\n /** 结束原因,通常来自最后一条 stream 事件 */\n finishReason?: string;\n // 下面暂时没有用到\n evalStatus?: any;\n failedMetric?: any;\n evalScore?: any;\n evalThreshold?: any;\n invocationIndex?: any;\n finalResponsePartIndex?: any;\n toolUseIndex?: any;\n /** 是否赞/踩 */\n isLike?: number;\n}\n\nexport type ActionProps = (data: {\n message: ChatGroup;\n isLastBotMsg: boolean;\n}) => JSX.Element | null;\n\nexport type ActionExtraProps = (data: {\n message: ChatGroup;\n isLastBotMsg: boolean;\n}) => ReactNode;\n\n/**\n * 自定义工具调用渲染函数\n * - 返回 ReactNode:使用自定义渲染\n * - 返回 null:降级使用默认渲染\n *\n * @example\n * renderFunctionCall={(msg) => {\n * if (msg.functionCall?.name === 'my_tool') return <MyToolRender msg={msg} />;\n * return null; // 其他工具使用默认渲染\n * }}\n */\nexport type RenderFunctionCall = (msg: IMessage) => ReactNode | null;\n\nexport interface XAdkChatbotProps extends Partial<XAdkSenderProps> {\n /**\n * 自定义工具调用渲染函数\n * 返回 null 则降级使用默认渲染\n */\n renderFunctionCall?: RenderFunctionCall;\n /**\n * 工具名 → 渲染类型的解析策略,默认使用 defaultToolKindResolver\n */\n toolKindResolver?: (name: string | undefined) => ToolRenderKind;\n /**\n * 聊天策略,可由 Provider preset 自动下发,也可在组件局部覆盖。\n */\n strategies?: ChatStrategies;\n /**\n * 组件直用时的协议预设。默认沿用 xgroup-adk 以兼容既有业务接入;\n * 需要中立行为时可传入 base。\n */\n preset?: ChatPresetInput;\n className?: string;\n style?: CSSProperties;\n // 加载状态\n loading?: boolean;\n /** 消息列表 */\n messages: IMessage[];\n /** 开场白 */\n prologue?: string;\n /** 建议回复 */\n suggestions?: string[];\n /** 欢迎页面 */\n welcome?: ReactNode;\n /** 显示函数调用详情 */\n showFnCallDetail?: boolean;\n /** 是否初始化完成,初始化完成后自动滚动到最新消息 */\n initialized?: boolean;\n /**\n * 当前会话 ID,切换时自动重置滚动状态并置底。\n * 不传则退化为仅依赖 initialized 的单次置底行为。\n */\n sessionId?: string;\n /** 提交回调 */\n onSubmit?: ({ text, files }: SendContent) => void;\n /** 函数调用确认回调 */\n onConfirm?: (fnCall: FunctionCall, confirmed: boolean) => void;\n /** 停止回调 */\n onStop?: () => void;\n /** 清除回调 */\n onClear?: () => void;\n /** 建议回复回调 */\n onSuggest?: (text: string) => void;\n\n // ========== 新增功能 ==========\n\n /** Agent 名称 (欢迎页面) */\n agentName?: string;\n /** Agent 图标 (欢迎页面) */\n agentIcon?: string;\n /** Agent 描述 (欢迎页面) */\n description?: string;\n\n /** 是否显示重试按钮 */\n showRetry?: boolean;\n /** 是否显示复制按钮 */\n showCopy?: boolean;\n /** 是否显示日志按钮 */\n showLog?: boolean;\n\n /** 重试回调 */\n onRetry?: () => void;\n /** 复制回调 */\n onCopy?: (text: string) => void;\n /** 查看日志回调 */\n onShowLog?: (invocationId: string, timestamp?: number) => void;\n\n /** 是否启用消息分组 (默认 true) */\n enableGrouping?: boolean;\n\n /** 是否自动解析 process 内容并展示思维链 (默认 true) */\n enableProcessParsing?: boolean;\n\n /** 消息功能区 */\n actions?: ActionProps;\n /** 追加在消息功能区之后的内容,适合展示 token 消耗等业务扩展信息 */\n actionsExtra?: ActionExtraProps;\n\n /**\n * Process 解析选项\n * @example\n * // 业务项目格式 (注释模式)\n * parseOptions={{ mode: 'comment' }}\n *\n * @example\n * // 自定义格式\n * parseOptions={{\n * mode: 'custom',\n * customPatterns: [\n * { regex: /\\[REASONING\\]([\\s\\S]*?)\\[\\/REASONING\\]/g, type: 'reasoning' }\n * ]\n * }}\n */\n parseOptions?: {\n mode?: \"xml\" | \"comment\" | \"custom\";\n customPatterns?: Array<{ regex: RegExp; type: string }>;\n finalMarker?: string;\n };\n\n /** 是否禁用输入 */\n disabled?: boolean;\n\n /** 是否流式响应 */\n stream?: boolean;\n\n /** 点击对话中附件卡片的回调(非图片、非音视频文件) */\n onFileClick?: (file: FileItem) => void;\n}\n"],
4
+ "sourcesContent": ["import type { CSSProperties, JSX, ReactNode } from \"react\";\nimport { type XAdkSenderProps } from \"./XAdkSender\";\nimport { type SendContent } from \"./XAiSender\";\nimport { type FileItem } from \"./FileGallery\";\nimport { type ToolRenderKind } from \"./FunctionCallRender\";\nimport { type ChatPresetInput, type ChatStrategies } from \"./ChatStrategies\";\n\n/**\n * XAdkChatbot 命令式 API\n */\nexport interface XAdkChatbotHandle {\n /** 手动滚动到底部 */\n scrollToBottom: (behavior?: ScrollBehavior) => void;\n}\n\n/**\n * 消息分组接口\n */\nexport interface ChatGroup {\n id: string;\n role: \"user\" | \"bot\";\n msgs: IMessage[];\n invocationId?: string;\n allFiles: any[];\n /** 点赞状态: 1=赞, -1=踩, 0=未反馈 */\n isLike?: number;\n}\n\nexport interface IInvocation {\n id: string;\n name: string;\n spanId: string;\n traceId: string;\n parentSpanId: string;\n startTime: number;\n endTime: number;\n sessionId: string;\n invocationId: string;\n duration: number;\n attributes: Record<string, string>;\n botName: string;\n workspaceNo: string;\n status: number;\n agentName: string;\n agentNo: string;\n agentVersionNo: string;\n userId: string;\n}\n\nexport interface AgentRunRequest {\n stream?: boolean;\n sessionId: string | undefined;\n content: {\n parts: Array<{\n text?: string;\n functionResponse?: {\n id?: string;\n name?: string;\n response?: any;\n };\n }>;\n role: string;\n };\n files?: Array<{\n fileName: string;\n fileId?: string;\n tempUrl: string;\n type?: string;\n mimeType: string;\n }>;\n stateDelta?: any;\n}\nexport interface Blob {\n displayName?: string;\n mimeType?: string;\n data: string;\n}\n\nexport interface FunctionCall {\n id?: string;\n name: string;\n args: { [key: string]: any };\n}\n\nexport interface FunctionResponse {\n id?: string;\n name: string;\n response: { [key: string]: any };\n}\n\nexport interface FileData {\n displayName: string;\n mimeType: string;\n fileUri: string;\n}\n\nexport interface ExecutableCode {\n language: \"UNKNOWN\" | \"PYTHON\";\n code: string;\n}\n\nexport interface CodeExecutionResult {\n outcome: \"UNKNOWN\" | \"OK\" | \"FAILED\" | \"DEADLINE_EXCEEDED\";\n output: string;\n}\n\nexport interface Part {\n text?: string;\n inlineData?: Blob;\n functionCall?: FunctionCall;\n functionResponse?: FunctionResponse;\n thought?: boolean;\n fileData?: FileData;\n executableCode?: ExecutableCode;\n codeExecutionResult?: CodeExecutionResult;\n errorMessage?: string;\n}\n\nexport interface GenAiContent {\n role: string;\n parts: Part[];\n}\n\nexport interface LlmRequest {\n contents: GenAiContent[];\n}\n\nexport interface LlmResponse {\n partial?: boolean;\n content: GenAiContent;\n error?: string;\n errorMessage?: string;\n errorCode?: string;\n longRunningToolIds?: string[];\n}\n\nexport interface UsageMetadata {\n candidatesTokenCount?: number;\n promptTokenCount?: number;\n totalTokenCount?: number;\n [key: string]: any;\n}\n\nexport interface EventActions {\n message?: string;\n artifactDelta?: any;\n functionCall?: FunctionCall;\n functionResponse?: FunctionResponse;\n finishReason?: string;\n}\n\nexport interface Event extends LlmResponse {\n id?: string;\n author?: string;\n modelCode?: string;\n invocationId?: string;\n actions?: EventActions;\n longRunningToolIds?: string[];\n branch?: string;\n timestamp?: number;\n finishReason?: string;\n usageMetadata?: UsageMetadata;\n evalStatus?: any;\n failedMetric?: any;\n evalScore?: any;\n evalThreshold?: any;\n groundingMetadata?: {\n searchEntryPoint?: {\n renderedContent?: any;\n };\n };\n isLike?: number;\n sessionId?: string;\n}\n\nexport interface SessionState {\n [key: string]: unknown;\n}\n\nexport interface Session {\n id?: string;\n appName?: string;\n userId?: string;\n state?: SessionState;\n events?: Event[];\n lastUpdateTime?: number;\n}\n\nexport interface TimeTick {\n position: number;\n label: string;\n}\n\nexport interface IMessage {\n /** 前端生成的唯一标识 */\n id: string;\n /** 单次请求的唯一标识 */\n invocationId?: string;\n /** 单个Event的唯一标识,一个event里有可能有多个parts的消息 */\n eventId?: string;\n /** 消息发起人:智能体名称、user */\n author?: string;\n role: \"bot\" | \"user\";\n /** 时间戳 */\n timestamp?: number;\n isLoading?: boolean;\n /** 函数调用 */\n functionCall?: FunctionCall;\n /** 函数调用结果 */\n functionResponse?: FunctionResponse;\n /** 文件上传 */\n inlineData?: Blob;\n /** 文本消息 */\n text?: string;\n /** 文件信息 */\n fileData?: FileData[];\n /** 思考 */\n thought?: boolean;\n executableCode?: ExecutableCode;\n codeExecutionResult?: CodeExecutionResult;\n renderedContent?: any;\n /** 原始数据 */\n raw?: any;\n /** 模型编码,通常来自 stream 事件或历史消息 */\n modelCode?: string;\n /** 事件级 token 使用量等模型调用元数据 */\n usageMetadata?: UsageMetadata;\n /** 结束原因,通常来自最后一条 stream 事件 */\n finishReason?: string;\n // 下面暂时没有用到\n evalStatus?: any;\n failedMetric?: any;\n evalScore?: any;\n evalThreshold?: any;\n invocationIndex?: any;\n finalResponsePartIndex?: any;\n toolUseIndex?: any;\n /** 是否赞/踩 */\n isLike?: number;\n}\n\nexport type ActionProps = (data: {\n message: ChatGroup;\n isLastBotMsg: boolean;\n}) => JSX.Element | null;\n\nexport type ActionExtraProps = (data: {\n message: ChatGroup;\n isLastBotMsg: boolean;\n}) => ReactNode;\n\n/**\n * 自定义工具调用渲染函数\n * - 返回 ReactNode:使用自定义渲染\n * - 返回 null:降级使用默认渲染\n *\n * @example\n * renderFunctionCall={(msg) => {\n * if (msg.functionCall?.name === 'my_tool') return <MyToolRender msg={msg} />;\n * return null; // 其他工具使用默认渲染\n * }}\n */\nexport type RenderFunctionCall = (msg: IMessage) => ReactNode | null;\n\nexport interface XAdkChatbotProps extends Partial<XAdkSenderProps> {\n /**\n * 自定义工具调用渲染函数\n * 返回 null 则降级使用默认渲染\n */\n renderFunctionCall?: RenderFunctionCall;\n /**\n * 工具名 → 渲染类型的解析策略,默认使用 defaultToolKindResolver\n */\n toolKindResolver?: (name: string | undefined) => ToolRenderKind;\n /**\n * 聊天策略,可由 Provider preset 自动下发,也可在组件局部覆盖。\n */\n strategies?: ChatStrategies;\n /**\n * 组件直用时的协议预设。默认沿用 xgroup-adk 以兼容既有业务接入;\n * 需要中立行为时可传入 base。\n */\n preset?: ChatPresetInput;\n className?: string;\n style?: CSSProperties;\n // 加载状态\n loading?: boolean;\n /** 消息列表 */\n messages: IMessage[];\n /** 开场白 */\n prologue?: string;\n /** 建议回复 */\n suggestions?: string[];\n /** 欢迎页面 */\n welcome?: ReactNode;\n /** 显示函数调用详情 */\n showFnCallDetail?: boolean;\n /**\n * 数据是否就绪,就绪后触发首次自动滚底。默认 true。\n * 仅在需要等待异步加载历史消息的场景(如 XAdkProvider 内)才需设为 false,\n * 待数据加载完成后再切换为 true;独立使用时无需关心此属性。\n */\n initialized?: boolean;\n /**\n * 当前会话 ID,切换时自动重置滚动状态并置底。\n * 不传则退化为仅依赖 initialized 的单次置底行为。\n */\n sessionId?: string;\n /** 提交回调 */\n onSubmit?: ({ text, files }: SendContent) => void;\n /** 函数调用确认回调 */\n onConfirm?: (fnCall: FunctionCall, confirmed: boolean) => void;\n /** 停止回调 */\n onStop?: () => void;\n /** 清除回调 */\n onClear?: () => void;\n /** 建议回复回调 */\n onSuggest?: (text: string) => void;\n\n // ========== 新增功能 ==========\n\n /** Agent 名称 (欢迎页面) */\n agentName?: string;\n /** Agent 图标 (欢迎页面) */\n agentIcon?: string;\n /** Agent 描述 (欢迎页面) */\n description?: string;\n\n /** 是否显示重试按钮 */\n showRetry?: boolean;\n /** 是否显示复制按钮 */\n showCopy?: boolean;\n /** 是否显示日志按钮 */\n showLog?: boolean;\n\n /** 重试回调 */\n onRetry?: () => void;\n /** 复制回调 */\n onCopy?: (text: string) => void;\n /** 查看日志回调 */\n onShowLog?: (invocationId: string, timestamp?: number) => void;\n\n /** 是否启用消息分组 (默认 true) */\n enableGrouping?: boolean;\n\n /** 是否自动解析 process 内容并展示思维链 (默认 true) */\n enableProcessParsing?: boolean;\n\n /** 消息功能区 */\n actions?: ActionProps;\n /** 追加在消息功能区之后的内容,适合展示 token 消耗等业务扩展信息 */\n actionsExtra?: ActionExtraProps;\n\n /**\n * Process 解析选项\n * @example\n * // 业务项目格式 (注释模式)\n * parseOptions={{ mode: 'comment' }}\n *\n * @example\n * // 自定义格式\n * parseOptions={{\n * mode: 'custom',\n * customPatterns: [\n * { regex: /\\[REASONING\\]([\\s\\S]*?)\\[\\/REASONING\\]/g, type: 'reasoning' }\n * ]\n * }}\n */\n parseOptions?: {\n mode?: \"xml\" | \"comment\" | \"custom\";\n customPatterns?: Array<{ regex: RegExp; type: string }>;\n finalMarker?: string;\n };\n\n /** 是否禁用输入 */\n disabled?: boolean;\n\n /** 是否流式响应 */\n stream?: boolean;\n\n /** 点击对话中附件卡片的回调(非图片、非音视频文件) */\n onFileClick?: (file: FileItem) => void;\n\n /** 消息列表为空时展示的自定义空状态组件 */\n empty?: ReactNode | (() => ReactNode);\n}\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;AAAA;AAAA;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,18 @@
1
1
  import React, { type ReactNode } from "react";
2
2
  import { IMessage, RenderFunctionCall, ToolRenderKind, ChatStrategies } from "./";
3
+ export type ThoughtChainStatus = "pending" | "loading" | "success" | "error";
3
4
  export interface XAdkThoughtChainProps {
5
+ /** 是否显示外层可折叠 header(默认 false) */
6
+ collapsible?: boolean;
7
+ /** 状态枚举,优先级高于 loading(默认 'success') */
8
+ status?: ThoughtChainStatus;
9
+ /** 标准 className */
10
+ className?: string;
11
+ /** 标准 style */
12
+ style?: React.CSSProperties;
13
+ /** 默认展开状态,仅在 collapsible=true 时生效 */
4
14
  defaultOpen?: boolean;
15
+ /** @deprecated 使用 status='loading' 替代,保留向后兼容 */
5
16
  loading?: boolean;
6
17
  title?: ReactNode;
7
18
  items: ThoughtChainItemType[];
@@ -32,4 +43,6 @@ export interface ThoughtChainItemType {
32
43
  title?: ReactNode;
33
44
  collapsible?: boolean;
34
45
  msg?: IMessage;
46
+ /** item 级别状态 */
47
+ status?: ThoughtChainStatus;
35
48
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/types/XAdkThoughtChain.ts"],
4
- "sourcesContent": ["import React, { type ReactNode } from \"react\";\nimport {\n IMessage,\n RenderFunctionCall,\n ToolRenderKind,\n ChatStrategies,\n} from \"@/types\";\n\nexport interface XAdkThoughtChainProps {\n defaultOpen?: boolean;\n loading?: boolean;\n title?: ReactNode;\n items: ThoughtChainItemType[];\n showFnCallDetail?: boolean;\n onConfirm?: (fnCall: any, confirmed: boolean) => void;\n blink?: boolean;\n /** 自定义工具调用渲染函数,返回 null 则使用默认渲染 */\n renderFunctionCall?: RenderFunctionCall;\n /**\n * 工具名 → 渲染类型的解析策略,默认使用 defaultToolKindResolver\n */\n toolKindResolver?: (name: string | undefined) => ToolRenderKind;\n /** 聊天策略,可由 Provider preset 自动下发,也可在组件局部覆盖。 */\n strategies?: ChatStrategies;\n}\n\nexport interface TimelineItemProps {\n icon: React.ReactNode;\n title: React.ReactNode;\n children: React.ReactNode;\n collapsible?: boolean;\n defaultOpen?: boolean;\n blink?: boolean;\n}\n\nexport interface ThoughtChainItemType {\n type: \"tool\" | \"text\";\n key: string;\n content: string;\n title?: ReactNode;\n collapsible?: boolean;\n msg?: IMessage;\n}\n"],
4
+ "sourcesContent": ["import React, { type ReactNode } from \"react\";\nimport {\n IMessage,\n RenderFunctionCall,\n ToolRenderKind,\n ChatStrategies,\n} from \"@/types\";\n\nexport type ThoughtChainStatus = \"pending\" | \"loading\" | \"success\" | \"error\";\n\nexport interface XAdkThoughtChainProps {\n /** 是否显示外层可折叠 header(默认 false) */\n collapsible?: boolean;\n /** 状态枚举,优先级高于 loading(默认 'success') */\n status?: ThoughtChainStatus;\n /** 标准 className */\n className?: string;\n /** 标准 style */\n style?: React.CSSProperties;\n /** 默认展开状态,仅在 collapsible=true 时生效 */\n defaultOpen?: boolean;\n /** @deprecated 使用 status='loading' 替代,保留向后兼容 */\n loading?: boolean;\n title?: ReactNode;\n items: ThoughtChainItemType[];\n showFnCallDetail?: boolean;\n onConfirm?: (fnCall: any, confirmed: boolean) => void;\n blink?: boolean;\n /** 自定义工具调用渲染函数,返回 null 则使用默认渲染 */\n renderFunctionCall?: RenderFunctionCall;\n /**\n * 工具名 → 渲染类型的解析策略,默认使用 defaultToolKindResolver\n */\n toolKindResolver?: (name: string | undefined) => ToolRenderKind;\n /** 聊天策略,可由 Provider preset 自动下发,也可在组件局部覆盖。 */\n strategies?: ChatStrategies;\n}\n\nexport interface TimelineItemProps {\n icon: React.ReactNode;\n title: React.ReactNode;\n children: React.ReactNode;\n collapsible?: boolean;\n defaultOpen?: boolean;\n blink?: boolean;\n}\n\nexport interface ThoughtChainItemType {\n type: \"tool\" | \"text\";\n key: string;\n content: string;\n title?: ReactNode;\n collapsible?: boolean;\n msg?: IMessage;\n /** item 级别状态 */\n status?: ThoughtChainStatus;\n}\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;AAAA;AAAA;",
6
6
  "names": []
7
7
  }
@@ -276,7 +276,7 @@ var FileGallery = function FileGallery(_ref) {
276
276
  children: [/*#__PURE__*/_jsx(Image, {
277
277
  src: url,
278
278
  alt: fileName,
279
- fallback: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mN8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg==",
279
+ fallback: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMIAAADDCAYAAADQvc6UAAABRWlDQ1BJQ0MgUHJvZmlsZQAAKJFjYGASSSwoyGFhYGDIzSspCnJ3UoiIjFJgf8LAwSDCIMogwMCcmFxc4BgQ4ANUwgCjUcG3awyMIPqyLsis7PPOq3QdDFcvjV3jOD1boQVTPQrgSkktTgbSf4A4LbmgqISBgTEFyFYuLykAsTuAbJEioKOA7DkgdjqEvQHEToKwj4DVhAQ5A9k3gGyB5IxEoBmML4BsnSQk8XQkNtReEOBxcfXxUQg1Mjc0dyHgXNJBSWpFCYh2zi+oLMpMzyhRcASGUqqCZ16yno6CkYGRAQMDKMwhqj/fAIcloxgHQqxAjIHBEugw5sUIsSQpBobtQPdLciLEVJYzMPBHMDBsayhILEqEO4DxG0txmrERhM29nYGBddr//5/DGRjYNRkY/l7////39v///y4Dmn+LgeHANwDrkl1AuO+pmgAAADhlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAAAwqADAAQAAAABAAAAwwAAAAD9b/HnAAAHlklEQVR4Ae3dP3PTWBSGcbGzM6GCKqlIBRV0dHRJFarQ0eUT8LH4BnRU0NHR0UEFVdIlFRV7TzRksomPY8uykTk/zewQfKw/9znv4yvJynLv4uLiV2dBoDiBf4qP3/ARuCRABEFAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghggQAQZQKAnYEaQBAQaASKIAQJEkAEEegJmBElAoBEgghgg0Aj8i0JO4OzsrPv69Wv+hi2qPHr0qNvf39+iI97soRIh4f3z58/u7du3SXX7Xt7Z2enevHmzfQe+oSN2apSAPj09TSrb+XKI/f379+08+A0cNRE2ANkupk+ACNPvkSPcAAEibACyXUyfABGm3yNHuAECRNgAZLuYPgEirKlHu7u7XdyytGwHAd8jjNyng4OD7vnz51dbPT8/7z58+NB9+/bt6jU/TI+AGWHEnrx48eJ/EsSmHzx40L18+fLyzxF3ZVMjEyDCiEDjMYZZS5wiPXnyZFbJaxMhQIQRGzHvWR7XCyOCXsOmiDAi1HmPMMQjDpbpEiDCiL358eNHurW/5SnWdIBbXiDCiA38/Pnzrce2YyZ4//59F3ePLNMl4PbpiL2J0L979+7yDtHDhw8vtzzvdGnEXdvUigSIsCLAWavHp/+qM0BcXMd/q25n1vF57TYBp0a3mUzilePj4+7k5KSLb6gt6ydAhPUzXnoPR0dHl79WGTNCfBnn1uvSCJdegQhLI1vvCk+fPu2ePXt2tZOYEV6/fn31dz+shwAR1sP1cqvLntbEN9MxA9xcYjsxS1jWR4AIa2Ibzx0tc44fYX/16lV6NDFLXH+YL32jwiACRBiEbf5KcXoTIsQSpzXx4N28Ja4BQoK7rgXiydbHjx/P25TaQAJEGAguWy0+2Q8PD6/Ki4R8EVl+bzBOnZY95fq9rj9zAkTI2SxdidBHqG9+skdw43borCXO/ZcJdraPWdv22uIEiLA4q7nvvCug8WTqzQveOH26fodo7g6uFe/a17W3+nFBAkRYENRdb1vkkz1CH9cPsVy/jrhr27PqMYvENYNlHAIesRiBYwRy0V+8iXP8+/fvX11Mr7L7ECueb/r48eMqm7FuI2BGWDEG8cm+7G3NEOfmdcTQw4h9/55lhm7DekRYKQPZF2ArbXTAyu4kDYB2YxUzwg0gi/41ztHnfQG26HbGel/crVrm7tNY+/1btkOEAZ2M05r4FB7r9GbAIdxaZYrHdOsgJ/wCEQY0J74TmOKnbxxT9n3FgGGWWsVdowHtjt9Nnvf7yQM2aZU/TIAIAxrw6dOnAWtZZcoEnBpNuTuObWMEiLAx1HY0ZQJEmHJ3HNvGCBBhY6jtaMoEiJB0Z29vL6ls58vxPcO8/zfrdo5qvKO+d3Fx8Wu8zf1dW4p/cPzLly/dtv9Ts/EbcvGAHhHyfBIhZ6NSiIBTo0LNNtScABFyNiqFCBChULMNNSdAhJyNSiECRCjUbEPNCRAhZ6NSiAARCjXbUHMCRMjZqBQiQIRCzTbUnAARcjYqhQgQoVCzDTUnQIScjUohAkQo1GxDzQkQIWejUogAEQo121BzAkTI2agUIkCEQs021JwAEXI2KoUIEKFQsw01J0CEnI1KIQJEKNRsQ80JECFno1KIABEKNdtQcwJEyNmoFCJAhELNNtScABFyNiqFCBChULMNNSdAhJyNSiECRCjUbEPNCRAhZ6NSiAARCjXbUHMCRMjZqBQiQIRCzTbUnAARcjYqhQgQoVCzDTUnQIScjUohAkQo1GxDzQkQIWejUogAEQo121BzAkTI2agUIkCEQs021JwAEXI2KoUIEKFQsw01J0CEnI1KIQJEKNRsQ80JECFno1KIABEKNdtQcwJEyNmoFCJAhELNNtScABFyNiqFCBChULMNNSdAhJyNSiECRCjUbEPNCRAhZ6NSiAARCjXbUHMCRMjZqBQiQIRCzTbUnAARcjYqhQgQoVCzDTUnQIScjUohAkQo1GxDzQkQIWejUogAEQo121BzAkTI2agUIkCEQs021JwAEXI2KoUIEKFQsw01J0CEnI1KIQJEKNRsQ80JECFno1KIABEKNdtQcwJEyNmoFCJAhELNNtScABFyNiqFCBChULMNNSdAhJyNSiEC/wGgKKC4YMA4TAAAAABJRU5ErkJggg==",
280
280
  preview: _onClick ? false : {
281
281
  src: url
282
282
  }