@ai-group/chat-sdk 3.0.14 → 3.1.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.
- package/dist/cjs/components/FileGallery/index.js +16 -0
- package/dist/cjs/components/FileGallery/index.js.map +2 -2
- package/dist/cjs/components/XAdkChatbot/components/ThinkRender/index.d.ts +2 -2
- package/dist/cjs/components/XAdkChatbot/components/ThinkRender/index.js +25 -10
- package/dist/cjs/components/XAdkChatbot/components/ThinkRender/index.js.map +2 -2
- package/dist/cjs/components/XAdkChatbot/index.js +10 -3
- package/dist/cjs/components/XAdkChatbot/index.js.map +3 -3
- package/dist/cjs/components/XAdkThoughtChain/index.d.ts +4 -0
- package/dist/cjs/components/{XAiThoughtChain → XAdkThoughtChain}/index.js +37 -24
- package/dist/cjs/components/XAdkThoughtChain/index.js.map +7 -0
- package/dist/{esm/components/XAiThoughtChain → cjs/components/XAdkThoughtChain}/styles.d.ts +1 -0
- package/dist/cjs/components/{XAiThoughtChain → XAdkThoughtChain}/styles.js +29 -14
- package/dist/cjs/components/XAdkThoughtChain/styles.js.map +7 -0
- package/dist/cjs/index.d.ts +3 -3
- package/dist/cjs/index.js +3 -3
- package/dist/cjs/index.js.map +3 -3
- package/dist/cjs/types/{XAiThoughtChain.d.ts → XAdkThoughtChain.d.ts} +5 -3
- package/dist/cjs/types/{XAiThoughtChain.js → XAdkThoughtChain.js} +4 -4
- package/dist/cjs/types/XAdkThoughtChain.js.map +7 -0
- package/dist/cjs/types/index.d.ts +1 -1
- package/dist/cjs/types/index.js +2 -2
- package/dist/cjs/types/index.js.map +2 -2
- package/dist/esm/components/FileGallery/index.js +35 -1
- package/dist/esm/components/FileGallery/index.js.map +1 -1
- package/dist/esm/components/XAdkChatbot/components/ThinkRender/index.d.ts +2 -2
- package/dist/esm/components/XAdkChatbot/components/ThinkRender/index.js +28 -18
- package/dist/esm/components/XAdkChatbot/components/ThinkRender/index.js.map +1 -1
- package/dist/esm/components/XAdkChatbot/index.js +2 -2
- package/dist/esm/components/XAdkChatbot/index.js.map +1 -1
- package/dist/esm/components/XAdkThoughtChain/index.d.ts +4 -0
- package/dist/esm/components/{XAiThoughtChain → XAdkThoughtChain}/index.js +26 -21
- package/dist/esm/components/XAdkThoughtChain/index.js.map +1 -0
- package/dist/{cjs/components/XAiThoughtChain → esm/components/XAdkThoughtChain}/styles.d.ts +1 -0
- package/dist/esm/components/XAdkThoughtChain/styles.js +42 -0
- package/dist/esm/components/XAdkThoughtChain/styles.js.map +1 -0
- package/dist/esm/index.d.ts +3 -3
- package/dist/esm/index.js +2 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/{XAiThoughtChain.d.ts → XAdkThoughtChain.d.ts} +5 -3
- package/dist/esm/types/XAdkThoughtChain.js +2 -0
- package/dist/esm/types/XAdkThoughtChain.js.map +1 -0
- package/dist/esm/types/index.d.ts +1 -1
- package/dist/esm/types/index.js +1 -1
- package/dist/esm/types/index.js.map +1 -1
- package/dist/umd/chat-sdk.min.js +1 -1
- package/package.json +2 -2
- package/dist/cjs/components/XAiThoughtChain/index.d.ts +0 -4
- package/dist/cjs/components/XAiThoughtChain/index.js.map +0 -7
- package/dist/cjs/components/XAiThoughtChain/styles.js.map +0 -7
- package/dist/cjs/types/XAiThoughtChain.js.map +0 -7
- package/dist/esm/components/XAiThoughtChain/index.d.ts +0 -4
- package/dist/esm/components/XAiThoughtChain/index.js.map +0 -1
- package/dist/esm/components/XAiThoughtChain/styles.js +0 -40
- package/dist/esm/components/XAiThoughtChain/styles.js.map +0 -1
- package/dist/esm/types/XAiThoughtChain.js +0 -2
- package/dist/esm/types/XAiThoughtChain.js.map +0 -1
|
@@ -16,7 +16,7 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
16
|
};
|
|
17
17
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
18
|
|
|
19
|
-
// src/components/
|
|
19
|
+
// src/components/XAdkThoughtChain/styles.tsx
|
|
20
20
|
var styles_exports = {};
|
|
21
21
|
__export(styles_exports, {
|
|
22
22
|
useStyles: () => useStyles
|
|
@@ -24,23 +24,26 @@ __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 blinkAnimation = import_css.keyframes`
|
|
28
|
+
0% { background-position-x: -200%; background-position-y: 100%; }
|
|
29
|
+
25% { background-position-x: -100%; background-position-y: 100%; }
|
|
30
|
+
50% { background-position-x: 0%; background-position-y: 100%; }
|
|
31
|
+
75% { background-position-x: 100%; background-position-y: 100%; }
|
|
32
|
+
100% { background-position-x: 200%; background-position-y: 100%; }
|
|
33
|
+
`;
|
|
27
34
|
var useStyles = (0, import_common.withBasicStyles)(() => ({
|
|
28
35
|
/* --- ThoughtChain --- */
|
|
29
36
|
thoughtChainBlock: import_css.css`
|
|
30
37
|
margin-bottom: 16px;
|
|
31
|
-
background: #f9f9f9;
|
|
32
38
|
border-radius: 8px;
|
|
33
|
-
border: 1px solid #eee;
|
|
34
39
|
overflow: hidden;
|
|
35
40
|
`,
|
|
36
41
|
thoughtHeader: import_css.css`
|
|
37
42
|
display: flex;
|
|
38
|
-
justify-content: space-between;
|
|
39
43
|
align-items: center;
|
|
40
44
|
padding: 10px 14px;
|
|
41
45
|
cursor: pointer;
|
|
42
46
|
user-select: none;
|
|
43
|
-
background: #f5f5f5;
|
|
44
47
|
transition: background 0.2s;
|
|
45
48
|
&:hover {
|
|
46
49
|
background: #f0f0f0;
|
|
@@ -54,7 +57,7 @@ var useStyles = (0, import_common.withBasicStyles)(() => ({
|
|
|
54
57
|
`,
|
|
55
58
|
caret: import_css.css`
|
|
56
59
|
font-size: 12px;
|
|
57
|
-
color: #
|
|
60
|
+
color: #8194ad;
|
|
58
61
|
transition: transform 0.2s;
|
|
59
62
|
&.open {
|
|
60
63
|
transform: rotate(90deg);
|
|
@@ -67,13 +70,13 @@ var useStyles = (0, import_common.withBasicStyles)(() => ({
|
|
|
67
70
|
`,
|
|
68
71
|
headerTitle: import_css.css`
|
|
69
72
|
font-size: 13px;
|
|
70
|
-
color: #
|
|
73
|
+
color: #8194ad;
|
|
71
74
|
font-weight: 500;
|
|
72
75
|
`,
|
|
73
76
|
headerRight: import_css.css``,
|
|
74
77
|
stepCount: import_css.css`
|
|
75
78
|
font-size: 12px;
|
|
76
|
-
color: #
|
|
79
|
+
color: #8194ad;
|
|
77
80
|
background: #fff;
|
|
78
81
|
padding: 2px 6px;
|
|
79
82
|
border-radius: 4px;
|
|
@@ -81,7 +84,6 @@ var useStyles = (0, import_common.withBasicStyles)(() => ({
|
|
|
81
84
|
`,
|
|
82
85
|
thinkingBody: import_css.css`
|
|
83
86
|
background: #fff;
|
|
84
|
-
border-top: 1px solid #eee;
|
|
85
87
|
padding: 12px 16px;
|
|
86
88
|
animation: fadeIn 0.2s ease-in-out;
|
|
87
89
|
`,
|
|
@@ -102,7 +104,7 @@ var useStyles = (0, import_common.withBasicStyles)(() => ({
|
|
|
102
104
|
flex-shrink: 0;
|
|
103
105
|
`,
|
|
104
106
|
timelineIcon: import_css.css`
|
|
105
|
-
color: #
|
|
107
|
+
color: #8194ad;
|
|
106
108
|
font-size: 16px;
|
|
107
109
|
margin-top: 6px;
|
|
108
110
|
`,
|
|
@@ -145,7 +147,7 @@ var useStyles = (0, import_common.withBasicStyles)(() => ({
|
|
|
145
147
|
titleText: import_css.css`
|
|
146
148
|
font-size: 13px;
|
|
147
149
|
font-weight: 600;
|
|
148
|
-
color: #
|
|
150
|
+
color: #8194ad;
|
|
149
151
|
`,
|
|
150
152
|
toolTitleGroup: import_css.css`
|
|
151
153
|
display: flex;
|
|
@@ -156,7 +158,7 @@ var useStyles = (0, import_common.withBasicStyles)(() => ({
|
|
|
156
158
|
toolName: import_css.css`
|
|
157
159
|
font-size: 13px;
|
|
158
160
|
font-weight: 600;
|
|
159
|
-
color: #
|
|
161
|
+
color: #8194ad;
|
|
160
162
|
white-space: nowrap;
|
|
161
163
|
overflow: hidden;
|
|
162
164
|
text-overflow: ellipsis;
|
|
@@ -177,15 +179,28 @@ var useStyles = (0, import_common.withBasicStyles)(() => ({
|
|
|
177
179
|
`,
|
|
178
180
|
stepContent: import_css.css`
|
|
179
181
|
font-size: 13px;
|
|
180
|
-
color: #
|
|
182
|
+
color: #8194ad;
|
|
181
183
|
line-height: 1.6;
|
|
182
184
|
padding-left: 4px;
|
|
183
185
|
`,
|
|
184
186
|
statusInfo: import_css.css`
|
|
185
187
|
font-size: 12px;
|
|
186
|
-
color: #
|
|
188
|
+
color: #8194ad;
|
|
187
189
|
margin-bottom: 4px;
|
|
188
190
|
font-style: italic;
|
|
191
|
+
`,
|
|
192
|
+
blink: import_css.css`
|
|
193
|
+
color: #8194ad;
|
|
194
|
+
background-image: linear-gradient(90deg, transparent, rgba(0, 0, 0, 0.88), transparent);
|
|
195
|
+
background-clip: text;
|
|
196
|
+
-webkit-background-clip: text;
|
|
197
|
+
background-size: 50%;
|
|
198
|
+
background-repeat: no-repeat;
|
|
199
|
+
animation-name: ${blinkAnimation};
|
|
200
|
+
animation-duration: 1s;
|
|
201
|
+
animation-iteration-count: infinite;
|
|
202
|
+
animation-timing-function: linear;
|
|
203
|
+
animation-fill-mode: forwards;
|
|
189
204
|
`
|
|
190
205
|
}));
|
|
191
206
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 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 stepCount: css`\n font-size: 12px;\n color: #8194ad;\n background: #fff;\n padding: 2px 6px;\n border-radius: 4px;\n border: 1px solid #e0e0e0;\n `,\n\n thinkingBody: css`\n background: #fff;\n padding: 12px 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: 16px;\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(90deg, transparent, rgba(0, 0, 0, 0.88), transparent);\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,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASX,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQd,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,sBAOa;AAAA;AAAA;AAAA;AAAA;AAAA;AAMtB,EAAE;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/dist/cjs/index.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ import XAiSDK from "./components/XAiSDK";
|
|
|
5
5
|
import XAiSender from "./components/XAiSender";
|
|
6
6
|
import FileGallery from "./components/FileGallery";
|
|
7
7
|
import XAiConversations from "./components/XAiConversations";
|
|
8
|
-
import
|
|
8
|
+
import XAdkThoughtChain from "./components/XAdkThoughtChain";
|
|
9
9
|
import useXAiSDK from "./hooks/useXAiSDK";
|
|
10
10
|
import request from "./utils/request";
|
|
11
11
|
import XAdkProvider from "./components/XAdkProvider";
|
|
@@ -16,10 +16,10 @@ export { useChatState, useChatActions, useSession, } from "./components/XAdkProv
|
|
|
16
16
|
export * from "./types";
|
|
17
17
|
export type { ChatHookResult, ChatHookFactory } from "./types/ChatHook";
|
|
18
18
|
export { useXAi, XAiProvider, XAiChatbot, XAiSDK, XAiSender, XAiConversations, useXAiSDK, request, };
|
|
19
|
-
export { XAdkProvider, XAdkChatbot, XAdkSender, FileGallery,
|
|
19
|
+
export { XAdkProvider, XAdkChatbot, XAdkSender, FileGallery, XAdkThoughtChain, useADKChat, };
|
|
20
20
|
export { default as MarkdownRender } from "./components/XAdkChatbot/components/MarkdownRender";
|
|
21
21
|
export { default as FunctionCallRender } from "./components/XAdkChatbot/components/FunctionCallRender";
|
|
22
22
|
export { default as ThinkRender } from "./components/XAdkChatbot/components/ThinkRender";
|
|
23
23
|
export type { MarkdownRenderProps } from "./components/XAdkChatbot/components/MarkdownRender";
|
|
24
24
|
export type { FunctionCallRenderProps } from "./components/XAdkChatbot/components/FunctionCallRender";
|
|
25
|
-
export type {
|
|
25
|
+
export type { XAdkThoughtChainProps, ThoughtChainItemType, } from "./types/XAdkThoughtChain";
|
package/dist/cjs/index.js
CHANGED
|
@@ -37,12 +37,12 @@ __export(src_exports, {
|
|
|
37
37
|
XAdkChatbot: () => import_XAdkChatbot.default,
|
|
38
38
|
XAdkProvider: () => import_XAdkProvider.default,
|
|
39
39
|
XAdkSender: () => import_XAdkSender.default,
|
|
40
|
+
XAdkThoughtChain: () => import_XAdkThoughtChain.default,
|
|
40
41
|
XAiChatbot: () => import_XAiChatbot.default,
|
|
41
42
|
XAiConversations: () => import_XAiConversations.default,
|
|
42
43
|
XAiProvider: () => import_XAiProvider.default,
|
|
43
44
|
XAiSDK: () => import_XAiSDK.default,
|
|
44
45
|
XAiSender: () => import_XAiSender.default,
|
|
45
|
-
XAiThoughtChain: () => import_XAiThoughtChain.default,
|
|
46
46
|
request: () => import_request.default,
|
|
47
47
|
useADKChat: () => import_useADKChat.default,
|
|
48
48
|
useChatActions: () => import_context.useChatActions,
|
|
@@ -59,7 +59,7 @@ var import_XAiSDK = __toESM(require("./components/XAiSDK"));
|
|
|
59
59
|
var import_XAiSender = __toESM(require("./components/XAiSender"));
|
|
60
60
|
var import_FileGallery = __toESM(require("./components/FileGallery"));
|
|
61
61
|
var import_XAiConversations = __toESM(require("./components/XAiConversations"));
|
|
62
|
-
var
|
|
62
|
+
var import_XAdkThoughtChain = __toESM(require("./components/XAdkThoughtChain"));
|
|
63
63
|
var import_useXAiSDK = __toESM(require("./hooks/useXAiSDK"));
|
|
64
64
|
var import_request = __toESM(require("./utils/request"));
|
|
65
65
|
var import_XAdkProvider = __toESM(require("./components/XAdkProvider"));
|
|
@@ -80,12 +80,12 @@ var import_ThinkRender = __toESM(require("./components/XAdkChatbot/components/Th
|
|
|
80
80
|
XAdkChatbot,
|
|
81
81
|
XAdkProvider,
|
|
82
82
|
XAdkSender,
|
|
83
|
+
XAdkThoughtChain,
|
|
83
84
|
XAiChatbot,
|
|
84
85
|
XAiConversations,
|
|
85
86
|
XAiProvider,
|
|
86
87
|
XAiSDK,
|
|
87
88
|
XAiSender,
|
|
88
|
-
XAiThoughtChain,
|
|
89
89
|
request,
|
|
90
90
|
useADKChat,
|
|
91
91
|
useChatActions,
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -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
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,wCAAAA;AAAA,EAAA;AAAA;AAAA;AAAA,wCAAAC;AAAA,EAAA,wCAAAC;AAAA,EAAA,oCAAAC;AAAA,EAAA,oCAAAC;AAAA,EAAA,gDAAAC;AAAA,EAAA,sCAAAC;AAAA,EAAA,4BAAAC;AAAA,EAAA,kCAAAC;AAAA,EAAA,
|
|
6
|
-
"names": ["FileGallery", "XAdkChatbot", "XAdkProvider", "XAdkSender", "XAiChatbot", "XAiConversations", "XAiProvider", "XAiSDK", "XAiSender", "
|
|
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 useADKChat from \"./hooks/useADKChat\";\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 FileGallery,\n XAdkThoughtChain,\n useADKChat,\n};\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 \"./components/XAdkChatbot/components/FunctionCallRender\";\nexport type {\n XAdkThoughtChainProps,\n ThoughtChainItemType,\n} from \"./types/XAdkThoughtChain\";\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,wCAAAA;AAAA,EAAA;AAAA;AAAA;AAAA,wCAAAC;AAAA,EAAA,wCAAAC;AAAA,EAAA,oCAAAC;AAAA,EAAA,gDAAAC;AAAA,EAAA,oCAAAC;AAAA,EAAA,gDAAAC;AAAA,EAAA,sCAAAC;AAAA,EAAA,4BAAAC;AAAA,EAAA,kCAAAC;AAAA,EAAA,8BAAAC;AAAA,EAAA,oCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA,oCAAAC;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,wBAAuB;AAGvB,qBAIO;AAEP,wBAAc,oBAzBd;AAqDA,4BAA0C;AAC1C,gCAA8C;AAC9C,yBAAuC;",
|
|
6
|
+
"names": ["FileGallery", "XAdkChatbot", "XAdkProvider", "XAdkSender", "XAdkThoughtChain", "XAiChatbot", "XAiConversations", "XAiProvider", "XAiSDK", "XAiSender", "request", "useADKChat", "useXAiSDK"]
|
|
7
7
|
}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import React from "react";
|
|
1
|
+
import React, { type ReactNode } from "react";
|
|
2
2
|
import { IMessage } from "./XAdkChatbot";
|
|
3
|
-
export interface
|
|
3
|
+
export interface XAdkThoughtChainProps {
|
|
4
4
|
defaultOpen?: boolean;
|
|
5
5
|
loading?: boolean;
|
|
6
|
-
title?:
|
|
6
|
+
title?: ReactNode;
|
|
7
7
|
items: ThoughtChainItemType[];
|
|
8
8
|
showFnCallDetail?: boolean;
|
|
9
9
|
onConfirm?: (fnCall: any, confirmed: boolean) => void;
|
|
10
|
+
blink?: boolean;
|
|
10
11
|
}
|
|
11
12
|
export interface TimelineItemProps {
|
|
12
13
|
icon: React.ReactNode;
|
|
@@ -14,6 +15,7 @@ export interface TimelineItemProps {
|
|
|
14
15
|
children: React.ReactNode;
|
|
15
16
|
collapsible?: boolean;
|
|
16
17
|
defaultOpen?: boolean;
|
|
18
|
+
blink?: boolean;
|
|
17
19
|
}
|
|
18
20
|
export interface ThoughtChainItemType {
|
|
19
21
|
type: "tool" | "text";
|
|
@@ -12,7 +12,7 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
12
12
|
};
|
|
13
13
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
14
14
|
|
|
15
|
-
// src/types/
|
|
16
|
-
var
|
|
17
|
-
module.exports = __toCommonJS(
|
|
18
|
-
//# sourceMappingURL=
|
|
15
|
+
// src/types/XAdkThoughtChain.ts
|
|
16
|
+
var XAdkThoughtChain_exports = {};
|
|
17
|
+
module.exports = __toCommonJS(XAdkThoughtChain_exports);
|
|
18
|
+
//# sourceMappingURL=XAdkThoughtChain.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/types/XAdkThoughtChain.ts"],
|
|
4
|
+
"sourcesContent": ["import React, { type ReactNode } from \"react\";\nimport { IMessage } from \"./XAdkChatbot\";\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; // 加载中是否开启闪动效果,默认 false\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\"; // 思维节点类型,目前仅支持 tool | text\n key: string; // 思维节点唯一标识符\n content: string; // 思维节点内容\n title?: React.ReactNode; // 思维节点标题\n collapsible?: boolean; // 思维节点是否可折叠\n msg?: IMessage; // 思维节点信息,tool 类型必传\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;AAAA;AAAA;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -6,6 +6,6 @@ export * from "./XAiConversations";
|
|
|
6
6
|
export * from "./XAdkProvider";
|
|
7
7
|
export * from "./XAdkChatbot";
|
|
8
8
|
export * from "./XAdkSender";
|
|
9
|
-
export * from "./
|
|
9
|
+
export * from "./XAdkThoughtChain";
|
|
10
10
|
export * from "./FileGallery";
|
|
11
11
|
export * from "./common";
|
package/dist/cjs/types/index.js
CHANGED
|
@@ -24,7 +24,7 @@ __reExport(types_exports, require("./XAiConversations"), module.exports);
|
|
|
24
24
|
__reExport(types_exports, require("./XAdkProvider"), module.exports);
|
|
25
25
|
__reExport(types_exports, require("./XAdkChatbot"), module.exports);
|
|
26
26
|
__reExport(types_exports, require("./XAdkSender"), module.exports);
|
|
27
|
-
__reExport(types_exports, require("./
|
|
27
|
+
__reExport(types_exports, require("./XAdkThoughtChain"), module.exports);
|
|
28
28
|
__reExport(types_exports, require("./FileGallery"), module.exports);
|
|
29
29
|
__reExport(types_exports, require("./common"), module.exports);
|
|
30
30
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -37,7 +37,7 @@ __reExport(types_exports, require("./common"), module.exports);
|
|
|
37
37
|
...require("./XAdkProvider"),
|
|
38
38
|
...require("./XAdkChatbot"),
|
|
39
39
|
...require("./XAdkSender"),
|
|
40
|
-
...require("./
|
|
40
|
+
...require("./XAdkThoughtChain"),
|
|
41
41
|
...require("./FileGallery"),
|
|
42
42
|
...require("./common")
|
|
43
43
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/types/index.ts"],
|
|
4
|
-
"sourcesContent": ["export * from \"./XAiChatbot\";\nexport * from \"./XAiMessage\";\nexport * from \"./XAiProvider\";\nexport * from \"./XAiSender\";\nexport * from \"./XAiConversations\";\nexport * from \"./XAdkProvider\";\nexport * from \"./XAdkChatbot\";\nexport * from \"./XAdkSender\";\nexport * from \"./
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,0BAAc,yBAAd;AACA,0BAAc,yBADd;AAEA,0BAAc,0BAFd;AAGA,0BAAc,wBAHd;AAIA,0BAAc,+BAJd;AAKA,0BAAc,2BALd;AAMA,0BAAc,0BANd;AAOA,0BAAc,yBAPd;AAQA,0BAAc
|
|
4
|
+
"sourcesContent": ["export * from \"./XAiChatbot\";\nexport * from \"./XAiMessage\";\nexport * from \"./XAiProvider\";\nexport * from \"./XAiSender\";\nexport * from \"./XAiConversations\";\nexport * from \"./XAdkProvider\";\nexport * from \"./XAdkChatbot\";\nexport * from \"./XAdkSender\";\nexport * from \"./XAdkThoughtChain\";\nexport * from \"./FileGallery\";\nexport * from \"./common\";\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,0BAAc,yBAAd;AACA,0BAAc,yBADd;AAEA,0BAAc,0BAFd;AAGA,0BAAc,wBAHd;AAIA,0BAAc,+BAJd;AAKA,0BAAc,2BALd;AAMA,0BAAc,0BANd;AAOA,0BAAc,yBAPd;AAQA,0BAAc,+BARd;AASA,0BAAc,0BATd;AAUA,0BAAc,qBAVd;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -2,7 +2,7 @@ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
|
2
2
|
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
3
3
|
import React, { useState, useEffect } from "react";
|
|
4
4
|
import { Image, Tooltip, Progress } from "antd";
|
|
5
|
-
import { FileOutlined, FilePdfOutlined, FileWordOutlined, FileExcelOutlined, FilePptOutlined, FileImageOutlined, CloseOutlined, AudioOutlined, VideoCameraOutlined } from "@ant-design/icons";
|
|
5
|
+
import { FileOutlined, FilePdfOutlined, FileWordOutlined, FileExcelOutlined, FilePptOutlined, FileImageOutlined, CloseOutlined, AudioOutlined, FileZipOutlined, VideoCameraOutlined, FileMarkdownOutlined } from "@ant-design/icons";
|
|
6
6
|
import { useStyles } from "./styles";
|
|
7
7
|
|
|
8
8
|
// ==================== 工具函数 ====================
|
|
@@ -78,6 +78,22 @@ var isVideoFile = function isVideoFile(file) {
|
|
|
78
78
|
return !!(fileName !== null && fileName !== void 0 && fileName.match(/\.(mp4|mov|webm|mkv|avi)$/i));
|
|
79
79
|
};
|
|
80
80
|
|
|
81
|
+
/**
|
|
82
|
+
* 判断是否是压缩包文件
|
|
83
|
+
*/
|
|
84
|
+
var isZipFile = function isZipFile(file) {
|
|
85
|
+
var fileName = getFileName(file);
|
|
86
|
+
return !!(fileName !== null && fileName !== void 0 && fileName.match(/\.(zip|rar|7z|tar|gz|bz2|xz|tgz)$/i));
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* 判断是否是 Markdown 文件
|
|
91
|
+
*/
|
|
92
|
+
var isMarkdownFile = function isMarkdownFile(file) {
|
|
93
|
+
var fileName = getFileName(file);
|
|
94
|
+
return !!(fileName !== null && fileName !== void 0 && fileName.match(/\.(md|markdown)$/i));
|
|
95
|
+
};
|
|
96
|
+
|
|
81
97
|
/**
|
|
82
98
|
* 获取文件扩展名
|
|
83
99
|
*/
|
|
@@ -140,6 +156,22 @@ var getFileIcon = function getFileIcon(file) {
|
|
|
140
156
|
};
|
|
141
157
|
}
|
|
142
158
|
|
|
159
|
+
// 压缩包
|
|
160
|
+
if (["zip", "rar", "7z", "tar", "gz", "bz2", "xz", "tgz"].includes(ext)) {
|
|
161
|
+
return {
|
|
162
|
+
icon: /*#__PURE__*/_jsx(FileZipOutlined, {}),
|
|
163
|
+
color: "#eb2f96"
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// Markdown
|
|
168
|
+
if (["md", "markdown"].includes(ext)) {
|
|
169
|
+
return {
|
|
170
|
+
icon: /*#__PURE__*/_jsx(FileMarkdownOutlined, {}),
|
|
171
|
+
color: "#13c2c2"
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
|
|
143
175
|
// 图片
|
|
144
176
|
if (isImageFile(file)) {
|
|
145
177
|
return {
|
|
@@ -222,6 +254,8 @@ var FileGallery = function FileGallery(_ref) {
|
|
|
222
254
|
var isImage = isImageFile(file);
|
|
223
255
|
var isAudio = isAudioFile(file);
|
|
224
256
|
var isVideo = isVideoFile(file);
|
|
257
|
+
var isZip = isZipFile(file);
|
|
258
|
+
var isMarkdown = isMarkdownFile(file);
|
|
225
259
|
var fileName = getFileName(file);
|
|
226
260
|
var fileSize = getFileSize(file);
|
|
227
261
|
var fileId = getFileId(file);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useState","useEffect","Image","Tooltip","Progress","FileOutlined","FilePdfOutlined","FileWordOutlined","FileExcelOutlined","FilePptOutlined","FileImageOutlined","CloseOutlined","AudioOutlined","VideoCameraOutlined","useStyles","jsx","_jsx","jsxs","_jsxs","getFileName","file","displayName","name","getFileSize","size","getMimeType","mimeType","type","getFileUrl","_file$response","_file$response2","fileUri","response","fileUrl","tempUrl","getFileId","id","uid","isImageFile","startsWith","fileName","match","url","isAudioFile","isVideoFile","getFileExtension","filename","ext","split","pop","toLowerCase","getFileIcon","icon","color","includes","formatFileSize","bytes","toFixed","styles","FileGallery","_ref","_ref$align","align","_ref$removable","removable","_ref$onRemove","onRemove","className","style","onClick","_useState","_useState2","_slicedToArray","objectUrl","setObjectUrl","URL","createObjectURL","revokeObjectURL","isImage","isAudio","isVideo","fileSize","fileId","concat","fileCard","_objectSpread","cursor","undefined","children","imageThumbnail","src","alt","fallback","preview","status","imageOverlay","percent","progress","strokeColor","fileInfo","title","length","substring","Number","fileRemoveBtn","disabled","fileIcon","controls","mediaWrapper","width","height","_getFileIcon","isExternalUrl","href","target","rel","fileLink","showInfo","errorMessage","fontSize","marginTop"],"sources":["../../../../src/components/FileGallery/index.tsx"],"sourcesContent":["import React, { useState, useEffect } from \"react\";\nimport { Image, Tooltip, Progress } from \"antd\";\nimport {\n FileOutlined,\n FilePdfOutlined,\n FileWordOutlined,\n FileExcelOutlined,\n FilePptOutlined,\n FileImageOutlined,\n CloseOutlined,\n AudioOutlined,\n VideoCameraOutlined,\n} from \"@ant-design/icons\";\nimport { FileItem, FileGalleryProps, FileItemComponentProps } from \"@/types\";\nimport { useStyles } from \"./styles\";\n\n// ==================== 工具函数 ====================\n\n/**\n * 获取文件名\n */\nconst getFileName = (file: FileItem): string => {\n return file.displayName || file.name || \"\";\n};\n\n/**\n * 获取文件大小\n */\nconst getFileSize = (file: FileItem): number => {\n return file.size || 0;\n};\n\n/**\n * 获取文件 MIME 类型\n */\nconst getMimeType = (file: FileItem): string => {\n return file.mimeType || file.type || \"\";\n};\n\n/**\n * 获取文件 URL\n */\nconst getFileUrl = (file: FileItem): string => {\n return (\n file.fileUri ||\n file.response?.fileUrl ||\n file.response?.tempUrl ||\n file.tempUrl ||\n \"\"\n );\n};\n\n/**\n * 获取文件唯一标识\n */\nconst getFileId = (file: FileItem): string => {\n return file.id || file.uid || \"\";\n};\n\n/**\n * 判断是否是图片文件\n */\nconst isImageFile = (file: FileItem): boolean => {\n const mimeType = getMimeType(file);\n if (mimeType && mimeType.startsWith(\"image/\")) return true;\n\n const fileName = getFileName(file);\n if (fileName && fileName.match(/\\.(jpg|jpeg|png|gif|webp|bmp|svg)$/i))\n return true;\n\n const url = getFileUrl(file);\n if (url && url.match(/\\.(jpg|jpeg|png|gif|webp|bmp|svg)(\\?.*)?$/i))\n return true;\n\n return false;\n};\n\n/**\n * 判断是否是音频文件\n */\nconst isAudioFile = (file: FileItem): boolean => {\n const mimeType = getMimeType(file);\n if (mimeType && mimeType.startsWith(\"audio/\")) return true;\n\n const fileName = getFileName(file);\n return !!fileName?.match(/\\.(mp3|wav|m4a|aac|ogg|flac)$/i);\n};\n\n/**\n * 判断是否是视频文件\n */\nconst isVideoFile = (file: FileItem): boolean => {\n const mimeType = getMimeType(file);\n if (mimeType && mimeType.startsWith(\"video/\")) return true;\n\n const fileName = getFileName(file);\n return !!fileName?.match(/\\.(mp4|mov|webm|mkv|avi)$/i);\n};\n\n/**\n * 获取文件扩展名\n */\nconst getFileExtension = (filename: string): string => {\n const ext = filename.split(\".\").pop();\n return ext ? ext.toLowerCase() : \"\";\n};\n\n/**\n * 获取文件图标和颜色\n */\nconst getFileIcon = (\n file: FileItem,\n): { icon: React.ReactNode; color: string } => {\n const ext = getFileExtension(getFileName(file));\n\n // PDF\n if (ext === \"pdf\") {\n return { icon: <FilePdfOutlined />, color: \"#ff4d4f\" };\n }\n\n // Word\n if ([\"doc\", \"docx\"].includes(ext)) {\n return { icon: <FileWordOutlined />, color: \"#1677ff\" };\n }\n\n // Excel\n if ([\"xls\", \"xlsx\", \"csv\"].includes(ext)) {\n return { icon: <FileExcelOutlined />, color: \"#22b35e\" };\n }\n\n // PPT\n if ([\"ppt\", \"pptx\"].includes(ext)) {\n return { icon: <FilePptOutlined />, color: \"#ff6e31\" };\n }\n\n // Audio\n if ([\"mp3\", \"wav\", \"m4a\", \"aac\", \"ogg\", \"flac\"].includes(ext)) {\n return { icon: <AudioOutlined />, color: \"#722ed1\" };\n }\n\n // Video\n if ([\"mp4\", \"mov\", \"webm\", \"mkv\", \"avi\"].includes(ext)) {\n return { icon: <VideoCameraOutlined />, color: \"#fa8c16\" };\n }\n\n // 图片\n if (isImageFile(file)) {\n return { icon: <FileImageOutlined />, color: \"#8c8c8c\" };\n }\n\n // 默认\n return { icon: <FileOutlined />, color: \"#8c8c8c\" };\n};\n\n/**\n * 格式化文件大小\n */\nconst formatFileSize = (bytes: number): string => {\n if (bytes < 1024) return bytes + \" B\";\n if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + \" KB\";\n return (bytes / (1024 * 1024)).toFixed(1) + \" MB\";\n};\n\nconst styles = useStyles();\n\n/**\n * FileGallery - 单文件展示组件\n *\n * 功能特性:\n * - 📁 支持多种文件类型展示 (图片、音频、视频、文档等)\n * - 🖼️ 图片支持预览和缩略图\n * - 🎵 音频文件支持内联播放\n * - 🎬 视频文件支持内联播放\n * - 📊 显示文件大小、类型图标\n * - 🗑️ 支持删除操作\n * - 📤 支持上传进度显示\n * - 🎨 支持卡片内部布局控制(align:图标和信息的排列方式)\n *\n * @example\n * // XAdkSender 场景 - 可删除的本地文件\n * {files.map(file => (\n * <FileGallery\n * key={file.id}\n * file={file}\n * removable\n * onRemove={handleRemove}\n * />\n * ))}\n *\n * @example\n * // XadkChatbot 场景 - 只读的远程文件\n * {files.map(file => (\n * <FileGallery key={file.id} file={file} />\n * ))}\n */\nconst FileGallery: React.FC<FileGalleryProps> = ({\n file,\n align = \"left\",\n removable = false,\n onRemove = () => {},\n className,\n style,\n onClick,\n}) => {\n const [objectUrl, setObjectUrl] = useState(\"\");\n\n useEffect(() => {\n if (!file?.file) return;\n\n const url = URL.createObjectURL(file.file);\n setObjectUrl(url);\n\n return () => URL.revokeObjectURL(url);\n }, [file?.file]);\n\n if (!file) return null;\n\n const isImage = isImageFile(file);\n const isAudio = isAudioFile(file);\n const isVideo = isVideoFile(file);\n const fileName = getFileName(file);\n const fileSize = getFileSize(file);\n const fileId = getFileId(file);\n const url = getFileUrl(file) || objectUrl;\n\n // 图片文件\n if (isImage) {\n return (\n <div\n className={`${styles.fileCard} ${align === \"right\" ? \"align-right\" : \"\"} ${className || \"\"}`}\n style={{ ...style, cursor: onClick ? \"pointer\" : undefined }}\n onClick={() => onClick?.(file)}\n >\n {/* 图片缩略图 */}\n <div className={styles.imageThumbnail}>\n <Image\n src={url}\n alt={fileName}\n fallback=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mN8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg==\"\n preview={onClick ? false : { src: url }}\n />\n\n {/* 上传进度遮罩 */}\n {file.status === \"uploading\" && (\n <div className={styles.imageOverlay}>\n <Progress\n type=\"circle\"\n percent={file.progress}\n size={30}\n strokeColor=\"#1677ff\"\n />\n </div>\n )}\n </div>\n\n {/* 文件信息 */}\n <div className={styles.fileInfo}>\n <Tooltip title={fileName}>\n <div className={styles.fileName}>\n {fileName.length > 15\n ? `${fileName.substring(0, 15)}...`\n : fileName}\n </div>\n </Tooltip>\n {Number(file?.size) > 0 && (\n <div className={styles.fileSize}>{formatFileSize(fileSize)}</div>\n )}\n </div>\n\n {/* 删除按钮 */}\n {removable && (\n <button\n className={styles.fileRemoveBtn}\n onClick={() => onRemove(fileId)}\n disabled={file.status === \"uploading\"}\n aria-label=\"删除文件\"\n >\n <CloseOutlined />\n </button>\n )}\n </div>\n );\n }\n\n // 音频文件\n if (isAudio) {\n return (\n <div\n className={`${styles.fileCard} ${align === \"right\" ? \"align-right\" : \"\"} ${className || \"\"}`}\n style={style}\n >\n <div className={styles.fileIcon} style={{ color: \"#722ed1\" }}>\n <AudioOutlined />\n </div>\n\n <div className={styles.fileInfo}>\n <Tooltip title={fileName}>\n <div className={styles.fileName}>{fileName}</div>\n </Tooltip>\n\n <audio\n src={url}\n controls\n className={styles.mediaWrapper}\n style={{ width: \"100%\", height: 28 }}\n />\n </div>\n\n {removable && (\n <button\n className={styles.fileRemoveBtn}\n onClick={() => onRemove(fileId)}\n disabled={file.status === \"uploading\"}\n aria-label=\"删除文件\"\n >\n <CloseOutlined />\n </button>\n )}\n </div>\n );\n }\n\n // 视频文件\n if (isVideo) {\n return (\n <div\n className={`${styles.fileCard} ${align === \"right\" ? \"align-right\" : \"\"} ${className || \"\"}`}\n style={style}\n >\n <div className={styles.fileIcon} style={{ color: \"#fa8c16\" }}>\n <VideoCameraOutlined />\n </div>\n\n <div className={styles.fileInfo}>\n <Tooltip title={fileName}>\n <div className={styles.fileName}>{fileName}</div>\n </Tooltip>\n\n <video\n src={url}\n controls\n className={styles.mediaWrapper}\n style={{ width: \"100%\", height: 40 }}\n />\n </div>\n\n {removable && (\n <button\n className={styles.fileRemoveBtn}\n onClick={() => onRemove(fileId)}\n disabled={file.status === \"uploading\"}\n aria-label=\"删除文件\"\n >\n <CloseOutlined />\n </button>\n )}\n </div>\n );\n }\n\n // 其他文件\n const { icon, color } = getFileIcon(file);\n const isExternalUrl = url && url.startsWith(\"http\");\n\n return (\n <div\n className={`${styles.fileCard} ${align === \"right\" ? \"align-right\" : \"\"} ${className || \"\"}`}\n style={{ ...style, cursor: onClick ? \"pointer\" : undefined }}\n onClick={() => onClick?.(file)}\n >\n <div className={styles.fileIcon} style={{ color }}>\n {icon}\n </div>\n\n <div className={styles.fileInfo}>\n {isExternalUrl && !onClick ? (\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={styles.fileLink}\n >\n <Tooltip title={fileName}>\n <div className={styles.fileName}>\n {fileName.length > 15\n ? `${fileName.substring(0, 15)}...`\n : fileName}\n </div>\n </Tooltip>\n </a>\n ) : (\n <Tooltip title={fileName}>\n <div className={styles.fileName}>\n {fileName.length > 15\n ? `${fileName.substring(0, 15)}...`\n : fileName}\n </div>\n </Tooltip>\n )}\n\n {file.status === \"uploading\" ? (\n <Progress\n percent={file.progress}\n size=\"small\"\n showInfo={false}\n strokeColor=\"#1677ff\"\n className={styles.progress}\n />\n ) : (\n fileSize > 0 && (\n <div className={styles.fileSize}>{formatFileSize(fileSize)}</div>\n )\n )}\n\n {file.status === \"error\" && file.errorMessage && (\n <div\n style={{\n fontSize: \"11px\",\n color: \"#ff4d4f\",\n marginTop: \"2px\",\n }}\n >\n {file.errorMessage}\n </div>\n )}\n </div>\n\n {removable && (\n <button\n className={styles.fileRemoveBtn}\n onClick={() => onRemove(fileId)}\n disabled={file.status === \"uploading\"}\n aria-label=\"删除文件\"\n >\n <CloseOutlined />\n </button>\n )}\n </div>\n );\n};\n\nexport default FileGallery;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["React","useState","useEffect","Image","Tooltip","Progress","FileOutlined","FilePdfOutlined","FileWordOutlined","FileExcelOutlined","FilePptOutlined","FileImageOutlined","CloseOutlined","AudioOutlined","FileZipOutlined","VideoCameraOutlined","FileMarkdownOutlined","useStyles","jsx","_jsx","jsxs","_jsxs","getFileName","file","displayName","name","getFileSize","size","getMimeType","mimeType","type","getFileUrl","_file$response","_file$response2","fileUri","response","fileUrl","tempUrl","getFileId","id","uid","isImageFile","startsWith","fileName","match","url","isAudioFile","isVideoFile","isZipFile","isMarkdownFile","getFileExtension","filename","ext","split","pop","toLowerCase","getFileIcon","icon","color","includes","formatFileSize","bytes","toFixed","styles","FileGallery","_ref","_ref$align","align","_ref$removable","removable","_ref$onRemove","onRemove","className","style","onClick","_useState","_useState2","_slicedToArray","objectUrl","setObjectUrl","URL","createObjectURL","revokeObjectURL","isImage","isAudio","isVideo","isZip","isMarkdown","fileSize","fileId","concat","fileCard","_objectSpread","cursor","undefined","children","imageThumbnail","src","alt","fallback","preview","status","imageOverlay","percent","progress","strokeColor","fileInfo","title","length","substring","Number","fileRemoveBtn","disabled","fileIcon","controls","mediaWrapper","width","height","_getFileIcon","isExternalUrl","href","target","rel","fileLink","showInfo","errorMessage","fontSize","marginTop"],"sources":["../../../../src/components/FileGallery/index.tsx"],"sourcesContent":["import React, { useState, useEffect } from \"react\";\nimport { Image, Tooltip, Progress } from \"antd\";\nimport {\n FileOutlined,\n FilePdfOutlined,\n FileWordOutlined,\n FileExcelOutlined,\n FilePptOutlined,\n FileImageOutlined,\n CloseOutlined,\n AudioOutlined,\n FileZipOutlined,\n VideoCameraOutlined,\n FileMarkdownOutlined,\n} from \"@ant-design/icons\";\nimport { FileItem, FileGalleryProps } from \"@/types\";\nimport { useStyles } from \"./styles\";\n\n// ==================== 工具函数 ====================\n\n/**\n * 获取文件名\n */\nconst getFileName = (file: FileItem): string => {\n return file.displayName || file.name || \"\";\n};\n\n/**\n * 获取文件大小\n */\nconst getFileSize = (file: FileItem): number => {\n return file.size || 0;\n};\n\n/**\n * 获取文件 MIME 类型\n */\nconst getMimeType = (file: FileItem): string => {\n return file.mimeType || file.type || \"\";\n};\n\n/**\n * 获取文件 URL\n */\nconst getFileUrl = (file: FileItem): string => {\n return (\n file.fileUri ||\n file.response?.fileUrl ||\n file.response?.tempUrl ||\n file.tempUrl ||\n \"\"\n );\n};\n\n/**\n * 获取文件唯一标识\n */\nconst getFileId = (file: FileItem): string => {\n return file.id || file.uid || \"\";\n};\n\n/**\n * 判断是否是图片文件\n */\nconst isImageFile = (file: FileItem): boolean => {\n const mimeType = getMimeType(file);\n if (mimeType && mimeType.startsWith(\"image/\")) return true;\n\n const fileName = getFileName(file);\n if (fileName && fileName.match(/\\.(jpg|jpeg|png|gif|webp|bmp|svg)$/i))\n return true;\n\n const url = getFileUrl(file);\n if (url && url.match(/\\.(jpg|jpeg|png|gif|webp|bmp|svg)(\\?.*)?$/i))\n return true;\n\n return false;\n};\n\n/**\n * 判断是否是音频文件\n */\nconst isAudioFile = (file: FileItem): boolean => {\n const mimeType = getMimeType(file);\n if (mimeType && mimeType.startsWith(\"audio/\")) return true;\n\n const fileName = getFileName(file);\n return !!fileName?.match(/\\.(mp3|wav|m4a|aac|ogg|flac)$/i);\n};\n\n/**\n * 判断是否是视频文件\n */\nconst isVideoFile = (file: FileItem): boolean => {\n const mimeType = getMimeType(file);\n if (mimeType && mimeType.startsWith(\"video/\")) return true;\n\n const fileName = getFileName(file);\n return !!fileName?.match(/\\.(mp4|mov|webm|mkv|avi)$/i);\n};\n\n/**\n * 判断是否是压缩包文件\n */\nconst isZipFile = (file: FileItem): boolean => {\n const fileName = getFileName(file);\n return !!fileName?.match(/\\.(zip|rar|7z|tar|gz|bz2|xz|tgz)$/i);\n};\n\n/**\n * 判断是否是 Markdown 文件\n */\nconst isMarkdownFile = (file: FileItem): boolean => {\n const fileName = getFileName(file);\n return !!fileName?.match(/\\.(md|markdown)$/i);\n};\n\n/**\n * 获取文件扩展名\n */\nconst getFileExtension = (filename: string): string => {\n const ext = filename.split(\".\").pop();\n return ext ? ext.toLowerCase() : \"\";\n};\n\n/**\n * 获取文件图标和颜色\n */\nconst getFileIcon = (\n file: FileItem,\n): { icon: React.ReactNode; color: string } => {\n const ext = getFileExtension(getFileName(file));\n\n // PDF\n if (ext === \"pdf\") {\n return { icon: <FilePdfOutlined />, color: \"#ff4d4f\" };\n }\n\n // Word\n if ([\"doc\", \"docx\"].includes(ext)) {\n return { icon: <FileWordOutlined />, color: \"#1677ff\" };\n }\n\n // Excel\n if ([\"xls\", \"xlsx\", \"csv\"].includes(ext)) {\n return { icon: <FileExcelOutlined />, color: \"#22b35e\" };\n }\n\n // PPT\n if ([\"ppt\", \"pptx\"].includes(ext)) {\n return { icon: <FilePptOutlined />, color: \"#ff6e31\" };\n }\n\n // Audio\n if ([\"mp3\", \"wav\", \"m4a\", \"aac\", \"ogg\", \"flac\"].includes(ext)) {\n return { icon: <AudioOutlined />, color: \"#722ed1\" };\n }\n\n // Video\n if ([\"mp4\", \"mov\", \"webm\", \"mkv\", \"avi\"].includes(ext)) {\n return { icon: <VideoCameraOutlined />, color: \"#fa8c16\" };\n }\n\n // 压缩包\n if ([\"zip\", \"rar\", \"7z\", \"tar\", \"gz\", \"bz2\", \"xz\", \"tgz\"].includes(ext)) {\n return { icon: <FileZipOutlined />, color: \"#eb2f96\" };\n }\n\n // Markdown\n if ([\"md\", \"markdown\"].includes(ext)) {\n return { icon: <FileMarkdownOutlined />, color: \"#13c2c2\" };\n }\n\n // 图片\n if (isImageFile(file)) {\n return { icon: <FileImageOutlined />, color: \"#8c8c8c\" };\n }\n\n // 默认\n return { icon: <FileOutlined />, color: \"#8c8c8c\" };\n};\n\n/**\n * 格式化文件大小\n */\nconst formatFileSize = (bytes: number): string => {\n if (bytes < 1024) return bytes + \" B\";\n if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + \" KB\";\n return (bytes / (1024 * 1024)).toFixed(1) + \" MB\";\n};\n\nconst styles = useStyles();\n\n/**\n * FileGallery - 单文件展示组件\n *\n * 功能特性:\n * - 📁 支持多种文件类型展示 (图片、音频、视频、文档等)\n * - 🖼️ 图片支持预览和缩略图\n * - 🎵 音频文件支持内联播放\n * - 🎬 视频文件支持内联播放\n * - 📊 显示文件大小、类型图标\n * - 🗑️ 支持删除操作\n * - 📤 支持上传进度显示\n * - 🎨 支持卡片内部布局控制(align:图标和信息的排列方式)\n *\n * @example\n * // XAdkSender 场景 - 可删除的本地文件\n * {files.map(file => (\n * <FileGallery\n * key={file.id}\n * file={file}\n * removable\n * onRemove={handleRemove}\n * />\n * ))}\n *\n * @example\n * // XadkChatbot 场景 - 只读的远程文件\n * {files.map(file => (\n * <FileGallery key={file.id} file={file} />\n * ))}\n */\nconst FileGallery: React.FC<FileGalleryProps> = ({\n file,\n align = \"left\",\n removable = false,\n onRemove = () => {},\n className,\n style,\n onClick,\n}) => {\n const [objectUrl, setObjectUrl] = useState(\"\");\n\n useEffect(() => {\n if (!file?.file) return;\n\n const url = URL.createObjectURL(file.file);\n setObjectUrl(url);\n\n return () => URL.revokeObjectURL(url);\n }, [file?.file]);\n\n if (!file) return null;\n\n const isImage = isImageFile(file);\n const isAudio = isAudioFile(file);\n const isVideo = isVideoFile(file);\n const isZip = isZipFile(file);\n const isMarkdown = isMarkdownFile(file);\n const fileName = getFileName(file);\n const fileSize = getFileSize(file);\n const fileId = getFileId(file);\n const url = getFileUrl(file) || objectUrl;\n\n // 图片文件\n if (isImage) {\n return (\n <div\n className={`${styles.fileCard} ${align === \"right\" ? \"align-right\" : \"\"} ${className || \"\"}`}\n style={{ ...style, cursor: onClick ? \"pointer\" : undefined }}\n onClick={() => onClick?.(file)}\n >\n {/* 图片缩略图 */}\n <div className={styles.imageThumbnail}>\n <Image\n src={url}\n alt={fileName}\n fallback=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mN8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg==\"\n preview={onClick ? false : { src: url }}\n />\n\n {/* 上传进度遮罩 */}\n {file.status === \"uploading\" && (\n <div className={styles.imageOverlay}>\n <Progress\n type=\"circle\"\n percent={file.progress}\n size={30}\n strokeColor=\"#1677ff\"\n />\n </div>\n )}\n </div>\n\n {/* 文件信息 */}\n <div className={styles.fileInfo}>\n <Tooltip title={fileName}>\n <div className={styles.fileName}>\n {fileName.length > 15\n ? `${fileName.substring(0, 15)}...`\n : fileName}\n </div>\n </Tooltip>\n {Number(file?.size) > 0 && (\n <div className={styles.fileSize}>{formatFileSize(fileSize)}</div>\n )}\n </div>\n\n {/* 删除按钮 */}\n {removable && (\n <button\n className={styles.fileRemoveBtn}\n onClick={() => onRemove(fileId)}\n disabled={file.status === \"uploading\"}\n aria-label=\"删除文件\"\n >\n <CloseOutlined />\n </button>\n )}\n </div>\n );\n }\n\n // 音频文件\n if (isAudio) {\n return (\n <div\n className={`${styles.fileCard} ${align === \"right\" ? \"align-right\" : \"\"} ${className || \"\"}`}\n style={style}\n >\n <div className={styles.fileIcon} style={{ color: \"#722ed1\" }}>\n <AudioOutlined />\n </div>\n\n <div className={styles.fileInfo}>\n <Tooltip title={fileName}>\n <div className={styles.fileName}>{fileName}</div>\n </Tooltip>\n\n <audio\n src={url}\n controls\n className={styles.mediaWrapper}\n style={{ width: \"100%\", height: 28 }}\n />\n </div>\n\n {removable && (\n <button\n className={styles.fileRemoveBtn}\n onClick={() => onRemove(fileId)}\n disabled={file.status === \"uploading\"}\n aria-label=\"删除文件\"\n >\n <CloseOutlined />\n </button>\n )}\n </div>\n );\n }\n\n // 视频文件\n if (isVideo) {\n return (\n <div\n className={`${styles.fileCard} ${align === \"right\" ? \"align-right\" : \"\"} ${className || \"\"}`}\n style={style}\n >\n <div className={styles.fileIcon} style={{ color: \"#fa8c16\" }}>\n <VideoCameraOutlined />\n </div>\n\n <div className={styles.fileInfo}>\n <Tooltip title={fileName}>\n <div className={styles.fileName}>{fileName}</div>\n </Tooltip>\n\n <video\n src={url}\n controls\n className={styles.mediaWrapper}\n style={{ width: \"100%\", height: 40 }}\n />\n </div>\n\n {removable && (\n <button\n className={styles.fileRemoveBtn}\n onClick={() => onRemove(fileId)}\n disabled={file.status === \"uploading\"}\n aria-label=\"删除文件\"\n >\n <CloseOutlined />\n </button>\n )}\n </div>\n );\n }\n\n // 其他文件\n const { icon, color } = getFileIcon(file);\n const isExternalUrl = url && url.startsWith(\"http\");\n\n return (\n <div\n className={`${styles.fileCard} ${align === \"right\" ? \"align-right\" : \"\"} ${className || \"\"}`}\n style={{ ...style, cursor: onClick ? \"pointer\" : undefined }}\n onClick={() => onClick?.(file)}\n >\n <div className={styles.fileIcon} style={{ color }}>\n {icon}\n </div>\n\n <div className={styles.fileInfo}>\n {isExternalUrl && !onClick ? (\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={styles.fileLink}\n >\n <Tooltip title={fileName}>\n <div className={styles.fileName}>\n {fileName.length > 15\n ? `${fileName.substring(0, 15)}...`\n : fileName}\n </div>\n </Tooltip>\n </a>\n ) : (\n <Tooltip title={fileName}>\n <div className={styles.fileName}>\n {fileName.length > 15\n ? `${fileName.substring(0, 15)}...`\n : fileName}\n </div>\n </Tooltip>\n )}\n\n {file.status === \"uploading\" ? (\n <Progress\n percent={file.progress}\n size=\"small\"\n showInfo={false}\n strokeColor=\"#1677ff\"\n className={styles.progress}\n />\n ) : (\n fileSize > 0 && (\n <div className={styles.fileSize}>{formatFileSize(fileSize)}</div>\n )\n )}\n\n {file.status === \"error\" && file.errorMessage && (\n <div\n style={{\n fontSize: \"11px\",\n color: \"#ff4d4f\",\n marginTop: \"2px\",\n }}\n >\n {file.errorMessage}\n </div>\n )}\n </div>\n\n {removable && (\n <button\n className={styles.fileRemoveBtn}\n onClick={() => onRemove(fileId)}\n disabled={file.status === \"uploading\"}\n aria-label=\"删除文件\"\n >\n <CloseOutlined />\n </button>\n )}\n </div>\n );\n};\n\nexport default FileGallery;\n"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
import type { ThinkProps } from '@ant-design/x';
|
|
1
2
|
import React from 'react';
|
|
2
3
|
import type { IMessage } from "../../../../types";
|
|
3
|
-
export interface ThinkRenderProps {
|
|
4
|
+
export interface ThinkRenderProps extends Omit<ThinkProps, 'children'> {
|
|
4
5
|
msg: IMessage;
|
|
5
|
-
loading?: boolean;
|
|
6
6
|
}
|
|
7
7
|
declare const ThinkRender: React.FC<ThinkRenderProps>;
|
|
8
8
|
export default ThinkRender;
|
|
@@ -1,32 +1,42 @@
|
|
|
1
|
+
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
1
2
|
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
3
|
+
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
|
|
4
|
+
var _excluded = ["msg", "loading", "title", "expanded", "onExpand", "defaultExpanded"];
|
|
2
5
|
import { Think } from '@ant-design/x';
|
|
3
6
|
import React, { useEffect, useState } from 'react';
|
|
4
7
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
5
8
|
var ThinkRender = function ThinkRender(_ref) {
|
|
6
9
|
var msg = _ref.msg,
|
|
7
|
-
loading = _ref.loading
|
|
8
|
-
|
|
10
|
+
loading = _ref.loading,
|
|
11
|
+
title = _ref.title,
|
|
12
|
+
expanded = _ref.expanded,
|
|
13
|
+
onExpand = _ref.onExpand,
|
|
14
|
+
defaultExpanded = _ref.defaultExpanded,
|
|
15
|
+
rest = _objectWithoutProperties(_ref, _excluded);
|
|
16
|
+
var isControlled = expanded !== undefined;
|
|
17
|
+
var _useState = useState(defaultExpanded !== null && defaultExpanded !== void 0 ? defaultExpanded : false),
|
|
9
18
|
_useState2 = _slicedToArray(_useState, 2),
|
|
10
|
-
|
|
11
|
-
|
|
19
|
+
innerExpand = _useState2[0],
|
|
20
|
+
setInnerExpand = _useState2[1];
|
|
12
21
|
useEffect(function () {
|
|
13
|
-
if (
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
22
|
+
if (isControlled) return;
|
|
23
|
+
setInnerExpand(!!loading);
|
|
24
|
+
}, [loading, isControlled]);
|
|
25
|
+
var expandValue = isControlled ? expanded : innerExpand;
|
|
26
|
+
var handleExpand = function handleExpand(val) {
|
|
27
|
+
if (!isControlled) {
|
|
28
|
+
setInnerExpand(val);
|
|
17
29
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
30
|
+
onExpand === null || onExpand === void 0 || onExpand(val);
|
|
31
|
+
};
|
|
32
|
+
return /*#__PURE__*/_jsx(Think, _objectSpread(_objectSpread({
|
|
33
|
+
title: title !== null && title !== void 0 ? title : loading ? '思考中...' : '深度思考',
|
|
21
34
|
loading: loading,
|
|
22
|
-
expanded:
|
|
23
|
-
onExpand:
|
|
24
|
-
|
|
25
|
-
return !v;
|
|
26
|
-
});
|
|
27
|
-
},
|
|
35
|
+
expanded: expandValue,
|
|
36
|
+
onExpand: handleExpand
|
|
37
|
+
}, rest), {}, {
|
|
28
38
|
children: msg.text
|
|
29
|
-
});
|
|
39
|
+
}));
|
|
30
40
|
};
|
|
31
41
|
export default ThinkRender;
|
|
32
42
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Think","React","useEffect","useState","jsx","_jsx","ThinkRender","_ref","msg","loading","_useState","_useState2","_slicedToArray","
|
|
1
|
+
{"version":3,"names":["Think","React","useEffect","useState","jsx","_jsx","ThinkRender","_ref","msg","loading","title","expanded","onExpand","defaultExpanded","rest","_objectWithoutProperties","_excluded","isControlled","undefined","_useState","_useState2","_slicedToArray","innerExpand","setInnerExpand","expandValue","handleExpand","val","_objectSpread","children","text"],"sources":["../../../../../../src/components/XAdkChatbot/components/ThinkRender/index.tsx"],"sourcesContent":["import { Think } from '@ant-design/x';\nimport type { ThinkProps } from '@ant-design/x';\nimport React, { useEffect, useState } from 'react';\nimport type { IMessage } from '@/types';\n\nexport interface ThinkRenderProps extends Omit<ThinkProps, 'children'> {\n msg: IMessage;\n}\n\nconst ThinkRender: React.FC<ThinkRenderProps> = ({\n msg,\n loading,\n title,\n expanded,\n onExpand,\n defaultExpanded,\n ...rest\n}) => {\n const isControlled = expanded !== undefined;\n const [innerExpand, setInnerExpand] = useState(defaultExpanded ?? false);\n\n useEffect(() => {\n if (isControlled) return;\n setInnerExpand(!!loading);\n }, [loading, isControlled]);\n\n const expandValue = isControlled ? expanded : innerExpand;\n\n const handleExpand = (val: boolean) => {\n if (!isControlled) {\n setInnerExpand(val);\n }\n onExpand?.(val);\n };\n\n return (\n <Think\n title={title ?? (loading ? '思考中...' : '深度思考')}\n loading={loading}\n expanded={expandValue}\n onExpand={handleExpand}\n {...rest}\n >\n {msg.text}\n </Think>\n );\n};\n\nexport default ThinkRender;\n"],"mappings":";;;;AAAA,SAASA,KAAK,QAAQ,eAAe;AAErC,OAAOC,KAAK,IAAIC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAOnD,IAAMC,WAAuC,GAAG,SAA1CA,WAAuCA,CAAAC,IAAA,EAQvC;EAAA,IAPJC,GAAG,GAAAD,IAAA,CAAHC,GAAG;IACHC,OAAO,GAAAF,IAAA,CAAPE,OAAO;IACPC,KAAK,GAAAH,IAAA,CAALG,KAAK;IACLC,QAAQ,GAAAJ,IAAA,CAARI,QAAQ;IACRC,QAAQ,GAAAL,IAAA,CAARK,QAAQ;IACRC,eAAe,GAAAN,IAAA,CAAfM,eAAe;IACZC,IAAI,GAAAC,wBAAA,CAAAR,IAAA,EAAAS,SAAA;EAEP,IAAMC,YAAY,GAAGN,QAAQ,KAAKO,SAAS;EAC3C,IAAAC,SAAA,GAAsChB,QAAQ,CAACU,eAAe,aAAfA,eAAe,cAAfA,eAAe,GAAI,KAAK,CAAC;IAAAO,UAAA,GAAAC,cAAA,CAAAF,SAAA;IAAjEG,WAAW,GAAAF,UAAA;IAAEG,cAAc,GAAAH,UAAA;EAElClB,SAAS,CAAC,YAAM;IACd,IAAIe,YAAY,EAAE;IAClBM,cAAc,CAAC,CAAC,CAACd,OAAO,CAAC;EAC3B,CAAC,EAAE,CAACA,OAAO,EAAEQ,YAAY,CAAC,CAAC;EAE3B,IAAMO,WAAW,GAAGP,YAAY,GAAGN,QAAQ,GAAGW,WAAW;EAEzD,IAAMG,YAAY,GAAG,SAAfA,YAAYA,CAAIC,GAAY,EAAK;IACrC,IAAI,CAACT,YAAY,EAAE;MACjBM,cAAc,CAACG,GAAG,CAAC;IACrB;IACAd,QAAQ,aAARA,QAAQ,eAARA,QAAQ,CAAGc,GAAG,CAAC;EACjB,CAAC;EAED,oBACErB,IAAA,CAACL,KAAK,EAAA2B,aAAA,CAAAA,aAAA;IACJjB,KAAK,EAAEA,KAAK,aAALA,KAAK,cAALA,KAAK,GAAKD,OAAO,GAAG,QAAQ,GAAG,MAAQ;IAC9CA,OAAO,EAAEA,OAAQ;IACjBE,QAAQ,EAAEa,WAAY;IACtBZ,QAAQ,EAAEa;EAAa,GACnBX,IAAI;IAAAc,QAAA,EAEPpB,GAAG,CAACqB;EAAI,EACJ,CAAC;AAEZ,CAAC;AAED,eAAevB,WAAW"}
|