@hkyhy/marsun-components-core 0.1.12 → 0.1.17

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 (160) hide show
  1. package/README.md +31 -6
  2. package/dist/components/AgentHub/Chat/Action/CreateButton.js +8 -0
  3. package/dist/components/AgentHub/Chat/Action/CreateButton.js.map +1 -0
  4. package/dist/components/AgentHub/Chat/Action/ManageActionButtons.js +20 -0
  5. package/dist/components/AgentHub/Chat/Action/ManageActionButtons.js.map +1 -0
  6. package/dist/components/AgentHub/Chat/Action/SessionActionButtons.js +24 -0
  7. package/dist/components/AgentHub/Chat/Action/SessionActionButtons.js.map +1 -0
  8. package/dist/components/AgentHub/Chat/Action/handlers.d.ts +0 -5
  9. package/dist/components/AgentHub/Chat/Detail/ChatInput/index.js +65 -0
  10. package/dist/components/AgentHub/Chat/Detail/ChatInput/index.js.map +1 -0
  11. package/dist/components/AgentHub/Chat/Detail/ChatInput/style.module.scss.js +12 -0
  12. package/dist/components/AgentHub/Chat/Detail/ChatInput/style.module.scss.js.map +1 -0
  13. package/dist/components/AgentHub/Chat/Detail/ChatPanel/index.d.ts +31 -0
  14. package/dist/components/AgentHub/Chat/Detail/ChatPanel/index.js +85 -0
  15. package/dist/components/AgentHub/Chat/Detail/ChatPanel/index.js.map +1 -0
  16. package/dist/components/AgentHub/Chat/Detail/ChatPanel/style.module.scss.js +14 -0
  17. package/dist/components/AgentHub/Chat/Detail/ChatPanel/style.module.scss.js.map +1 -0
  18. package/dist/components/AgentHub/Chat/Detail/ChatSuggestionRow/index.d.ts +9 -0
  19. package/dist/components/AgentHub/Chat/Detail/ChatSuggestionRow/index.js +22 -0
  20. package/dist/components/AgentHub/Chat/Detail/ChatSuggestionRow/index.js.map +1 -0
  21. package/dist/components/AgentHub/Chat/Detail/ChatSuggestionRow/style.module.scss.js +8 -0
  22. package/dist/components/AgentHub/Chat/Detail/ChatSuggestionRow/style.module.scss.js.map +1 -0
  23. package/dist/components/AgentHub/Chat/Detail/CitationContent/index.js +21 -0
  24. package/dist/components/AgentHub/Chat/Detail/CitationContent/index.js.map +1 -0
  25. package/dist/components/AgentHub/Chat/Detail/CitationContent/style.module.scss.js +8 -0
  26. package/dist/components/AgentHub/Chat/Detail/CitationContent/style.module.scss.js.map +1 -0
  27. package/dist/components/AgentHub/Chat/Detail/CitationInlineBadge/index.js +17 -0
  28. package/dist/components/AgentHub/Chat/Detail/CitationInlineBadge/index.js.map +1 -0
  29. package/dist/components/AgentHub/Chat/Detail/CitationInlineBadge/style.module.scss.js +7 -0
  30. package/dist/components/AgentHub/Chat/Detail/CitationInlineBadge/style.module.scss.js.map +1 -0
  31. package/dist/components/AgentHub/Chat/Detail/CitationMarkdownContent/index.js +68 -0
  32. package/dist/components/AgentHub/Chat/Detail/CitationMarkdownContent/index.js.map +1 -0
  33. package/dist/components/AgentHub/Chat/Detail/CitationMarkdownContent/style.module.scss.js +7 -0
  34. package/dist/components/AgentHub/Chat/Detail/CitationMarkdownContent/style.module.scss.js.map +1 -0
  35. package/dist/components/AgentHub/Chat/Detail/CitationPanel/index.js +247 -0
  36. package/dist/components/AgentHub/Chat/Detail/CitationPanel/index.js.map +1 -0
  37. package/dist/components/AgentHub/Chat/Detail/CitationPanel/style.module.scss.js +31 -0
  38. package/dist/components/AgentHub/Chat/Detail/CitationPanel/style.module.scss.js.map +1 -0
  39. package/dist/components/AgentHub/Chat/Detail/MermaidBlock/index.js +43 -0
  40. package/dist/components/AgentHub/Chat/Detail/MermaidBlock/index.js.map +1 -0
  41. package/dist/components/AgentHub/Chat/Detail/MermaidBlock/style.module.scss.js +8 -0
  42. package/dist/components/AgentHub/Chat/Detail/MermaidBlock/style.module.scss.js.map +1 -0
  43. package/dist/components/AgentHub/Chat/Detail/MessageActions/index.js +103 -0
  44. package/dist/components/AgentHub/Chat/Detail/MessageActions/index.js.map +1 -0
  45. package/dist/components/AgentHub/Chat/Detail/MessageActions/style.module.scss.js +14 -0
  46. package/dist/components/AgentHub/Chat/Detail/MessageActions/style.module.scss.js.map +1 -0
  47. package/dist/components/AgentHub/Chat/Detail/MessageEditPopover/index.js +58 -0
  48. package/dist/components/AgentHub/Chat/Detail/MessageEditPopover/index.js.map +1 -0
  49. package/dist/components/AgentHub/Chat/Detail/MessageEditPopover/style.module.scss.js +9 -0
  50. package/dist/components/AgentHub/Chat/Detail/MessageEditPopover/style.module.scss.js.map +1 -0
  51. package/dist/components/AgentHub/Chat/Detail/MessageItem/index.js +309 -0
  52. package/dist/components/AgentHub/Chat/Detail/MessageItem/index.js.map +1 -0
  53. package/dist/components/AgentHub/Chat/Detail/MessageItem/style.module.scss.js +24 -0
  54. package/dist/components/AgentHub/Chat/Detail/MessageItem/style.module.scss.js.map +1 -0
  55. package/dist/components/AgentHub/Chat/Detail/ThinkingSection/index.js +122 -0
  56. package/dist/components/AgentHub/Chat/Detail/ThinkingSection/index.js.map +1 -0
  57. package/dist/components/AgentHub/Chat/Detail/ThinkingSection/style.module.scss.js +25 -0
  58. package/dist/components/AgentHub/Chat/Detail/ThinkingSection/style.module.scss.js.map +1 -0
  59. package/dist/components/AgentHub/Chat/Detail/index.d.ts +12 -0
  60. package/dist/components/AgentHub/Chat/Form/Form.js +37 -0
  61. package/dist/components/AgentHub/Chat/Form/Form.js.map +1 -0
  62. package/dist/components/AgentHub/Chat/List/ChatCard/index.js +86 -0
  63. package/dist/components/AgentHub/Chat/List/ChatCard/index.js.map +1 -0
  64. package/dist/components/AgentHub/Chat/List/ChatCard/style.module.scss.js +25 -0
  65. package/dist/components/AgentHub/Chat/List/ChatCard/style.module.scss.js.map +1 -0
  66. package/dist/components/AgentHub/Chat/List/FilterBar.js +17 -0
  67. package/dist/components/AgentHub/Chat/List/FilterBar.js.map +1 -0
  68. package/dist/components/AgentHub/Chat/List/SessionSidebar/index.js +156 -0
  69. package/dist/components/AgentHub/Chat/List/SessionSidebar/index.js.map +1 -0
  70. package/dist/components/AgentHub/Chat/List/SessionSidebar/style.module.scss.js +28 -0
  71. package/dist/components/AgentHub/Chat/List/SessionSidebar/style.module.scss.js.map +1 -0
  72. package/dist/components/AgentHub/Chat/Modal/FormModal.js +58 -0
  73. package/dist/components/AgentHub/Chat/Modal/FormModal.js.map +1 -0
  74. package/dist/components/AgentHub/Chat/hooks/useAutoScrollToBottom.js +35 -0
  75. package/dist/components/AgentHub/Chat/hooks/useAutoScrollToBottom.js.map +1 -0
  76. package/dist/components/AgentHub/Chat/hooks/useChat.js +51 -0
  77. package/dist/components/AgentHub/Chat/hooks/useChat.js.map +1 -0
  78. package/dist/components/AgentHub/Chat/hooks/useChatSessions.js +60 -0
  79. package/dist/components/AgentHub/Chat/hooks/useChatSessions.js.map +1 -0
  80. package/dist/components/AgentHub/Chat/hooks/useSSECompletion.js +69 -0
  81. package/dist/components/AgentHub/Chat/hooks/useSSECompletion.js.map +1 -0
  82. package/dist/components/AgentHub/Chat/hooks/useTypewriter.js +39 -0
  83. package/dist/components/AgentHub/Chat/hooks/useTypewriter.js.map +1 -0
  84. package/dist/components/AgentHub/Chat/index.d.ts +1 -0
  85. package/dist/components/AgentHub/Chat/utils/citationContent.js +169 -0
  86. package/dist/components/AgentHub/Chat/utils/citationContent.js.map +1 -0
  87. package/dist/components/AgentHub/Chat/utils/messageContent.js +85 -0
  88. package/dist/components/AgentHub/Chat/utils/messageContent.js.map +1 -0
  89. package/dist/components/AgentHub/Chat/utils/sanitizeMermaidChart.js +22 -0
  90. package/dist/components/AgentHub/Chat/utils/sanitizeMermaidChart.js.map +1 -0
  91. package/dist/components/AgentHub/Chat/utils/sessionMessages.js +151 -0
  92. package/dist/components/AgentHub/Chat/utils/sessionMessages.js.map +1 -0
  93. package/dist/components/AgentHub/KnowledgeBase/Action/CreateButton.js +8 -0
  94. package/dist/components/AgentHub/KnowledgeBase/Action/CreateButton.js.map +1 -0
  95. package/dist/components/AgentHub/KnowledgeBase/Action/ManageActionButtons.js +20 -0
  96. package/dist/components/AgentHub/KnowledgeBase/Action/ManageActionButtons.js.map +1 -0
  97. package/dist/components/AgentHub/KnowledgeBase/Detail/DocumentTable/index.js +110 -0
  98. package/dist/components/AgentHub/KnowledgeBase/Detail/DocumentTable/index.js.map +1 -0
  99. package/dist/components/AgentHub/KnowledgeBase/Detail/DocumentTable/style.module.scss.js +7 -0
  100. package/dist/components/AgentHub/KnowledgeBase/Detail/DocumentTable/style.module.scss.js.map +1 -0
  101. package/dist/components/AgentHub/KnowledgeBase/Detail/ParseStatusTag/index.js +18 -0
  102. package/dist/components/AgentHub/KnowledgeBase/Detail/ParseStatusTag/index.js.map +1 -0
  103. package/dist/components/AgentHub/KnowledgeBase/Detail/ParseStatusTag/style.module.scss.js +7 -0
  104. package/dist/components/AgentHub/KnowledgeBase/Detail/ParseStatusTag/style.module.scss.js.map +1 -0
  105. package/dist/components/AgentHub/KnowledgeBase/Form/Form.js +31 -0
  106. package/dist/components/AgentHub/KnowledgeBase/Form/Form.js.map +1 -0
  107. package/dist/components/AgentHub/KnowledgeBase/List/FilterBar.js +17 -0
  108. package/dist/components/AgentHub/KnowledgeBase/List/FilterBar.js.map +1 -0
  109. package/dist/components/AgentHub/KnowledgeBase/List/KnowledgeCard/index.js +118 -0
  110. package/dist/components/AgentHub/KnowledgeBase/List/KnowledgeCard/index.js.map +1 -0
  111. package/dist/components/AgentHub/KnowledgeBase/List/KnowledgeCard/style.module.scss.js +23 -0
  112. package/dist/components/AgentHub/KnowledgeBase/List/KnowledgeCard/style.module.scss.js.map +1 -0
  113. package/dist/components/AgentHub/KnowledgeBase/Modal/FormModal.js +47 -0
  114. package/dist/components/AgentHub/KnowledgeBase/Modal/FormModal.js.map +1 -0
  115. package/dist/components/AgentHub/KnowledgeBase/constants/types.js +28 -0
  116. package/dist/components/AgentHub/KnowledgeBase/constants/types.js.map +1 -0
  117. package/dist/components/AgentHub/KnowledgeBase/hooks/useKBDocuments.js +21 -0
  118. package/dist/components/AgentHub/KnowledgeBase/hooks/useKBDocuments.js.map +1 -0
  119. package/dist/components/AgentHub/KnowledgeBase/hooks/useKnowledgeBase.js +32 -0
  120. package/dist/components/AgentHub/KnowledgeBase/hooks/useKnowledgeBase.js.map +1 -0
  121. package/dist/components/Filter/CommonFilter/index.js +34 -30
  122. package/dist/components/Filter/CommonFilter/index.js.map +1 -1
  123. package/dist/components/Filter/CommonFilter/style.module.scss.js +17 -16
  124. package/dist/components/Filter/CommonFilter/style.module.scss.js.map +1 -1
  125. package/dist/components/Filter/FilterDateRange/index.d.ts +2 -0
  126. package/dist/components/Filter/FilterDateRange/index.js +62 -51
  127. package/dist/components/Filter/FilterDateRange/index.js.map +1 -1
  128. package/dist/components/Filter/FilterSelect/index.d.ts +8 -2
  129. package/dist/components/Filter/FilterSelect/index.js +163 -116
  130. package/dist/components/Filter/FilterSelect/index.js.map +1 -1
  131. package/dist/components/Filter/FilterSelect/style.module.scss.js +12 -10
  132. package/dist/components/Filter/FilterSelect/style.module.scss.js.map +1 -1
  133. package/dist/components/Filter/FilterTrigger/index.d.ts +2 -2
  134. package/dist/components/Filter/FilterTrigger/index.js.map +1 -1
  135. package/dist/components/Filter/FilterTrigger/style.module.scss.js +4 -4
  136. package/dist/components/Filter/index.d.ts +1 -1
  137. package/dist/components/Filter/types.d.ts +2 -0
  138. package/dist/components/Filter/types.js.map +1 -1
  139. package/dist/components/Filter/useFilterState.d.ts +2 -0
  140. package/dist/components/Filter/useFilterState.js +27 -26
  141. package/dist/components/Filter/useFilterState.js.map +1 -1
  142. package/dist/components/Icons/index.js +153 -145
  143. package/dist/components/Icons/index.js.map +1 -1
  144. package/dist/components/TooltipInfo/TooltipInfo.js +29 -20
  145. package/dist/components/TooltipInfo/TooltipInfo.js.map +1 -1
  146. package/dist/index.d.ts +3 -1
  147. package/dist/index.js +295 -186
  148. package/dist/index.js.map +1 -1
  149. package/dist/marsun-components-core.css +1 -1
  150. package/dist/styles/global.css +1 -1
  151. package/dist/theme/constants.d.ts +47 -1
  152. package/dist/theme/constants.js +50 -5
  153. package/dist/theme/constants.js.map +1 -1
  154. package/dist/theme/index.d.ts +2 -2
  155. package/dist/theme/index.js +8 -6
  156. package/dist/theme/theme.d.ts +10 -0
  157. package/dist/theme/theme.js +24 -34
  158. package/dist/theme/theme.js.map +1 -1
  159. package/dist/theme/tokens.css +139 -0
  160. package/package.json +7 -3
@@ -0,0 +1,309 @@
1
+ import { jsx as a, jsxs as r, Fragment as te } from "react/jsx-runtime";
2
+ import { User as se, Bot as ne, BookOpen as ie } from "../../../../Icons/index.js";
3
+ import { message as U, Avatar as ae, Typography as oe } from "antd";
4
+ import n from "classnames";
5
+ import { useState as w, useMemo as l, useEffect as I, useCallback as d } from "react";
6
+ import me from "../CitationMarkdownContent/index.js";
7
+ import re, { createUserMessageActions as ce, createAssistantMessageActions as ge } from "../MessageActions/index.js";
8
+ import le from "../ThinkingSection/index.js";
9
+ import s from "./style.module.scss.js";
10
+ import { parseAssistantContent as de, normalizeDisplayText as D } from "../../utils/messageContent.js";
11
+ import { useTypewriter as F } from "../../hooks/useTypewriter.js";
12
+ import { countUniqueCitedSources as ue } from "../../utils/citationContent.js";
13
+ const { Text: he } = oe, Se = ({
14
+ message: e,
15
+ onCitationClick: c,
16
+ onTypingChange: u,
17
+ onEditMessage: g,
18
+ onResendMessage: B,
19
+ onMessageFeedback: v,
20
+ editDisabled: M,
21
+ feedbackDisabled: T
22
+ }) => {
23
+ const i = e.role === "user", [L, h] = w(!1), [N, p] = w(e.content), [x, P] = w(!1), [C, A] = w(e.thumbup), t = l(
24
+ () => de(e.content, !!e.streaming),
25
+ [e.content, e.streaming]
26
+ ), G = !!e.streaming && t.isThinking, { displayed: H, isTyping: J } = F(
27
+ t.thinking,
28
+ G
29
+ ), K = t.isThinking ? H : t.thinking, { displayed: V, isTyping: f } = F(
30
+ t.answer,
31
+ !!e.streaming
32
+ ), m = l(() => e.citations ?? [], [e.citations]), y = l(
33
+ () => `${t.thinking}
34
+ ${t.answer}`,
35
+ [t.thinking, t.answer]
36
+ ), b = l(
37
+ () => ue(y, m.length),
38
+ [y, m.length]
39
+ ), Q = l(() => m.length === 0 ? "" : b > 0 && b < m.length ? `检索 ${m.length} 个来源 · 正文引用 ${b} 处` : `引用了 ${m.length} 个来源`, [m.length, b]), k = t.isThinking && J;
40
+ I(() => {
41
+ i || u == null || u(f || k);
42
+ }, [i, f, k, u]), I(() => {
43
+ A(e.thumbup);
44
+ }, [e.id, e.thumbup]);
45
+ const S = D(V).trim().length > 0, R = (e.streaming || f) && S, O = f || k, j = !!e.streaming || O, W = d(() => {
46
+ !m.length || !c || c(m);
47
+ }, [m, c]), q = d(async (o) => {
48
+ if (o.trim())
49
+ try {
50
+ await navigator.clipboard.writeText(o), U.success("已复制");
51
+ } catch {
52
+ U.error("复制失败");
53
+ }
54
+ }, []), z = D(t.answer), X = !i && !e.streaming && !O && z.trim().length > 0, Y = d(() => {
55
+ h(!1), p(e.content);
56
+ }, [e.content]), Z = d(() => {
57
+ const o = N.trim();
58
+ !o || o === e.content.trim() || !g || (g(e.id, o), h(!1));
59
+ }, [N, e.content, e.id, g]), E = d(
60
+ async (o) => {
61
+ if (!(x || T) && C !== o) {
62
+ if (v) {
63
+ P(!0);
64
+ try {
65
+ await v(e.id, o), A(o);
66
+ } catch {
67
+ } finally {
68
+ P(!1);
69
+ }
70
+ return;
71
+ }
72
+ A(o), U.success("感谢反馈");
73
+ }
74
+ },
75
+ [T, x, C, e.id, v]
76
+ ), _ = i ? ce({
77
+ onEdit: g ? () => {
78
+ p(e.content), h(!0);
79
+ } : void 0,
80
+ onCopy: () => q(e.content),
81
+ onResend: B ? () => B(e.content) : void 0,
82
+ editDisabled: M
83
+ }) : ge({
84
+ onLike: () => {
85
+ E(!0);
86
+ },
87
+ onDislike: () => {
88
+ E(!1);
89
+ },
90
+ onCopy: () => q(z),
91
+ thumbup: C,
92
+ feedbackDisabled: T || x
93
+ }), $ = g ? {
94
+ open: L,
95
+ value: N,
96
+ originalContent: e.content,
97
+ onOpenChange: (o) => {
98
+ h(o), o || p(e.content);
99
+ },
100
+ onChange: p,
101
+ onConfirm: Z,
102
+ onCancel: Y
103
+ } : void 0, ee = /* @__PURE__ */ a(
104
+ "div",
105
+ {
106
+ className: n(
107
+ "message-item-message-user-bubble",
108
+ s["message-item-message-user-bubble"],
109
+ "bg-primary"
110
+ ),
111
+ children: /* @__PURE__ */ a(
112
+ "span",
113
+ {
114
+ className: n(
115
+ "message-item-message-user-bubble-text",
116
+ s["message-item-message-user-bubble-text"]
117
+ ),
118
+ children: e.content
119
+ }
120
+ )
121
+ }
122
+ );
123
+ return /* @__PURE__ */ r(
124
+ "div",
125
+ {
126
+ className: n(
127
+ "group",
128
+ "message-row",
129
+ s["message-item-message-row"],
130
+ i && "message-item-message-row-reverse",
131
+ i && s["message-item-message-row-reverse"]
132
+ ),
133
+ children: [
134
+ /* @__PURE__ */ a(
135
+ ae,
136
+ {
137
+ size: 34,
138
+ icon: i ? /* @__PURE__ */ a(se, {}) : /* @__PURE__ */ a(ne, {}),
139
+ className: n(
140
+ "message-item-message-avatar",
141
+ s["message-item-message-avatar"],
142
+ !i && "message-item-message-avatar-assistant",
143
+ !i && s["message-item-message-avatar-assistant"]
144
+ ),
145
+ style: i ? {} : { color: "var(--primary-color)" }
146
+ }
147
+ ),
148
+ /* @__PURE__ */ r(
149
+ "div",
150
+ {
151
+ className: n(
152
+ "message-item-message-content",
153
+ s["message-item-message-content"],
154
+ i ? n(
155
+ "message-item-message-content-user",
156
+ s["message-item-message-content-user"]
157
+ ) : n(
158
+ "message-item-message-content-assistant",
159
+ s["message-item-message-content-assistant"]
160
+ )
161
+ ),
162
+ children: [
163
+ /* @__PURE__ */ a(
164
+ "div",
165
+ {
166
+ className: i ? void 0 : n(
167
+ "message-item-message-assistant-bubble",
168
+ s["message-item-message-assistant-bubble"]
169
+ ),
170
+ children: i ? ee : e.streaming && !t.thinking && !t.isThinking && !S ? /* @__PURE__ */ r(
171
+ "div",
172
+ {
173
+ className: n(
174
+ "message-item-message-loading-dots",
175
+ s["message-item-message-loading-dots"]
176
+ ),
177
+ children: [
178
+ /* @__PURE__ */ a(
179
+ "span",
180
+ {
181
+ className: n(
182
+ "message-item-message-loading-dot",
183
+ s["message-item-message-loading-dot"]
184
+ )
185
+ }
186
+ ),
187
+ /* @__PURE__ */ a(
188
+ "span",
189
+ {
190
+ className: n(
191
+ "message-item-message-loading-dot",
192
+ s["message-item-message-loading-dot"]
193
+ )
194
+ }
195
+ ),
196
+ /* @__PURE__ */ a(
197
+ "span",
198
+ {
199
+ className: n(
200
+ "message-item-message-loading-dot",
201
+ s["message-item-message-loading-dot"]
202
+ )
203
+ }
204
+ )
205
+ ]
206
+ }
207
+ ) : /* @__PURE__ */ r(te, { children: [
208
+ (t.thinking || t.isThinking) && /* @__PURE__ */ a(
209
+ le,
210
+ {
211
+ thinking: K,
212
+ isThinking: t.isThinking,
213
+ isTyping: k,
214
+ citations: m,
215
+ citationSourceContent: y,
216
+ onCitationClick: c,
217
+ deferMermaid: j
218
+ }
219
+ ),
220
+ S && /* @__PURE__ */ r(
221
+ "div",
222
+ {
223
+ className: n(
224
+ "markdown-preview",
225
+ "message-answer-markdown",
226
+ s["message-item-message-answer-markdown"],
227
+ (t.thinking || t.isThinking) && "message-answer-markdown-spaced",
228
+ (t.thinking || t.isThinking) && s["message-item-message-answer-markdown-spaced"]
229
+ ),
230
+ children: [
231
+ /* @__PURE__ */ a(
232
+ me,
233
+ {
234
+ content: V,
235
+ citations: m,
236
+ citationSourceContent: y,
237
+ onCitationClick: c,
238
+ deferMermaid: j
239
+ }
240
+ ),
241
+ R && /* @__PURE__ */ a(
242
+ "span",
243
+ {
244
+ className: n(
245
+ "message-item-message-typing-cursor",
246
+ s["message-item-message-typing-cursor"]
247
+ )
248
+ }
249
+ )
250
+ ]
251
+ }
252
+ )
253
+ ] })
254
+ }
255
+ ),
256
+ (i || X) && /* @__PURE__ */ a(
257
+ re,
258
+ {
259
+ items: _,
260
+ align: i ? "right" : "left",
261
+ editPopover: $,
262
+ actionsVisible: L
263
+ }
264
+ ),
265
+ !i && m.length > 0 && !O && /* @__PURE__ */ r(
266
+ "button",
267
+ {
268
+ type: "button",
269
+ onClick: W,
270
+ className: n(
271
+ "message-item-citation-summary-button",
272
+ s["message-item-citation-summary-button"]
273
+ ),
274
+ children: [
275
+ /* @__PURE__ */ a(
276
+ ie,
277
+ {
278
+ className: n(
279
+ "text-primary",
280
+ "citation-summary-icon",
281
+ s["message-item-citation-summary-icon"]
282
+ )
283
+ }
284
+ ),
285
+ /* @__PURE__ */ a(
286
+ he,
287
+ {
288
+ className: n(
289
+ "text-primary",
290
+ "citation-summary-text",
291
+ s["message-item-citation-summary-text"]
292
+ ),
293
+ children: Q
294
+ }
295
+ )
296
+ ]
297
+ }
298
+ )
299
+ ]
300
+ }
301
+ )
302
+ ]
303
+ }
304
+ );
305
+ };
306
+ export {
307
+ Se as default
308
+ };
309
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../../../src/components/AgentHub/Chat/Detail/MessageItem/index.tsx"],"sourcesContent":["import { BookOpen, Bot, User } from '@/components/Icons';\nimport type { ChatMessage, Citation } from '@/components/AgentHub/types';\nimport { message as antdMessage, Avatar, Typography } from 'antd';\nimport classNames from 'classnames';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useTypewriter } from '../../hooks';\nimport { countUniqueCitedSources, normalizeDisplayText, parseAssistantContent } from '../../utils';\nimport CitationMarkdownContent from '../CitationMarkdownContent';\nimport MessageActions, {\n createAssistantMessageActions,\n createUserMessageActions,\n} from '../MessageActions';\nimport ThinkingSection from '../ThinkingSection';\nimport styles from './style.module.scss';\n\nconst { Text } = Typography;\n\nexport interface MessageItemProps {\n message: ChatMessage;\n onCitationClick?: (citations: Citation[], index?: number) => void;\n onTypingChange?: (typing: boolean) => void;\n onEditMessage?: (messageId: string, content: string) => void;\n onResendMessage?: (content: string) => void;\n onMessageFeedback?: (messageId: string, thumbup: boolean) => void | Promise<void>;\n editDisabled?: boolean;\n feedbackDisabled?: boolean;\n}\n\nconst MessageItem: React.FC<MessageItemProps> = ({\n message,\n onCitationClick,\n onTypingChange,\n onEditMessage,\n onResendMessage,\n onMessageFeedback,\n editDisabled,\n feedbackDisabled,\n}) => {\n const isUser = message.role === 'user';\n const [editOpen, setEditOpen] = useState(false);\n const [editValue, setEditValue] = useState(message.content);\n const [feedbackSubmitting, setFeedbackSubmitting] = useState(false);\n const [localThumbup, setLocalThumbup] = useState<boolean | null | undefined>(message.thumbup);\n const parsedContent = useMemo(\n () => parseAssistantContent(message.content, !!message.streaming),\n [message.content, message.streaming],\n );\n\n const shouldAnimateThinking = !!message.streaming && parsedContent.isThinking;\n const { displayed: displayedThinking, isTyping: isThinkingTyping } = useTypewriter(\n parsedContent.thinking,\n shouldAnimateThinking,\n );\n const thinkingToShow = parsedContent.isThinking ? displayedThinking : parsedContent.thinking;\n\n const { displayed: displayedContent, isTyping } = useTypewriter(\n parsedContent.answer,\n !!message.streaming,\n );\n\n const citations = useMemo(() => message.citations ?? [], [message.citations]);\n const citationSourceContent = useMemo(\n () => `${parsedContent.thinking}\\n${parsedContent.answer}`,\n [parsedContent.thinking, parsedContent.answer],\n );\n const uniqueCitedCount = useMemo(\n () => countUniqueCitedSources(citationSourceContent, citations.length),\n [citationSourceContent, citations.length],\n );\n\n const citationSummaryLabel = useMemo(() => {\n if (citations.length === 0) return '';\n if (uniqueCitedCount > 0 && uniqueCitedCount < citations.length) {\n return `检索 ${citations.length} 个来源 · 正文引用 ${uniqueCitedCount} 处`;\n }\n return `引用了 ${citations.length} 个来源`;\n }, [citations.length, uniqueCitedCount]);\n\n const effectiveThinkingTyping = parsedContent.isThinking && isThinkingTyping;\n\n useEffect(() => {\n if (isUser) return;\n onTypingChange?.(isTyping || effectiveThinkingTyping);\n }, [isUser, isTyping, effectiveThinkingTyping, onTypingChange]);\n\n useEffect(() => {\n setLocalThumbup(message.thumbup);\n }, [message.id, message.thumbup]);\n\n const hasAnswerContent = normalizeDisplayText(displayedContent).trim().length > 0;\n const showAnswerCursor = (message.streaming || isTyping) && hasAnswerContent;\n const isContentTyping = isTyping || effectiveThinkingTyping;\n const deferMermaid = !!message.streaming || isContentTyping;\n\n const handleSummaryClick = useCallback(() => {\n if (!citations.length || !onCitationClick) return;\n onCitationClick(citations);\n }, [citations, onCitationClick]);\n\n const copyText = useCallback(async (text: string) => {\n if (!text.trim()) return;\n try {\n await navigator.clipboard.writeText(text);\n antdMessage.success('已复制');\n } catch {\n antdMessage.error('复制失败');\n }\n }, []);\n\n const assistantCopyText = normalizeDisplayText(parsedContent.answer);\n const showAssistantActions =\n !isUser && !message.streaming && !isContentTyping && assistantCopyText.trim().length > 0;\n\n const handleEditCancel = useCallback(() => {\n setEditOpen(false);\n setEditValue(message.content);\n }, [message.content]);\n\n const handleEditConfirm = useCallback(() => {\n const trimmed = editValue.trim();\n if (!trimmed || trimmed === message.content.trim() || !onEditMessage) return;\n onEditMessage(message.id, trimmed);\n setEditOpen(false);\n }, [editValue, message.content, message.id, onEditMessage]);\n\n const handleFeedback = useCallback(\n async (thumbup: boolean) => {\n if (feedbackSubmitting || feedbackDisabled) return;\n if (localThumbup === thumbup) return;\n\n if (onMessageFeedback) {\n setFeedbackSubmitting(true);\n try {\n await onMessageFeedback(message.id, thumbup);\n setLocalThumbup(thumbup);\n } catch {\n // 错误提示由上层处理\n } finally {\n setFeedbackSubmitting(false);\n }\n return;\n }\n\n setLocalThumbup(thumbup);\n antdMessage.success('感谢反馈');\n },\n [feedbackDisabled, feedbackSubmitting, localThumbup, message.id, onMessageFeedback],\n );\n\n const actionItems = isUser\n ? createUserMessageActions({\n onEdit: onEditMessage\n ? () => {\n setEditValue(message.content);\n setEditOpen(true);\n }\n : undefined,\n onCopy: () => copyText(message.content),\n onResend: onResendMessage ? () => onResendMessage(message.content) : undefined,\n editDisabled,\n })\n : createAssistantMessageActions({\n onLike: () => {\n void handleFeedback(true);\n },\n onDislike: () => {\n void handleFeedback(false);\n },\n onCopy: () => copyText(assistantCopyText),\n thumbup: localThumbup,\n feedbackDisabled: feedbackDisabled || feedbackSubmitting,\n });\n\n const editPopoverProps = onEditMessage\n ? {\n open: editOpen,\n value: editValue,\n originalContent: message.content,\n onOpenChange: (open: boolean) => {\n setEditOpen(open);\n if (!open) setEditValue(message.content);\n },\n onChange: setEditValue,\n onConfirm: handleEditConfirm,\n onCancel: handleEditCancel,\n }\n : undefined;\n\n const userMessageBubble = (\n <div\n className={classNames(\n 'message-item-message-user-bubble',\n styles['message-item-message-user-bubble'],\n 'bg-primary',\n )}\n >\n <span\n className={classNames(\n 'message-item-message-user-bubble-text',\n styles['message-item-message-user-bubble-text'],\n )}\n >\n {message.content}\n </span>\n </div>\n );\n\n return (\n <div\n className={classNames(\n 'group',\n 'message-row',\n styles['message-item-message-row'],\n isUser && 'message-item-message-row-reverse',\n isUser && styles['message-item-message-row-reverse'],\n )}\n >\n <Avatar\n size={34}\n icon={isUser ? <User /> : <Bot />}\n className={classNames(\n 'message-item-message-avatar',\n styles['message-item-message-avatar'],\n !isUser && 'message-item-message-avatar-assistant',\n !isUser && styles['message-item-message-avatar-assistant'],\n )}\n style={isUser ? {} : { color: 'var(--primary-color)' }}\n />\n\n <div\n className={classNames(\n 'message-item-message-content',\n styles['message-item-message-content'],\n isUser\n ? classNames(\n 'message-item-message-content-user',\n styles['message-item-message-content-user'],\n )\n : classNames(\n 'message-item-message-content-assistant',\n styles['message-item-message-content-assistant'],\n ),\n )}\n >\n <div\n className={\n isUser\n ? undefined\n : classNames(\n 'message-item-message-assistant-bubble',\n styles['message-item-message-assistant-bubble'],\n )\n }\n >\n {isUser ? (\n userMessageBubble\n ) : message.streaming &&\n !parsedContent.thinking &&\n !parsedContent.isThinking &&\n !hasAnswerContent ? (\n <div\n className={classNames(\n 'message-item-message-loading-dots',\n styles['message-item-message-loading-dots'],\n )}\n >\n <span\n className={classNames(\n 'message-item-message-loading-dot',\n styles['message-item-message-loading-dot'],\n )}\n />\n <span\n className={classNames(\n 'message-item-message-loading-dot',\n styles['message-item-message-loading-dot'],\n )}\n />\n <span\n className={classNames(\n 'message-item-message-loading-dot',\n styles['message-item-message-loading-dot'],\n )}\n />\n </div>\n ) : (\n <>\n {(parsedContent.thinking || parsedContent.isThinking) && (\n <ThinkingSection\n thinking={thinkingToShow}\n isThinking={parsedContent.isThinking}\n isTyping={effectiveThinkingTyping}\n citations={citations}\n citationSourceContent={citationSourceContent}\n onCitationClick={onCitationClick}\n deferMermaid={deferMermaid}\n />\n )}\n {hasAnswerContent && (\n <div\n className={classNames(\n 'markdown-preview',\n 'message-answer-markdown',\n styles['message-item-message-answer-markdown'],\n (parsedContent.thinking || parsedContent.isThinking) &&\n 'message-answer-markdown-spaced',\n (parsedContent.thinking || parsedContent.isThinking) &&\n styles['message-item-message-answer-markdown-spaced'],\n )}\n >\n <CitationMarkdownContent\n content={displayedContent}\n citations={citations}\n citationSourceContent={citationSourceContent}\n onCitationClick={onCitationClick}\n deferMermaid={deferMermaid}\n />\n {showAnswerCursor && (\n <span\n className={classNames(\n 'message-item-message-typing-cursor',\n styles['message-item-message-typing-cursor'],\n )}\n />\n )}\n </div>\n )}\n </>\n )}\n </div>\n\n {(isUser || showAssistantActions) && (\n <MessageActions\n items={actionItems}\n align={isUser ? 'right' : 'left'}\n editPopover={editPopoverProps}\n actionsVisible={editOpen}\n />\n )}\n\n {!isUser && citations.length > 0 && !isContentTyping && (\n <button\n type=\"button\"\n onClick={handleSummaryClick}\n className={classNames(\n 'message-item-citation-summary-button',\n styles['message-item-citation-summary-button'],\n )}\n >\n <BookOpen\n className={classNames(\n 'text-primary',\n 'citation-summary-icon',\n styles['message-item-citation-summary-icon'],\n )}\n />\n <Text\n className={classNames(\n 'text-primary',\n 'citation-summary-text',\n styles['message-item-citation-summary-text'],\n )}\n >\n {citationSummaryLabel}\n </Text>\n </button>\n )}\n </div>\n </div>\n );\n};\n\nexport default MessageItem;\n"],"names":["Text","Typography","MessageItem","message","onCitationClick","onTypingChange","onEditMessage","onResendMessage","onMessageFeedback","editDisabled","feedbackDisabled","isUser","editOpen","setEditOpen","useState","editValue","setEditValue","feedbackSubmitting","setFeedbackSubmitting","localThumbup","setLocalThumbup","parsedContent","useMemo","parseAssistantContent","shouldAnimateThinking","displayedThinking","isThinkingTyping","useTypewriter","thinkingToShow","displayedContent","isTyping","citations","citationSourceContent","uniqueCitedCount","countUniqueCitedSources","citationSummaryLabel","effectiveThinkingTyping","useEffect","hasAnswerContent","normalizeDisplayText","showAnswerCursor","isContentTyping","deferMermaid","handleSummaryClick","useCallback","copyText","text","antdMessage","assistantCopyText","showAssistantActions","handleEditCancel","handleEditConfirm","trimmed","handleFeedback","thumbup","actionItems","createUserMessageActions","createAssistantMessageActions","editPopoverProps","open","userMessageBubble","jsx","classNames","styles","jsxs","Avatar","User","Bot","Fragment","ThinkingSection","CitationMarkdownContent","MessageActions","BookOpen"],"mappings":";;;;;;;;;;;;AAeA,MAAM,EAAE,MAAAA,OAASC,IAaXC,KAA0C,CAAC;AAAA,EAAA,SAC/CC;AAAAA,EACA,iBAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,eAAAC;AAAA,EACA,iBAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,cAAAC;AAAA,EACA,kBAAAC;AACF,MAAM;AACJ,QAAMC,IAASR,EAAQ,SAAS,QAC1B,CAACS,GAAUC,CAAW,IAAIC,EAAS,EAAK,GACxC,CAACC,GAAWC,CAAY,IAAIF,EAASX,EAAQ,OAAO,GACpD,CAACc,GAAoBC,CAAqB,IAAIJ,EAAS,EAAK,GAC5D,CAACK,GAAcC,CAAe,IAAIN,EAAqCX,EAAQ,OAAO,GACtFkB,IAAgBC;AAAA,IACpB,MAAMC,GAAsBpB,EAAQ,SAAS,CAAC,CAACA,EAAQ,SAAS;AAAA,IAChE,CAACA,EAAQ,SAASA,EAAQ,SAAS;AAAA,EAAA,GAG/BqB,IAAwB,CAAC,CAACrB,EAAQ,aAAakB,EAAc,YAC7D,EAAE,WAAWI,GAAmB,UAAUC,MAAqBC;AAAA,IACnEN,EAAc;AAAA,IACdG;AAAA,EAAA,GAEII,IAAiBP,EAAc,aAAaI,IAAoBJ,EAAc,UAE9E,EAAE,WAAWQ,GAAkB,UAAAC,EAAA,IAAaH;AAAA,IAChDN,EAAc;AAAA,IACd,CAAC,CAAClB,EAAQ;AAAA,EAAA,GAGN4B,IAAYT,EAAQ,MAAMnB,EAAQ,aAAa,IAAI,CAACA,EAAQ,SAAS,CAAC,GACtE6B,IAAwBV;AAAA,IAC5B,MAAM,GAAGD,EAAc,QAAQ;AAAA,EAAKA,EAAc,MAAM;AAAA,IACxD,CAACA,EAAc,UAAUA,EAAc,MAAM;AAAA,EAAA,GAEzCY,IAAmBX;AAAA,IACvB,MAAMY,GAAwBF,GAAuBD,EAAU,MAAM;AAAA,IACrE,CAACC,GAAuBD,EAAU,MAAM;AAAA,EAAA,GAGpCI,IAAuBb,EAAQ,MAC/BS,EAAU,WAAW,IAAU,KAC/BE,IAAmB,KAAKA,IAAmBF,EAAU,SAChD,MAAMA,EAAU,MAAM,eAAeE,CAAgB,OAEvD,OAAOF,EAAU,MAAM,QAC7B,CAACA,EAAU,QAAQE,CAAgB,CAAC,GAEjCG,IAA0Bf,EAAc,cAAcK;AAE5D,EAAAW,EAAU,MAAM;AACd,IAAI1B,KACJN,KAAA,QAAAA,EAAiByB,KAAYM;AAAA,EAC/B,GAAG,CAACzB,GAAQmB,GAAUM,GAAyB/B,CAAc,CAAC,GAE9DgC,EAAU,MAAM;AACd,IAAAjB,EAAgBjB,EAAQ,OAAO;AAAA,EACjC,GAAG,CAACA,EAAQ,IAAIA,EAAQ,OAAO,CAAC;AAEhC,QAAMmC,IAAmBC,EAAqBV,CAAgB,EAAE,KAAA,EAAO,SAAS,GAC1EW,KAAoBrC,EAAQ,aAAa2B,MAAaQ,GACtDG,IAAkBX,KAAYM,GAC9BM,IAAe,CAAC,CAACvC,EAAQ,aAAasC,GAEtCE,IAAqBC,EAAY,MAAM;AAC3C,IAAI,CAACb,EAAU,UAAU,CAAC3B,KAC1BA,EAAgB2B,CAAS;AAAA,EAC3B,GAAG,CAACA,GAAW3B,CAAe,CAAC,GAEzByC,IAAWD,EAAY,OAAOE,MAAiB;AACnD,QAAKA,EAAK;AACV,UAAI;AACF,cAAM,UAAU,UAAU,UAAUA,CAAI,GACxCC,EAAY,QAAQ,KAAK;AAAA,MAC3B,QAAQ;AACNA,QAAAA,EAAY,MAAM,MAAM;AAAA,MAC1B;AAAA,EACF,GAAG,CAAA,CAAE,GAECC,IAAoBT,EAAqBlB,EAAc,MAAM,GAC7D4B,IACJ,CAACtC,KAAU,CAACR,EAAQ,aAAa,CAACsC,KAAmBO,EAAkB,KAAA,EAAO,SAAS,GAEnFE,IAAmBN,EAAY,MAAM;AACzC,IAAA/B,EAAY,EAAK,GACjBG,EAAab,EAAQ,OAAO;AAAA,EAC9B,GAAG,CAACA,EAAQ,OAAO,CAAC,GAEdgD,IAAoBP,EAAY,MAAM;AAC1C,UAAMQ,IAAUrC,EAAU,KAAA;AAC1B,IAAI,CAACqC,KAAWA,MAAYjD,EAAQ,QAAQ,KAAA,KAAU,CAACG,MACvDA,EAAcH,EAAQ,IAAIiD,CAAO,GACjCvC,EAAY,EAAK;AAAA,EACnB,GAAG,CAACE,GAAWZ,EAAQ,SAASA,EAAQ,IAAIG,CAAa,CAAC,GAEpD+C,IAAiBT;AAAA,IACrB,OAAOU,MAAqB;AAC1B,UAAI,EAAArC,KAAsBP,MACtBS,MAAiBmC,GAErB;AAAA,YAAI9C,GAAmB;AACrB,UAAAU,EAAsB,EAAI;AAC1B,cAAI;AACF,kBAAMV,EAAkBL,EAAQ,IAAImD,CAAO,GAC3ClC,EAAgBkC,CAAO;AAAA,UACzB,QAAQ;AAAA,UAER,UAAA;AACE,YAAApC,EAAsB,EAAK;AAAA,UAC7B;AACA;AAAA,QACF;AAEA,QAAAE,EAAgBkC,CAAO,GACvBP,EAAY,QAAQ,MAAM;AAAA;AAAA,IAC5B;AAAA,IACA,CAACrC,GAAkBO,GAAoBE,GAAchB,EAAQ,IAAIK,CAAiB;AAAA,EAAA,GAG9E+C,IAAc5C,IAChB6C,GAAyB;AAAA,IACvB,QAAQlD,IACJ,MAAM;AACJ,MAAAU,EAAab,EAAQ,OAAO,GAC5BU,EAAY,EAAI;AAAA,IAClB,IACA;AAAA,IACJ,QAAQ,MAAMgC,EAAS1C,EAAQ,OAAO;AAAA,IACtC,UAAUI,IAAkB,MAAMA,EAAgBJ,EAAQ,OAAO,IAAI;AAAA,IACrE,cAAAM;AAAA,EAAA,CACD,IACDgD,GAA8B;AAAA,IAC5B,QAAQ,MAAM;AACZ,MAAKJ,EAAe,EAAI;AAAA,IAC1B;AAAA,IACA,WAAW,MAAM;AACf,MAAKA,EAAe,EAAK;AAAA,IAC3B;AAAA,IACA,QAAQ,MAAMR,EAASG,CAAiB;AAAA,IACxC,SAAS7B;AAAA,IACT,kBAAkBT,KAAoBO;AAAA,EAAA,CACvC,GAECyC,IAAmBpD,IACrB;AAAA,IACE,MAAMM;AAAA,IACN,OAAOG;AAAA,IACP,iBAAiBZ,EAAQ;AAAA,IACzB,cAAc,CAACwD,MAAkB;AAC/B,MAAA9C,EAAY8C,CAAI,GACXA,KAAM3C,EAAab,EAAQ,OAAO;AAAA,IACzC;AAAA,IACA,UAAUa;AAAA,IACV,WAAWmC;AAAA,IACX,UAAUD;AAAA,EAAA,IAEZ,QAEEU,KACJ,gBAAAC;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC;AAAA,QACT;AAAA,QACAC,EAAO,kCAAkC;AAAA,QACzC;AAAA,MAAA;AAAA,MAGF,UAAA,gBAAAF;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWC;AAAA,YACT;AAAA,YACAC,EAAO,uCAAuC;AAAA,UAAA;AAAA,UAG/C,UAAA5D,EAAQ;AAAA,QAAA;AAAA,MAAA;AAAA,IACX;AAAA,EAAA;AAIJ,SACE,gBAAA6D;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWF;AAAA,QACT;AAAA,QACA;AAAA,QACAC,EAAO,0BAA0B;AAAA,QACjCpD,KAAU;AAAA,QACVA,KAAUoD,EAAO,kCAAkC;AAAA,MAAA;AAAA,MAGrD,UAAA;AAAA,QAAA,gBAAAF;AAAA,UAACI;AAAA,UAAA;AAAA,YACC,MAAM;AAAA,YACN,MAAMtD,IAAS,gBAAAkD,EAACK,IAAA,CAAA,CAAK,sBAAMC,IAAA,EAAI;AAAA,YAC/B,WAAWL;AAAA,cACT;AAAA,cACAC,EAAO,6BAA6B;AAAA,cACpC,CAACpD,KAAU;AAAA,cACX,CAACA,KAAUoD,EAAO,uCAAuC;AAAA,YAAA;AAAA,YAE3D,OAAOpD,IAAS,KAAK,EAAE,OAAO,uBAAA;AAAA,UAAuB;AAAA,QAAA;AAAA,QAGvD,gBAAAqD;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAWF;AAAA,cACT;AAAA,cACAC,EAAO,8BAA8B;AAAA,cACrCpD,IACImD;AAAA,gBACE;AAAA,gBACAC,EAAO,mCAAmC;AAAA,cAAA,IAE5CD;AAAA,gBACE;AAAA,gBACAC,EAAO,wCAAwC;AAAA,cAAA;AAAA,YACjD;AAAA,YAGN,UAAA;AAAA,cAAA,gBAAAF;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,WACElD,IACI,SACAmD;AAAA,oBACE;AAAA,oBACAC,EAAO,uCAAuC;AAAA,kBAAA;AAAA,kBAIrD,UAAApD,IACCiD,KACEzD,EAAQ,aACV,CAACkB,EAAc,YACf,CAACA,EAAc,cACf,CAACiB,IACD,gBAAA0B;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,WAAWF;AAAA,wBACT;AAAA,wBACAC,EAAO,mCAAmC;AAAA,sBAAA;AAAA,sBAG5C,UAAA;AAAA,wBAAA,gBAAAF;AAAA,0BAAC;AAAA,0BAAA;AAAA,4BACC,WAAWC;AAAA,8BACT;AAAA,8BACAC,EAAO,kCAAkC;AAAA,4BAAA;AAAA,0BAC3C;AAAA,wBAAA;AAAA,wBAEF,gBAAAF;AAAA,0BAAC;AAAA,0BAAA;AAAA,4BACC,WAAWC;AAAA,8BACT;AAAA,8BACAC,EAAO,kCAAkC;AAAA,4BAAA;AAAA,0BAC3C;AAAA,wBAAA;AAAA,wBAEF,gBAAAF;AAAA,0BAAC;AAAA,0BAAA;AAAA,4BACC,WAAWC;AAAA,8BACT;AAAA,8BACAC,EAAO,kCAAkC;AAAA,4BAAA;AAAA,0BAC3C;AAAA,wBAAA;AAAA,sBACF;AAAA,oBAAA;AAAA,kBAAA,IAGF,gBAAAC,EAAAI,IAAA,EACI,UAAA;AAAA,qBAAA/C,EAAc,YAAYA,EAAc,eACxC,gBAAAwC;AAAA,sBAACQ;AAAA,sBAAA;AAAA,wBACC,UAAUzC;AAAA,wBACV,YAAYP,EAAc;AAAA,wBAC1B,UAAUe;AAAA,wBACV,WAAAL;AAAA,wBACA,uBAAAC;AAAA,wBACA,iBAAA5B;AAAA,wBACA,cAAAsC;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAGHJ,KACC,gBAAA0B;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,WAAWF;AAAA,0BACT;AAAA,0BACA;AAAA,0BACAC,EAAO,sCAAsC;AAAA,2BAC5C1C,EAAc,YAAYA,EAAc,eACvC;AAAA,2BACDA,EAAc,YAAYA,EAAc,eACvC0C,EAAO,6CAA6C;AAAA,wBAAA;AAAA,wBAGxD,UAAA;AAAA,0BAAA,gBAAAF;AAAA,4BAACS;AAAA,4BAAA;AAAA,8BACC,SAASzC;AAAA,8BACT,WAAAE;AAAA,8BACA,uBAAAC;AAAA,8BACA,iBAAA5B;AAAA,8BACA,cAAAsC;AAAA,4BAAA;AAAA,0BAAA;AAAA,0BAEDF,KACC,gBAAAqB;AAAA,4BAAC;AAAA,4BAAA;AAAA,8BACC,WAAWC;AAAA,gCACT;AAAA,gCACAC,EAAO,oCAAoC;AAAA,8BAAA;AAAA,4BAC7C;AAAA,0BAAA;AAAA,wBACF;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAEJ,EAAA,CAEJ;AAAA,gBAAA;AAAA,cAAA;AAAA,eAIFpD,KAAUsC,MACV,gBAAAY;AAAA,gBAACU;AAAA,gBAAA;AAAA,kBACC,OAAOhB;AAAA,kBACP,OAAO5C,IAAS,UAAU;AAAA,kBAC1B,aAAa+C;AAAA,kBACb,gBAAgB9C;AAAA,gBAAA;AAAA,cAAA;AAAA,cAInB,CAACD,KAAUoB,EAAU,SAAS,KAAK,CAACU,KACnC,gBAAAuB;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBACC,MAAK;AAAA,kBACL,SAASrB;AAAA,kBACT,WAAWmB;AAAA,oBACT;AAAA,oBACAC,EAAO,sCAAsC;AAAA,kBAAA;AAAA,kBAG/C,UAAA;AAAA,oBAAA,gBAAAF;AAAA,sBAACW;AAAA,sBAAA;AAAA,wBACC,WAAWV;AAAA,0BACT;AAAA,0BACA;AAAA,0BACAC,EAAO,oCAAoC;AAAA,wBAAA;AAAA,sBAC7C;AAAA,oBAAA;AAAA,oBAEF,gBAAAF;AAAA,sBAAC7D;AAAA,sBAAA;AAAA,wBACC,WAAW8D;AAAA,0BACT;AAAA,0BACA;AAAA,0BACAC,EAAO,oCAAoC;AAAA,wBAAA;AAAA,wBAG5C,UAAA5B;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACH;AAAA,gBAAA;AAAA,cAAA;AAAA,YACF;AAAA,UAAA;AAAA,QAAA;AAAA,MAEJ;AAAA,IAAA;AAAA,EAAA;AAGN;"}
@@ -0,0 +1,24 @@
1
+ const e = {
2
+ "message-item-message-row": "_message-item-message-row_bwatj_1",
3
+ "message-item-message-row-reverse": "_message-item-message-row-reverse_bwatj_7",
4
+ "message-item-message-avatar": "_message-item-message-avatar_bwatj_11",
5
+ "message-item-message-avatar-assistant": "_message-item-message-avatar-assistant_bwatj_15",
6
+ "message-item-message-content": "_message-item-message-content_bwatj_19",
7
+ "message-item-message-content-user": "_message-item-message-content-user_bwatj_26",
8
+ "message-item-message-content-assistant": "_message-item-message-content-assistant_bwatj_30",
9
+ "message-item-message-user-bubble": "_message-item-message-user-bubble_bwatj_34",
10
+ "message-item-message-user-bubble-text": "_message-item-message-user-bubble-text_bwatj_46",
11
+ "message-item-message-assistant-bubble": "_message-item-message-assistant-bubble_bwatj_50",
12
+ "message-item-message-loading-dots": "_message-item-message-loading-dots_bwatj_68",
13
+ "message-item-message-loading-dot": "_message-item-message-loading-dot_bwatj_68",
14
+ "message-item-message-answer-markdown": "_message-item-message-answer-markdown_bwatj_91",
15
+ "message-item-message-answer-markdown-spaced": "_message-item-message-answer-markdown-spaced_bwatj_130",
16
+ "message-item-message-typing-cursor": "_message-item-message-typing-cursor_bwatj_134",
17
+ "message-item-citation-summary-button": "_message-item-citation-summary-button_bwatj_144",
18
+ "message-item-citation-summary-icon": "_message-item-citation-summary-icon_bwatj_163",
19
+ "message-item-citation-summary-text": "_message-item-citation-summary-text_bwatj_168"
20
+ };
21
+ export {
22
+ e as default
23
+ };
24
+ //# sourceMappingURL=style.module.scss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,122 @@
1
+ import { jsxs as a, jsx as i, Fragment as L } from "react/jsx-runtime";
2
+ import { useState as N, useRef as l, useEffect as h } from "react";
3
+ import n from "./style.module.scss.js";
4
+ import t from "classnames";
5
+ import R from "../CitationMarkdownContent/index.js";
6
+ const I = ({ expanded: s }) => /* @__PURE__ */ i(
7
+ "svg",
8
+ {
9
+ width: "12",
10
+ height: "12",
11
+ viewBox: "0 0 12 12",
12
+ fill: "none",
13
+ className: t(
14
+ "thinking-section-thinking-chevron",
15
+ n["thinking-section-thinking-chevron"],
16
+ s && "thinking-section-thinking-chevron-expanded",
17
+ s && n["thinking-section-thinking-chevron-expanded"]
18
+ ),
19
+ "aria-hidden": !0,
20
+ children: /* @__PURE__ */ i(
21
+ "path",
22
+ {
23
+ d: "M3 4.5L6 7.5L9 4.5",
24
+ stroke: "currentColor",
25
+ strokeWidth: "1.25",
26
+ strokeLinecap: "round",
27
+ strokeLinejoin: "round"
28
+ }
29
+ )
30
+ }
31
+ ), H = ({
32
+ thinking: s,
33
+ isThinking: e,
34
+ isTyping: g,
35
+ citations: b = [],
36
+ citationSourceContent: y = "",
37
+ onCitationClick: C,
38
+ deferMermaid: E = !1
39
+ }) => {
40
+ const [c, k] = N(!!e), [d, u] = N(0), r = l(null), p = l(null), m = l(null);
41
+ if (h(() => {
42
+ e ? (k(!0), r.current === null && (r.current = Date.now())) : r.current !== null && (u(Math.max(1, Math.round((Date.now() - r.current) / 1e3))), r.current = null);
43
+ }, [e]), h(() => {
44
+ if (!e) return;
45
+ const o = window.setInterval(() => {
46
+ r.current !== null && u(Math.max(1, Math.round((Date.now() - r.current) / 1e3)));
47
+ }, 1e3);
48
+ return () => window.clearInterval(o);
49
+ }, [e]), h(() => {
50
+ if (!e || !c) return;
51
+ const o = p.current, v = m.current;
52
+ if (!o || !v) return;
53
+ const x = () => {
54
+ o.scrollTop = o.scrollHeight;
55
+ };
56
+ x();
57
+ const w = new ResizeObserver(x);
58
+ return w.observe(v), () => w.disconnect();
59
+ }, [e, g, c, s]), !s && !e) return null;
60
+ const M = (e || g) && s.trim().length > 0, D = e ? "思考中" : d > 0 ? `已思考 ${d}s` : "思考过程", f = () => k((o) => !o);
61
+ return /* @__PURE__ */ a("div", { className: t("thinking-section-thinking-section", n["thinking-section-thinking-section"]), children: [
62
+ /* @__PURE__ */ a(
63
+ "div",
64
+ {
65
+ role: "button",
66
+ tabIndex: 0,
67
+ "aria-expanded": c,
68
+ onClick: f,
69
+ onKeyDown: (o) => {
70
+ (o.key === "Enter" || o.key === " ") && (o.preventDefault(), f());
71
+ },
72
+ className: t("group", "thinking-toggle", n["thinking-section-thinking-toggle"]),
73
+ children: [
74
+ /* @__PURE__ */ i("span", { className: t("thinking-section-thinking-toggle-icon-wrap", n["thinking-section-thinking-toggle-icon-wrap"]), children: e ? /* @__PURE__ */ a(L, { children: [
75
+ /* @__PURE__ */ i("span", { className: t("thinking-section-thinking-ping-ring", n["thinking-section-thinking-ping-ring"]) }),
76
+ /* @__PURE__ */ i("span", { className: t("thinking-section-thinking-dot-active", n["thinking-section-thinking-dot-active"]) })
77
+ ] }) : /* @__PURE__ */ i("span", { className: t("thinking-section-thinking-dot-idle", n["thinking-section-thinking-dot-idle"]) }) }),
78
+ /* @__PURE__ */ i(
79
+ "span",
80
+ {
81
+ className: t(
82
+ "thinking-section-thinking-status-label",
83
+ n["thinking-section-thinking-status-label"],
84
+ e && "thinking-section-thinking-status-label-active",
85
+ e && n["thinking-section-thinking-status-label-active"]
86
+ ),
87
+ children: D
88
+ }
89
+ ),
90
+ /* @__PURE__ */ i(I, { expanded: c })
91
+ ]
92
+ }
93
+ ),
94
+ /* @__PURE__ */ i(
95
+ "div",
96
+ {
97
+ className: t(
98
+ "thinking-section-thinking-expand-grid",
99
+ n["thinking-section-thinking-expand-grid"],
100
+ c ? t("thinking-section-thinking-expand-grid-open", n["thinking-section-thinking-expand-grid-open"]) : t("thinking-section-thinking-expand-grid-closed", n["thinking-section-thinking-expand-grid-closed"])
101
+ ),
102
+ children: /* @__PURE__ */ i("div", { className: t("thinking-section-thinking-expand-inner", n["thinking-section-thinking-expand-inner"]), children: s.trim() ? /* @__PURE__ */ i("div", { ref: p, className: t("thinking-section-thinking-scroll-area", n["thinking-section-thinking-scroll-area"]), children: /* @__PURE__ */ a("div", { ref: m, className: t("thinking-section-thinking-content", n["thinking-section-thinking-content"]), children: [
103
+ /* @__PURE__ */ i(
104
+ R,
105
+ {
106
+ content: s,
107
+ citations: b,
108
+ citationSourceContent: y,
109
+ onCitationClick: C,
110
+ deferMermaid: E
111
+ }
112
+ ),
113
+ M && /* @__PURE__ */ i("span", { className: t("thinking-section-thinking-cursor", n["thinking-section-thinking-cursor"]) })
114
+ ] }) }) : e ? /* @__PURE__ */ i("div", { className: t("thinking-section-thinking-empty-cursor-wrap", n["thinking-section-thinking-empty-cursor-wrap"]), children: /* @__PURE__ */ i("span", { className: t("thinking-section-thinking-empty-cursor", n["thinking-section-thinking-empty-cursor"]) }) }) : null })
115
+ }
116
+ )
117
+ ] });
118
+ };
119
+ export {
120
+ H as default
121
+ };
122
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../../../src/components/AgentHub/Chat/Detail/ThinkingSection/index.tsx"],"sourcesContent":["import type { Citation } from '@/components/AgentHub/types';\nimport React, { useEffect, useRef, useState } from 'react';\nimport styles from './style.module.scss';\nimport classNames from 'classnames';\nimport CitationMarkdownContent from '../CitationMarkdownContent';\n\nexport interface ThinkingSectionProps {\n thinking: string;\n isThinking?: boolean;\n isTyping?: boolean;\n citations?: Citation[];\n citationSourceContent?: string;\n onCitationClick?: (citations: Citation[], index?: number) => void;\n deferMermaid?: boolean;\n}\n\nconst ChevronIcon: React.FC<{ expanded: boolean }> = ({ expanded }) => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n className={classNames('thinking-section-thinking-chevron', styles['thinking-section-thinking-chevron'],\n expanded && 'thinking-section-thinking-chevron-expanded',\n expanded && styles['thinking-section-thinking-chevron-expanded'],\n )}\n aria-hidden\n >\n <path\n d=\"M3 4.5L6 7.5L9 4.5\"\n stroke=\"currentColor\"\n strokeWidth=\"1.25\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\nconst ThinkingSection: React.FC<ThinkingSectionProps> = ({\n thinking,\n isThinking,\n isTyping,\n citations = [],\n citationSourceContent = '',\n onCitationClick,\n deferMermaid = false,\n}) => {\n const [expanded, setExpanded] = useState(!!isThinking);\n const [elapsed, setElapsed] = useState(0);\n const startRef = useRef<number | null>(null);\n const thinkingScrollRef = useRef<HTMLDivElement>(null);\n const thinkingContentRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (isThinking) {\n setExpanded(true);\n if (startRef.current === null) {\n startRef.current = Date.now();\n }\n } else if (startRef.current !== null) {\n setElapsed(Math.max(1, Math.round((Date.now() - startRef.current) / 1000)));\n startRef.current = null;\n }\n }, [isThinking]);\n\n useEffect(() => {\n if (!isThinking) return;\n const timer = window.setInterval(() => {\n if (startRef.current !== null) {\n setElapsed(Math.max(1, Math.round((Date.now() - startRef.current) / 1000)));\n }\n }, 1000);\n return () => window.clearInterval(timer);\n }, [isThinking]);\n\n useEffect(() => {\n if (!isThinking || !expanded) return;\n const scrollEl = thinkingScrollRef.current;\n const contentEl = thinkingContentRef.current;\n if (!scrollEl || !contentEl) return;\n\n const scrollToEnd = () => {\n scrollEl.scrollTop = scrollEl.scrollHeight;\n };\n\n scrollToEnd();\n const observer = new ResizeObserver(scrollToEnd);\n observer.observe(contentEl);\n return () => observer.disconnect();\n }, [isThinking, isTyping, expanded, thinking]);\n\n if (!thinking && !isThinking) return null;\n\n const showThinkingCursor = (isThinking || isTyping) && thinking.trim().length > 0;\n const statusLabel = isThinking ? '思考中' : elapsed > 0 ? `已思考 ${elapsed}s` : '思考过程';\n\n const handleToggle = () => setExpanded((prev) => !prev);\n\n return (\n <div className={classNames('thinking-section-thinking-section', styles['thinking-section-thinking-section'])}>\n <div\n role=\"button\"\n tabIndex={0}\n aria-expanded={expanded}\n onClick={handleToggle}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n handleToggle();\n }\n }}\n className={classNames('group', 'thinking-toggle', styles['thinking-section-thinking-toggle'])}\n >\n <span className={classNames('thinking-section-thinking-toggle-icon-wrap', styles['thinking-section-thinking-toggle-icon-wrap'])}>\n {isThinking ? (\n <>\n <span className={classNames('thinking-section-thinking-ping-ring', styles['thinking-section-thinking-ping-ring'])} />\n <span className={classNames('thinking-section-thinking-dot-active', styles['thinking-section-thinking-dot-active'])} />\n </>\n ) : (\n <span className={classNames('thinking-section-thinking-dot-idle', styles['thinking-section-thinking-dot-idle'])} />\n )}\n </span>\n\n <span\n className={classNames('thinking-section-thinking-status-label', styles['thinking-section-thinking-status-label'],\n isThinking && 'thinking-section-thinking-status-label-active',\n isThinking && styles['thinking-section-thinking-status-label-active'],\n )}\n >\n {statusLabel}\n </span>\n\n <ChevronIcon expanded={expanded} />\n </div>\n\n <div\n className={classNames('thinking-section-thinking-expand-grid', styles['thinking-section-thinking-expand-grid'],\n expanded\n ? classNames('thinking-section-thinking-expand-grid-open', styles['thinking-section-thinking-expand-grid-open'])\n : classNames('thinking-section-thinking-expand-grid-closed', styles['thinking-section-thinking-expand-grid-closed']),\n )}\n >\n <div className={classNames('thinking-section-thinking-expand-inner', styles['thinking-section-thinking-expand-inner'])}>\n {thinking.trim() ? (\n <div ref={thinkingScrollRef} className={classNames('thinking-section-thinking-scroll-area', styles['thinking-section-thinking-scroll-area'])}>\n <div ref={thinkingContentRef} className={classNames('thinking-section-thinking-content', styles['thinking-section-thinking-content'])}>\n <CitationMarkdownContent\n content={thinking}\n citations={citations}\n citationSourceContent={citationSourceContent}\n onCitationClick={onCitationClick}\n deferMermaid={deferMermaid}\n />\n {showThinkingCursor && <span className={classNames('thinking-section-thinking-cursor', styles['thinking-section-thinking-cursor'])} />}\n </div>\n </div>\n ) : isThinking ? (\n <div className={classNames('thinking-section-thinking-empty-cursor-wrap', styles['thinking-section-thinking-empty-cursor-wrap'])}>\n <span className={classNames('thinking-section-thinking-empty-cursor', styles['thinking-section-thinking-empty-cursor'])} />\n </div>\n ) : null}\n </div>\n </div>\n </div>\n );\n};\n\nexport default ThinkingSection;\n"],"names":["ChevronIcon","expanded","jsx","classNames","styles","ThinkingSection","thinking","isThinking","isTyping","citations","citationSourceContent","onCitationClick","deferMermaid","setExpanded","useState","elapsed","setElapsed","startRef","useRef","thinkingScrollRef","thinkingContentRef","useEffect","timer","scrollEl","contentEl","scrollToEnd","observer","showThinkingCursor","statusLabel","handleToggle","prev","jsxs","e","Fragment","CitationMarkdownContent"],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ const n = {
2
+ "thinking-section-thinking-section": "_thinking-section-thinking-section_1qx67_1",
3
+ "thinking-section-thinking-toggle": "_thinking-section-thinking-toggle_1qx67_5",
4
+ "thinking-section-thinking-toggle-icon-wrap": "_thinking-section-thinking-toggle-icon-wrap_1qx67_20",
5
+ "thinking-section-thinking-ping-ring": "_thinking-section-thinking-ping-ring_1qx67_30",
6
+ "thinking-section-thinking-dot-active": "_thinking-section-thinking-dot-active_1qx67_39",
7
+ "thinking-section-thinking-dot-idle": "_thinking-section-thinking-dot-idle_1qx67_47",
8
+ "thinking-section-thinking-status-label": "_thinking-section-thinking-status-label_1qx67_58",
9
+ "thinking-section-thinking-status-label-active": "_thinking-section-thinking-status-label-active_1qx67_63",
10
+ "thinking-section-thinking-chevron": "_thinking-section-thinking-chevron_1qx67_67",
11
+ "thinking-section-thinking-chevron-expanded": "_thinking-section-thinking-chevron-expanded_1qx67_73",
12
+ "thinking-section-thinking-expand-grid": "_thinking-section-thinking-expand-grid_1qx67_77",
13
+ "thinking-section-thinking-expand-grid-open": "_thinking-section-thinking-expand-grid-open_1qx67_82",
14
+ "thinking-section-thinking-expand-grid-closed": "_thinking-section-thinking-expand-grid-closed_1qx67_86",
15
+ "thinking-section-thinking-expand-inner": "_thinking-section-thinking-expand-inner_1qx67_90",
16
+ "thinking-section-thinking-scroll-area": "_thinking-section-thinking-scroll-area_1qx67_94",
17
+ "thinking-section-thinking-content": "_thinking-section-thinking-content_1qx67_101",
18
+ "thinking-section-thinking-cursor": "_thinking-section-thinking-cursor_1qx67_127",
19
+ "thinking-section-thinking-empty-cursor-wrap": "_thinking-section-thinking-empty-cursor-wrap_1qx67_137",
20
+ "thinking-section-thinking-empty-cursor": "_thinking-section-thinking-empty-cursor_1qx67_137"
21
+ };
22
+ export {
23
+ n as default
24
+ };
25
+ //# sourceMappingURL=style.module.scss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;"}
@@ -1,7 +1,15 @@
1
+ export { default as CitationInlineBadge } from './CitationInlineBadge';
2
+ export type { CitationInlineBadgeProps } from './CitationInlineBadge';
3
+ export { default as CitationContent } from './CitationContent';
4
+ export type { CitationContentProps } from './CitationContent';
1
5
  export { default as CitationMarkdownContent } from './CitationMarkdownContent';
2
6
  export type { CitationMarkdownContentProps } from './CitationMarkdownContent';
3
7
  export { default as ChatInput } from './ChatInput';
4
8
  export type { ChatInputProps } from './ChatInput';
9
+ export { default as ChatPanel } from './ChatPanel';
10
+ export type { ChatPanelProps } from './ChatPanel';
11
+ export { default as ChatSuggestionRow } from './ChatSuggestionRow';
12
+ export type { ChatSuggestionRowProps } from './ChatSuggestionRow';
5
13
  export { default as CitationPanel } from './CitationPanel';
6
14
  export type { CitationPanelProps } from './CitationPanel';
7
15
  export { default as MessageEditPopover } from './MessageEditPopover';
@@ -10,3 +18,7 @@ export { default as MessageItem } from './MessageItem';
10
18
  export type { MessageItemProps } from './MessageItem';
11
19
  export { default as MessageActions } from './MessageActions';
12
20
  export type { MessageActionsProps, MessageActionItem } from './MessageActions';
21
+ export { default as MermaidBlock } from './MermaidBlock';
22
+ export type { MermaidBlockProps } from './MermaidBlock';
23
+ export { default as ThinkingSection } from './ThinkingSection';
24
+ export type { ThinkingSectionProps } from './ThinkingSection';
@@ -0,0 +1,37 @@
1
+ import { jsxs as c, jsx as e } from "react/jsx-runtime";
2
+ import { Form as l, Input as a, Select as d } from "antd";
3
+ const p = ({ form: s, datasets: m, initialValues: o }) => {
4
+ const n = m.map((r) => ({ label: r.name, value: r.id }));
5
+ return /* @__PURE__ */ c(l, { form: s, layout: "vertical", initialValues: o, children: [
6
+ /* @__PURE__ */ e(
7
+ l.Item,
8
+ {
9
+ name: "name",
10
+ label: "助手名称",
11
+ rules: [
12
+ { required: !0, message: "请输入助手名称" },
13
+ { max: 64, message: "名称不超过 64 个字符" }
14
+ ],
15
+ children: /* @__PURE__ */ e(a, { placeholder: "请输入问答助手名称" })
16
+ }
17
+ ),
18
+ /* @__PURE__ */ e(l.Item, { name: "description", label: "描述", children: /* @__PURE__ */ e(a.TextArea, { rows: 2, placeholder: "请输入助手描述(可选)" }) }),
19
+ /* @__PURE__ */ e(l.Item, { name: "dataset_ids", label: "关联知识库", children: /* @__PURE__ */ e(
20
+ d,
21
+ {
22
+ mode: "multiple",
23
+ options: n,
24
+ placeholder: "请选择关联的知识库(可多选)",
25
+ allowClear: !0,
26
+ showSearch: !0,
27
+ filterOption: (r, t) => String((t == null ? void 0 : t.label) ?? "").toLowerCase().includes(r.toLowerCase())
28
+ }
29
+ ) }),
30
+ /* @__PURE__ */ e(l.Item, { name: "prologue", label: "开场白", children: /* @__PURE__ */ e(a.TextArea, { rows: 2, placeholder: "用户进入对话时显示的开场内容(可选)" }) }),
31
+ /* @__PURE__ */ e(l.Item, { name: "empty_response", label: "无答案回复", children: /* @__PURE__ */ e(a, { placeholder: "检索不到内容时的默认回复(可选)" }) })
32
+ ] });
33
+ };
34
+ export {
35
+ p as default
36
+ };
37
+ //# sourceMappingURL=Form.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Form.js","sources":["../../../../../src/components/AgentHub/Chat/Form/Form.tsx"],"sourcesContent":["import type { Dataset } from '@/components/AgentHub/types';\nimport type { FormInstance } from 'antd';\nimport { Form, Input, Select } from 'antd';\nimport React from 'react';\n\nexport interface ChatAssistantFormProps {\n form: FormInstance;\n datasets: Dataset[];\n initialValues?: {\n name?: string;\n description?: string;\n dataset_ids?: string[];\n prologue?: string;\n empty_response?: string;\n };\n}\n\nconst ChatAssistantForm: React.FC<ChatAssistantFormProps> = ({ form, datasets, initialValues }) => {\n const kbOptions = datasets.map((d) => ({ label: d.name, value: d.id }));\n\n return (\n <Form form={form} layout=\"vertical\" initialValues={initialValues}>\n <Form.Item\n name=\"name\"\n label=\"助手名称\"\n rules={[\n { required: true, message: '请输入助手名称' },\n { max: 64, message: '名称不超过 64 个字符' },\n ]}\n >\n <Input placeholder=\"请输入问答助手名称\" />\n </Form.Item>\n\n <Form.Item name=\"description\" label=\"描述\">\n <Input.TextArea rows={2} placeholder=\"请输入助手描述(可选)\" />\n </Form.Item>\n\n <Form.Item name=\"dataset_ids\" label=\"关联知识库\">\n <Select\n mode=\"multiple\"\n options={kbOptions}\n placeholder=\"请选择关联的知识库(可多选)\"\n allowClear\n showSearch\n filterOption={(input, option) =>\n String(option?.label ?? '')\n .toLowerCase()\n .includes(input.toLowerCase())\n }\n />\n </Form.Item>\n\n <Form.Item name=\"prologue\" label=\"开场白\">\n <Input.TextArea rows={2} placeholder=\"用户进入对话时显示的开场内容(可选)\" />\n </Form.Item>\n\n <Form.Item name=\"empty_response\" label=\"无答案回复\">\n <Input placeholder=\"检索不到内容时的默认回复(可选)\" />\n </Form.Item>\n </Form>\n );\n};\n\nexport default ChatAssistantForm;\n"],"names":["ChatAssistantForm","form","datasets","initialValues","kbOptions","d","jsxs","Form","jsx","Input","Select","input","option"],"mappings":";;AAiBA,MAAMA,IAAsD,CAAC,EAAE,MAAAC,GAAM,UAAAC,GAAU,eAAAC,QAAoB;AACjG,QAAMC,IAAYF,EAAS,IAAI,CAACG,OAAO,EAAE,OAAOA,EAAE,MAAM,OAAOA,EAAE,GAAA,EAAK;AAEtE,SACE,gBAAAC,EAACC,GAAA,EAAK,MAAAN,GAAY,QAAO,YAAW,eAAAE,GAClC,UAAA;AAAA,IAAA,gBAAAK;AAAA,MAACD,EAAK;AAAA,MAAL;AAAA,QACC,MAAK;AAAA,QACL,OAAM;AAAA,QACN,OAAO;AAAA,UACL,EAAE,UAAU,IAAM,SAAS,UAAA;AAAA,UAC3B,EAAE,KAAK,IAAI,SAAS,eAAA;AAAA,QAAe;AAAA,QAGrC,UAAA,gBAAAC,EAACC,GAAA,EAAM,aAAY,YAAA,CAAY;AAAA,MAAA;AAAA,IAAA;AAAA,sBAGhCF,EAAK,MAAL,EAAU,MAAK,eAAc,OAAM,MAClC,UAAA,gBAAAC,EAACC,EAAM,UAAN,EAAe,MAAM,GAAG,aAAY,eAAc,GACrD;AAAA,sBAECF,EAAK,MAAL,EAAU,MAAK,eAAc,OAAM,SAClC,UAAA,gBAAAC;AAAA,MAACE;AAAA,MAAA;AAAA,QACC,MAAK;AAAA,QACL,SAASN;AAAA,QACT,aAAY;AAAA,QACZ,YAAU;AAAA,QACV,YAAU;AAAA,QACV,cAAc,CAACO,GAAOC,MACpB,QAAOA,KAAA,gBAAAA,EAAQ,UAAS,EAAE,EACvB,YAAA,EACA,SAASD,EAAM,aAAa;AAAA,MAAA;AAAA,IAAA,GAGrC;AAAA,sBAECJ,EAAK,MAAL,EAAU,MAAK,YAAW,OAAM,OAC/B,UAAA,gBAAAC,EAACC,EAAM,UAAN,EAAe,MAAM,GAAG,aAAY,sBAAqB,GAC5D;AAAA,IAEA,gBAAAD,EAACD,EAAK,MAAL,EAAU,MAAK,kBAAiB,OAAM,SACrC,UAAA,gBAAAC,EAACC,GAAA,EAAM,aAAY,mBAAA,CAAmB,EAAA,CACxC;AAAA,EAAA,GACF;AAEJ;"}