@hkyhy/marsun-components-core 0.1.115 → 0.1.116
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/agent-hub.js +131 -126
- package/dist/agent-hub.js.map +1 -1
- package/dist/components/AgentHub/Chat/Detail/ChatAgentFab/index.d.ts +1 -1
- package/dist/components/AgentHub/Chat/Detail/ChatAgentFab/index.js.map +1 -1
- package/dist/components/AgentHub/Chat/Detail/ChatAgentFab/style.module.scss.js +9 -9
- package/dist/components/AgentHub/Chat/Detail/ChatAgentFabLayout/index.d.ts +2 -2
- package/dist/components/AgentHub/Chat/Detail/ChatAgentFabLayout/index.js.map +1 -1
- package/dist/components/AgentHub/Chat/Detail/ChatAgentFabLayout/style.module.scss.js +3 -3
- package/dist/components/AgentHub/Chat/Detail/ChatCapabilityStrip/index.d.ts +20 -0
- package/dist/components/AgentHub/Chat/Detail/ChatCapabilityStrip/index.js +155 -0
- package/dist/components/AgentHub/Chat/Detail/ChatCapabilityStrip/index.js.map +1 -0
- package/dist/components/AgentHub/Chat/Detail/ChatCapabilityStrip/style.module.scss.js +19 -0
- package/dist/components/AgentHub/Chat/Detail/ChatCapabilityStrip/style.module.scss.js.map +1 -0
- package/dist/components/AgentHub/Chat/Detail/ChatPanel/index.d.ts +2 -0
- package/dist/components/AgentHub/Chat/Detail/ChatPanel/index.js +59 -55
- package/dist/components/AgentHub/Chat/Detail/ChatPanel/index.js.map +1 -1
- package/dist/components/AgentHub/Chat/Detail/ChatPanelHeaderTools/index.d.ts +19 -0
- package/dist/components/AgentHub/Chat/Detail/ChatPanelHeaderTools/index.js +122 -0
- package/dist/components/AgentHub/Chat/Detail/ChatPanelHeaderTools/index.js.map +1 -0
- package/dist/components/AgentHub/Chat/Detail/ChatPanelHeaderTools/style.module.scss.js +8 -0
- package/dist/components/AgentHub/Chat/Detail/ChatPanelHeaderTools/style.module.scss.js.map +1 -0
- package/dist/components/AgentHub/Chat/Detail/index.d.ts +4 -0
- package/dist/components/Audit/AuditLogList.d.ts +2 -0
- package/dist/components/Audit/AuditLogList.js +179 -170
- package/dist/components/Audit/AuditLogList.js.map +1 -1
- package/dist/components/Audit/labels.d.ts +6 -2
- package/dist/components/Audit/labels.js +19 -16
- package/dist/components/Audit/labels.js.map +1 -1
- package/dist/components/Audit/labels.json.d.ts +47 -1
- package/dist/components/Audit/labels.json.js +124 -32
- package/dist/components/Audit/labels.json.js.map +1 -1
- package/dist/components/Audit/style.module.scss.js +26 -22
- package/dist/components/Audit/style.module.scss.js.map +1 -1
- package/dist/components/Icons/ZoomIn.d.ts +1 -0
- package/dist/components/Icons/ZoomIn.js +7 -0
- package/dist/components/Icons/ZoomIn.js.map +1 -0
- package/dist/components/Icons/ZoomOut.d.ts +1 -0
- package/dist/components/Icons/ZoomOut.js +7 -0
- package/dist/components/Icons/ZoomOut.js.map +1 -0
- package/dist/components/Icons/index.d.ts +2 -0
- package/dist/components/Icons/registry.d.ts +1 -1
- package/dist/components/Icons/registry.js +58 -52
- package/dist/components/Icons/registry.js.map +1 -1
- package/dist/components/Stat/StatCardList.js +16 -16
- package/dist/components/Stat/StatCardList.js.map +1 -1
- package/dist/components/Tools/ActionTracking/ActionTrackingShell.d.ts +27 -0
- package/dist/components/Tools/ActionTracking/ActionTrackingShell.js +43 -0
- package/dist/components/Tools/ActionTracking/ActionTrackingShell.js.map +1 -0
- package/dist/components/Tools/ActionTracking/index.d.ts +2 -0
- package/dist/components/Tools/ActionTracking/style.module.scss.js +7 -0
- package/dist/components/Tools/ActionTracking/style.module.scss.js.map +1 -0
- package/dist/components/Tools/index.d.ts +2 -0
- package/dist/index.js +787 -776
- package/dist/index.js.map +1 -1
- package/dist/marsun-components-core.css +1 -1
- package/dist/styles/global.css +1 -1
- package/package.json +1 -1
|
@@ -11,6 +11,8 @@ export interface ChatPanelProps {
|
|
|
11
11
|
headerActions?: ReactNode;
|
|
12
12
|
headerExtra?: ReactNode;
|
|
13
13
|
beforeInput?: ReactNode;
|
|
14
|
+
/** 消息列表内、messages 之后渲染,参与同一滚动(如追问建议) */
|
|
15
|
+
afterMessages?: ReactNode;
|
|
14
16
|
/** API 返回的推荐问/追问列表 */
|
|
15
17
|
followUpItems?: string[];
|
|
16
18
|
/** 无用户消息且无 followUpItems 时的兜底推荐 */
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { jsxs as n, jsx as a, Fragment as
|
|
2
|
-
import { Button as
|
|
3
|
-
import { useRef as j, useMemo as
|
|
1
|
+
import { jsxs as n, jsx as a, Fragment as w } from "react/jsx-runtime";
|
|
2
|
+
import { Button as S } from "antd";
|
|
3
|
+
import { useRef as j, useMemo as L, useCallback as M } from "react";
|
|
4
4
|
import u from "classnames";
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import
|
|
5
|
+
import U from "../ChatFollowUpSuggestions/index.js";
|
|
6
|
+
import I from "../ChatInput/index.js";
|
|
7
|
+
import ll from "../MessageItem/index.js";
|
|
8
8
|
import l from "./style.module.scss.js";
|
|
9
|
-
import { useAutoScrollToBottom as
|
|
10
|
-
import
|
|
11
|
-
const
|
|
9
|
+
import { useAutoScrollToBottom as al } from "../../hooks/useAutoScrollToBottom.js";
|
|
10
|
+
import el from "../../../../VirtualScrollbar/VirtualScrollbar/index.js";
|
|
11
|
+
const dl = ({
|
|
12
12
|
title: d,
|
|
13
13
|
subtitle: m,
|
|
14
14
|
showHeader: D = !0,
|
|
@@ -17,34 +17,35 @@ const ul = ({
|
|
|
17
17
|
headerActions: N,
|
|
18
18
|
headerExtra: v,
|
|
19
19
|
beforeInput: y,
|
|
20
|
+
afterMessages: F,
|
|
20
21
|
followUpItems: c,
|
|
21
22
|
starterItems: t,
|
|
22
23
|
onFollowUpSelect: h,
|
|
23
24
|
onSendMessage: r,
|
|
24
25
|
followUpLoading: C = !1,
|
|
25
|
-
followUpDefaultExpanded:
|
|
26
|
-
starterTitle:
|
|
27
|
-
followUpTitle:
|
|
26
|
+
followUpDefaultExpanded: T = !0,
|
|
27
|
+
starterTitle: z = "推荐问",
|
|
28
|
+
followUpTitle: B = "推荐追问",
|
|
28
29
|
messages: i,
|
|
29
|
-
showEmptyHint:
|
|
30
|
-
emptyPlaceholder:
|
|
31
|
-
onCitationClick:
|
|
32
|
-
onEditMessage:
|
|
33
|
-
onResendMessage:
|
|
34
|
-
editDisabled:
|
|
35
|
-
inputValue:
|
|
30
|
+
showEmptyHint: E,
|
|
31
|
+
emptyPlaceholder: H = "点击上方建议,或直接输入问题",
|
|
32
|
+
onCitationClick: P,
|
|
33
|
+
onEditMessage: V,
|
|
34
|
+
onResendMessage: q,
|
|
35
|
+
editDisabled: A,
|
|
36
|
+
inputValue: G,
|
|
36
37
|
inputLoading: b = !1,
|
|
37
|
-
onInputChange:
|
|
38
|
-
onSend:
|
|
39
|
-
onStop:
|
|
40
|
-
inputPlaceholder:
|
|
41
|
-
showInput:
|
|
42
|
-
className:
|
|
38
|
+
onInputChange: J,
|
|
39
|
+
onSend: K,
|
|
40
|
+
onStop: O,
|
|
41
|
+
inputPlaceholder: Q,
|
|
42
|
+
showInput: W = !0,
|
|
43
|
+
className: X
|
|
43
44
|
}) => {
|
|
44
|
-
const g = j(null), k = j(null), { handleScroll:
|
|
45
|
+
const g = j(null), k = j(null), { handleScroll: Y } = al(g, k, {
|
|
45
46
|
enabled: i.length > 0,
|
|
46
47
|
trigger: i
|
|
47
|
-
}), s = i.some((e) => e.role === "user"), x =
|
|
48
|
+
}), s = i.some((e) => e.role === "user"), x = L(() => c != null && c.length ? c : !s && (t != null && t.length) ? t : [], [c, s, t]), o = x.length > 0 && !C && (typeof h == "function" || typeof r == "function"), Z = s ? B : z, _ = E ?? (!o && !C), $ = M(
|
|
48
49
|
(e) => {
|
|
49
50
|
if (h) {
|
|
50
51
|
h(e);
|
|
@@ -53,20 +54,20 @@ const ul = ({
|
|
|
53
54
|
r == null || r(e);
|
|
54
55
|
},
|
|
55
56
|
[h, r]
|
|
56
|
-
), R = y || o ? /* @__PURE__ */ n(
|
|
57
|
+
), R = y || o ? /* @__PURE__ */ n(w, { children: [
|
|
57
58
|
y,
|
|
58
59
|
o ? /* @__PURE__ */ a(
|
|
59
|
-
|
|
60
|
+
U,
|
|
60
61
|
{
|
|
61
62
|
className: l["chat-panel-follow-up"],
|
|
62
63
|
items: x,
|
|
63
|
-
title:
|
|
64
|
-
defaultExpanded:
|
|
65
|
-
onSelect:
|
|
64
|
+
title: Z,
|
|
65
|
+
defaultExpanded: T,
|
|
66
|
+
onSelect: $
|
|
66
67
|
}
|
|
67
68
|
) : null
|
|
68
69
|
] }) : null;
|
|
69
|
-
return /* @__PURE__ */ n("div", { className: u("chat-panel", l["chat-panel"],
|
|
70
|
+
return /* @__PURE__ */ n("div", { className: u("chat-panel", l["chat-panel"], X), children: [
|
|
70
71
|
D ? /* @__PURE__ */ n("div", { className: u("chat-panel-head", l["chat-panel-head"]), children: [
|
|
71
72
|
/* @__PURE__ */ n("div", { className: l["chat-panel-head-main"], children: [
|
|
72
73
|
/* @__PURE__ */ n("div", { children: [
|
|
@@ -75,47 +76,50 @@ const ul = ({
|
|
|
75
76
|
] }),
|
|
76
77
|
N || f && p ? /* @__PURE__ */ n("div", { className: l["chat-panel-head-actions"], children: [
|
|
77
78
|
N,
|
|
78
|
-
f && p ? /* @__PURE__ */ a(
|
|
79
|
+
f && p ? /* @__PURE__ */ a(S, { type: "link", size: "small", onClick: p, children: "收起" }) : null
|
|
79
80
|
] }) : null
|
|
80
81
|
] }),
|
|
81
82
|
v ? /* @__PURE__ */ a("div", { className: l["chat-panel-head-extra"], children: v }) : null
|
|
82
83
|
] }) : null,
|
|
83
84
|
/* @__PURE__ */ a(
|
|
84
|
-
|
|
85
|
+
el,
|
|
85
86
|
{
|
|
86
87
|
className: u("chat-panel-messages", l["chat-panel-messages"]),
|
|
87
88
|
wrapperClassName: l["chat-panel-messages-wrapper"],
|
|
88
|
-
onScroll:
|
|
89
|
+
onScroll: Y,
|
|
89
90
|
ref: g,
|
|
90
|
-
children: /* @__PURE__ */
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
91
|
+
children: /* @__PURE__ */ n("div", { ref: k, children: [
|
|
92
|
+
i.length === 0 && _ ? /* @__PURE__ */ a("p", { className: l["chat-panel-empty"], children: H }) : i.map((e) => /* @__PURE__ */ a(
|
|
93
|
+
ll,
|
|
94
|
+
{
|
|
95
|
+
message: e,
|
|
96
|
+
onCitationClick: P,
|
|
97
|
+
onEditMessage: V,
|
|
98
|
+
onResendMessage: q,
|
|
99
|
+
editDisabled: A || b
|
|
100
|
+
},
|
|
101
|
+
e.id
|
|
102
|
+
)),
|
|
103
|
+
F
|
|
104
|
+
] })
|
|
101
105
|
}
|
|
102
106
|
),
|
|
103
107
|
R ? /* @__PURE__ */ a("div", { className: l["chat-panel-before-input"], children: R }) : null,
|
|
104
|
-
|
|
105
|
-
|
|
108
|
+
W ? /* @__PURE__ */ a("div", { className: l["chat-panel-input"], children: /* @__PURE__ */ a(
|
|
109
|
+
I,
|
|
106
110
|
{
|
|
107
111
|
embedded: !0,
|
|
108
|
-
value:
|
|
112
|
+
value: G,
|
|
109
113
|
loading: b,
|
|
110
|
-
onChange:
|
|
111
|
-
onSend:
|
|
112
|
-
onStop:
|
|
113
|
-
placeholder:
|
|
114
|
+
onChange: J,
|
|
115
|
+
onSend: K,
|
|
116
|
+
onStop: O,
|
|
117
|
+
placeholder: Q
|
|
114
118
|
}
|
|
115
119
|
) }) : null
|
|
116
120
|
] });
|
|
117
121
|
};
|
|
118
122
|
export {
|
|
119
|
-
|
|
123
|
+
dl as default
|
|
120
124
|
};
|
|
121
125
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../../src/components/AgentHub/Chat/Detail/ChatPanel/index.tsx"],"sourcesContent":["import type { ChatMessage } from '@/components/AgentHub/types';\nimport { VirtualScrollbar } from '@/components/VirtualScrollbar';\nimport { Button } from 'antd';\nimport React, { useCallback, useMemo, useRef, type ReactNode } from 'react';\nimport classNames from 'classnames';\nimport { useAutoScrollToBottom } from '../../hooks';\nimport ChatFollowUpSuggestions from '../ChatFollowUpSuggestions';\nimport ChatInput from '../ChatInput';\nimport type { ChatInputProps } from '../ChatInput';\nimport MessageItem from '../MessageItem';\nimport type { MessageItemProps } from '../MessageItem';\nimport styles from './style.module.scss';\n\nexport interface ChatPanelProps {\n title?: string;\n subtitle?: string;\n showHeader?: boolean;\n showCloseButton?: boolean;\n onClose?: () => void;\n headerActions?: ReactNode;\n headerExtra?: ReactNode;\n beforeInput?: ReactNode;\n\n /** API 返回的推荐问/追问列表 */\n followUpItems?: string[];\n /** 无用户消息且无 followUpItems 时的兜底推荐 */\n starterItems?: string[];\n /** 点击推荐项(完全自定义,优先于 onSendMessage) */\n onFollowUpSelect?: (text: string) => void;\n /** 点击推荐项直接发送(推荐问/追问默认行为) */\n onSendMessage?: (text: string) => void;\n /** true 时隐藏推荐区(如会话加载、发送中) */\n followUpLoading?: boolean;\n followUpDefaultExpanded?: boolean;\n starterTitle?: string;\n followUpTitle?: string;\n\n messages: ChatMessage[];\n showEmptyHint?: boolean;\n emptyPlaceholder?: string;\n onCitationClick?: MessageItemProps['onCitationClick'];\n onEditMessage?: MessageItemProps['onEditMessage'];\n onResendMessage?: MessageItemProps['onResendMessage'];\n editDisabled?: boolean;\n\n inputValue: string;\n inputLoading?: boolean;\n onInputChange: (v: string) => void;\n onSend: () => void;\n onStop?: ChatInputProps['onStop'];\n inputPlaceholder?: string;\n showInput?: boolean;\n\n className?: string;\n}\n\nconst ChatPanel: React.FC<ChatPanelProps> = ({\n title,\n subtitle,\n showHeader = true,\n showCloseButton = false,\n onClose,\n headerActions,\n headerExtra,\n beforeInput,\n followUpItems,\n starterItems,\n onFollowUpSelect,\n onSendMessage,\n followUpLoading = false,\n followUpDefaultExpanded = true,\n starterTitle = '推荐问',\n followUpTitle = '推荐追问',\n messages,\n showEmptyHint,\n emptyPlaceholder = '点击上方建议,或直接输入问题',\n onCitationClick,\n onEditMessage,\n onResendMessage,\n editDisabled,\n inputValue,\n inputLoading = false,\n onInputChange,\n onSend,\n onStop,\n inputPlaceholder,\n showInput = true,\n className,\n}) => {\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n const messagesContentRef = useRef<HTMLDivElement>(null);\n\n const { handleScroll } = useAutoScrollToBottom(scrollContainerRef, messagesContentRef, {\n enabled: messages.length > 0,\n trigger: messages,\n });\n\n const hasUserMessages = messages.some((message) => message.role === 'user');\n\n const effectiveFollowUpItems = useMemo(() => {\n if (followUpItems?.length) return followUpItems;\n if (!hasUserMessages && starterItems?.length) return starterItems;\n return [];\n }, [followUpItems, hasUserMessages, starterItems]);\n\n const showFollowUp =\n effectiveFollowUpItems.length > 0 &&\n !followUpLoading &&\n (typeof onFollowUpSelect === 'function' || typeof onSendMessage === 'function');\n\n const followUpDisplayTitle = hasUserMessages ? followUpTitle : starterTitle;\n\n const effectiveShowEmptyHint = showEmptyHint ?? (!showFollowUp && !followUpLoading);\n\n const handleFollowUpSelect = useCallback(\n (text: string) => {\n if (onFollowUpSelect) {\n onFollowUpSelect(text);\n return;\n }\n onSendMessage?.(text);\n },\n [onFollowUpSelect, onSendMessage],\n );\n\n const beforeInputContent =\n beforeInput || showFollowUp ? (\n <>\n {beforeInput}\n {showFollowUp ? (\n <ChatFollowUpSuggestions\n className={styles['chat-panel-follow-up']}\n items={effectiveFollowUpItems}\n title={followUpDisplayTitle}\n defaultExpanded={followUpDefaultExpanded}\n onSelect={handleFollowUpSelect}\n />\n ) : null}\n </>\n ) : null;\n\n return (\n <div className={classNames('chat-panel', styles['chat-panel'], className)}>\n {showHeader ? (\n <div className={classNames('chat-panel-head', styles['chat-panel-head'])}>\n <div className={styles['chat-panel-head-main']}>\n <div>\n {title ? <strong className={styles['chat-panel-title']}>{title}</strong> : null}\n {subtitle ? <span className={styles['chat-panel-subtitle']}>{subtitle}</span> : null}\n </div>\n {headerActions || (showCloseButton && onClose) ? (\n <div className={styles['chat-panel-head-actions']}>\n {headerActions}\n {showCloseButton && onClose ? (\n <Button type=\"link\" size=\"small\" onClick={onClose}>\n 收起\n </Button>\n ) : null}\n </div>\n ) : null}\n </div>\n {headerExtra ? (\n <div className={styles['chat-panel-head-extra']}>{headerExtra}</div>\n ) : null}\n </div>\n ) : null}\n\n <VirtualScrollbar\n className={classNames('chat-panel-messages', styles['chat-panel-messages'])}\n wrapperClassName={styles['chat-panel-messages-wrapper']}\n onScroll={handleScroll}\n ref={scrollContainerRef}\n >\n <div ref={messagesContentRef}>\n {messages.length === 0 && effectiveShowEmptyHint ? (\n <p className={styles['chat-panel-empty']}>{emptyPlaceholder}</p>\n ) : (\n messages.map((message) => (\n <MessageItem\n key={message.id}\n message={message}\n onCitationClick={onCitationClick}\n onEditMessage={onEditMessage}\n onResendMessage={onResendMessage}\n editDisabled={editDisabled || inputLoading}\n />\n ))\n )}\n </div>\n </VirtualScrollbar>\n\n {beforeInputContent ? (\n <div className={styles['chat-panel-before-input']}>{beforeInputContent}</div>\n ) : null}\n\n {showInput ? (\n <div className={styles['chat-panel-input']}>\n <ChatInput\n embedded\n value={inputValue}\n loading={inputLoading}\n onChange={onInputChange}\n onSend={onSend}\n onStop={onStop}\n placeholder={inputPlaceholder}\n />\n </div>\n ) : null}\n </div>\n );\n};\n\nexport default ChatPanel;\n"],"names":["ChatPanel","title","subtitle","showHeader","showCloseButton","onClose","headerActions","headerExtra","beforeInput","followUpItems","starterItems","onFollowUpSelect","onSendMessage","followUpLoading","followUpDefaultExpanded","starterTitle","followUpTitle","messages","showEmptyHint","emptyPlaceholder","onCitationClick","onEditMessage","onResendMessage","editDisabled","inputValue","inputLoading","onInputChange","onSend","onStop","inputPlaceholder","showInput","className","scrollContainerRef","useRef","messagesContentRef","handleScroll","useAutoScrollToBottom","hasUserMessages","message","effectiveFollowUpItems","useMemo","showFollowUp","followUpDisplayTitle","effectiveShowEmptyHint","handleFollowUpSelect","useCallback","text","beforeInputContent","jsxs","Fragment","jsx","ChatFollowUpSuggestions","styles","classNames","Button","VirtualScrollbar","MessageItem","ChatInput"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../../src/components/AgentHub/Chat/Detail/ChatPanel/index.tsx"],"sourcesContent":["import type { ChatMessage } from '@/components/AgentHub/types';\nimport { VirtualScrollbar } from '@/components/VirtualScrollbar';\nimport { Button } from 'antd';\nimport React, { useCallback, useMemo, useRef, type ReactNode } from 'react';\nimport classNames from 'classnames';\nimport { useAutoScrollToBottom } from '../../hooks';\nimport ChatFollowUpSuggestions from '../ChatFollowUpSuggestions';\nimport ChatInput from '../ChatInput';\nimport type { ChatInputProps } from '../ChatInput';\nimport MessageItem from '../MessageItem';\nimport type { MessageItemProps } from '../MessageItem';\nimport styles from './style.module.scss';\n\nexport interface ChatPanelProps {\n title?: string;\n subtitle?: string;\n showHeader?: boolean;\n showCloseButton?: boolean;\n onClose?: () => void;\n headerActions?: ReactNode;\n headerExtra?: ReactNode;\n beforeInput?: ReactNode;\n /** 消息列表内、messages 之后渲染,参与同一滚动(如追问建议) */\n afterMessages?: ReactNode;\n\n /** API 返回的推荐问/追问列表 */\n followUpItems?: string[];\n /** 无用户消息且无 followUpItems 时的兜底推荐 */\n starterItems?: string[];\n /** 点击推荐项(完全自定义,优先于 onSendMessage) */\n onFollowUpSelect?: (text: string) => void;\n /** 点击推荐项直接发送(推荐问/追问默认行为) */\n onSendMessage?: (text: string) => void;\n /** true 时隐藏推荐区(如会话加载、发送中) */\n followUpLoading?: boolean;\n followUpDefaultExpanded?: boolean;\n starterTitle?: string;\n followUpTitle?: string;\n\n messages: ChatMessage[];\n showEmptyHint?: boolean;\n emptyPlaceholder?: string;\n onCitationClick?: MessageItemProps['onCitationClick'];\n onEditMessage?: MessageItemProps['onEditMessage'];\n onResendMessage?: MessageItemProps['onResendMessage'];\n editDisabled?: boolean;\n\n inputValue: string;\n inputLoading?: boolean;\n onInputChange: (v: string) => void;\n onSend: () => void;\n onStop?: ChatInputProps['onStop'];\n inputPlaceholder?: string;\n showInput?: boolean;\n\n className?: string;\n}\n\nconst ChatPanel: React.FC<ChatPanelProps> = ({\n title,\n subtitle,\n showHeader = true,\n showCloseButton = false,\n onClose,\n headerActions,\n headerExtra,\n beforeInput,\n afterMessages,\n followUpItems,\n starterItems,\n onFollowUpSelect,\n onSendMessage,\n followUpLoading = false,\n followUpDefaultExpanded = true,\n starterTitle = '推荐问',\n followUpTitle = '推荐追问',\n messages,\n showEmptyHint,\n emptyPlaceholder = '点击上方建议,或直接输入问题',\n onCitationClick,\n onEditMessage,\n onResendMessage,\n editDisabled,\n inputValue,\n inputLoading = false,\n onInputChange,\n onSend,\n onStop,\n inputPlaceholder,\n showInput = true,\n className,\n}) => {\n const scrollContainerRef = useRef<HTMLDivElement>(null);\n const messagesContentRef = useRef<HTMLDivElement>(null);\n\n const { handleScroll } = useAutoScrollToBottom(scrollContainerRef, messagesContentRef, {\n enabled: messages.length > 0,\n trigger: messages,\n });\n\n const hasUserMessages = messages.some((message) => message.role === 'user');\n\n const effectiveFollowUpItems = useMemo(() => {\n if (followUpItems?.length) return followUpItems;\n if (!hasUserMessages && starterItems?.length) return starterItems;\n return [];\n }, [followUpItems, hasUserMessages, starterItems]);\n\n const showFollowUp =\n effectiveFollowUpItems.length > 0 &&\n !followUpLoading &&\n (typeof onFollowUpSelect === 'function' || typeof onSendMessage === 'function');\n\n const followUpDisplayTitle = hasUserMessages ? followUpTitle : starterTitle;\n\n const effectiveShowEmptyHint = showEmptyHint ?? (!showFollowUp && !followUpLoading);\n\n const handleFollowUpSelect = useCallback(\n (text: string) => {\n if (onFollowUpSelect) {\n onFollowUpSelect(text);\n return;\n }\n onSendMessage?.(text);\n },\n [onFollowUpSelect, onSendMessage],\n );\n\n const beforeInputContent =\n beforeInput || showFollowUp ? (\n <>\n {beforeInput}\n {showFollowUp ? (\n <ChatFollowUpSuggestions\n className={styles['chat-panel-follow-up']}\n items={effectiveFollowUpItems}\n title={followUpDisplayTitle}\n defaultExpanded={followUpDefaultExpanded}\n onSelect={handleFollowUpSelect}\n />\n ) : null}\n </>\n ) : null;\n\n return (\n <div className={classNames('chat-panel', styles['chat-panel'], className)}>\n {showHeader ? (\n <div className={classNames('chat-panel-head', styles['chat-panel-head'])}>\n <div className={styles['chat-panel-head-main']}>\n <div>\n {title ? <strong className={styles['chat-panel-title']}>{title}</strong> : null}\n {subtitle ? <span className={styles['chat-panel-subtitle']}>{subtitle}</span> : null}\n </div>\n {headerActions || (showCloseButton && onClose) ? (\n <div className={styles['chat-panel-head-actions']}>\n {headerActions}\n {showCloseButton && onClose ? (\n <Button type=\"link\" size=\"small\" onClick={onClose}>\n 收起\n </Button>\n ) : null}\n </div>\n ) : null}\n </div>\n {headerExtra ? (\n <div className={styles['chat-panel-head-extra']}>{headerExtra}</div>\n ) : null}\n </div>\n ) : null}\n\n <VirtualScrollbar\n className={classNames('chat-panel-messages', styles['chat-panel-messages'])}\n wrapperClassName={styles['chat-panel-messages-wrapper']}\n onScroll={handleScroll}\n ref={scrollContainerRef}\n >\n <div ref={messagesContentRef}>\n {messages.length === 0 && effectiveShowEmptyHint ? (\n <p className={styles['chat-panel-empty']}>{emptyPlaceholder}</p>\n ) : (\n messages.map((message) => (\n <MessageItem\n key={message.id}\n message={message}\n onCitationClick={onCitationClick}\n onEditMessage={onEditMessage}\n onResendMessage={onResendMessage}\n editDisabled={editDisabled || inputLoading}\n />\n ))\n )}\n {afterMessages}\n </div>\n </VirtualScrollbar>\n\n {beforeInputContent ? (\n <div className={styles['chat-panel-before-input']}>{beforeInputContent}</div>\n ) : null}\n\n {showInput ? (\n <div className={styles['chat-panel-input']}>\n <ChatInput\n embedded\n value={inputValue}\n loading={inputLoading}\n onChange={onInputChange}\n onSend={onSend}\n onStop={onStop}\n placeholder={inputPlaceholder}\n />\n </div>\n ) : null}\n </div>\n );\n};\n\nexport default ChatPanel;\n"],"names":["ChatPanel","title","subtitle","showHeader","showCloseButton","onClose","headerActions","headerExtra","beforeInput","afterMessages","followUpItems","starterItems","onFollowUpSelect","onSendMessage","followUpLoading","followUpDefaultExpanded","starterTitle","followUpTitle","messages","showEmptyHint","emptyPlaceholder","onCitationClick","onEditMessage","onResendMessage","editDisabled","inputValue","inputLoading","onInputChange","onSend","onStop","inputPlaceholder","showInput","className","scrollContainerRef","useRef","messagesContentRef","handleScroll","useAutoScrollToBottom","hasUserMessages","message","effectiveFollowUpItems","useMemo","showFollowUp","followUpDisplayTitle","effectiveShowEmptyHint","handleFollowUpSelect","useCallback","text","beforeInputContent","jsxs","Fragment","jsx","ChatFollowUpSuggestions","styles","classNames","Button","VirtualScrollbar","MessageItem","ChatInput"],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
export declare const DEFAULT_CHAT_ZOOM_STEPS: readonly [0.2, 0.35, 0.5, 0.7, 0.85, 1, 1.1];
|
|
3
|
+
export type ChatPanelHeaderToolsProps = {
|
|
4
|
+
contentZoom: number;
|
|
5
|
+
zoomSteps?: readonly number[];
|
|
6
|
+
onContentZoomChange: (z: number) => void;
|
|
7
|
+
fullscreen?: boolean;
|
|
8
|
+
onFullscreenChange?: (v: boolean) => void;
|
|
9
|
+
onNewSession?: () => void;
|
|
10
|
+
disableActions?: boolean;
|
|
11
|
+
showZoom?: boolean;
|
|
12
|
+
showNewSession?: boolean;
|
|
13
|
+
showFullscreen?: boolean;
|
|
14
|
+
/** 收起等额外槽位(渲染在工具按钮之后) */
|
|
15
|
+
extra?: ReactNode;
|
|
16
|
+
className?: string;
|
|
17
|
+
};
|
|
18
|
+
declare const ChatPanelHeaderTools: React.FC<ChatPanelHeaderToolsProps>;
|
|
19
|
+
export default ChatPanelHeaderTools;
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { jsxs as n, Fragment as P, jsx as l } from "react/jsx-runtime";
|
|
2
|
+
import { Tooltip as s, Button as m } from "antd";
|
|
3
|
+
import b from "classnames";
|
|
4
|
+
import { useCallback as _ } from "react";
|
|
5
|
+
import p from "./style.module.scss.js";
|
|
6
|
+
import { ZoomOut as j } from "../../../../Icons/ZoomOut.js";
|
|
7
|
+
import { ZoomIn as z } from "../../../../Icons/ZoomIn.js";
|
|
8
|
+
import { Plus as D } from "../../../../Icons/Plus.js";
|
|
9
|
+
import { Minimize2 as E } from "../../../../Icons/Minimize2.js";
|
|
10
|
+
import { Maximize2 as H } from "../../../../Icons/Maximize2.js";
|
|
11
|
+
const I = [0.2, 0.35, 0.5, 0.7, 0.85, 1, 1.1];
|
|
12
|
+
function N(t, a) {
|
|
13
|
+
let r = 0, i = Math.abs(t[0] - a);
|
|
14
|
+
for (let e = 1; e < t.length; e += 1) {
|
|
15
|
+
const o = Math.abs(t[e] - a);
|
|
16
|
+
o < i && (r = e, i = o);
|
|
17
|
+
}
|
|
18
|
+
return r;
|
|
19
|
+
}
|
|
20
|
+
const J = ({
|
|
21
|
+
contentZoom: t,
|
|
22
|
+
zoomSteps: a = I,
|
|
23
|
+
onContentZoomChange: r,
|
|
24
|
+
fullscreen: i = !1,
|
|
25
|
+
onFullscreenChange: e,
|
|
26
|
+
onNewSession: o,
|
|
27
|
+
disableActions: d = !1,
|
|
28
|
+
showZoom: f = !0,
|
|
29
|
+
showNewSession: u = !0,
|
|
30
|
+
showFullscreen: x = !0,
|
|
31
|
+
extra: M,
|
|
32
|
+
className: y
|
|
33
|
+
}) => {
|
|
34
|
+
const c = _(
|
|
35
|
+
(C) => {
|
|
36
|
+
const O = N(a, t), h = a[Math.min(a.length - 1, Math.max(0, O + C))];
|
|
37
|
+
typeof h == "number" && r(h);
|
|
38
|
+
},
|
|
39
|
+
[t, r, a]
|
|
40
|
+
), k = a[0] ?? 0.2, T = a[a.length - 1] ?? 1.1;
|
|
41
|
+
return /* @__PURE__ */ n(
|
|
42
|
+
"div",
|
|
43
|
+
{
|
|
44
|
+
className: b(
|
|
45
|
+
"chat-panel-header-tools",
|
|
46
|
+
"chat-panel-header-icon-actions",
|
|
47
|
+
p["chat-panel-header-tools"],
|
|
48
|
+
y
|
|
49
|
+
),
|
|
50
|
+
children: [
|
|
51
|
+
f ? /* @__PURE__ */ n(P, { children: [
|
|
52
|
+
/* @__PURE__ */ l(s, { title: "缩小对话内容(便于截全图)", children: /* @__PURE__ */ l(
|
|
53
|
+
m,
|
|
54
|
+
{
|
|
55
|
+
type: "text",
|
|
56
|
+
size: "small",
|
|
57
|
+
icon: /* @__PURE__ */ l(j, {}),
|
|
58
|
+
"aria-label": "缩小对话内容",
|
|
59
|
+
disabled: t <= k,
|
|
60
|
+
onClick: () => c(-1)
|
|
61
|
+
}
|
|
62
|
+
) }),
|
|
63
|
+
/* @__PURE__ */ l(s, { title: "重置为 100%", children: /* @__PURE__ */ n(
|
|
64
|
+
"button",
|
|
65
|
+
{
|
|
66
|
+
type: "button",
|
|
67
|
+
className: b(
|
|
68
|
+
"chat-panel-header-tools-zoom-label",
|
|
69
|
+
p["chat-panel-header-tools-zoom-label"]
|
|
70
|
+
),
|
|
71
|
+
"aria-label": `当前缩放 ${Math.round(t * 100)}%`,
|
|
72
|
+
onClick: () => r(1),
|
|
73
|
+
children: [
|
|
74
|
+
Math.round(t * 100),
|
|
75
|
+
"%"
|
|
76
|
+
]
|
|
77
|
+
}
|
|
78
|
+
) }),
|
|
79
|
+
/* @__PURE__ */ l(s, { title: "放大对话内容", children: /* @__PURE__ */ l(
|
|
80
|
+
m,
|
|
81
|
+
{
|
|
82
|
+
type: "text",
|
|
83
|
+
size: "small",
|
|
84
|
+
icon: /* @__PURE__ */ l(z, {}),
|
|
85
|
+
"aria-label": "放大对话内容",
|
|
86
|
+
disabled: t >= T,
|
|
87
|
+
onClick: () => c(1)
|
|
88
|
+
}
|
|
89
|
+
) })
|
|
90
|
+
] }) : null,
|
|
91
|
+
u && o ? /* @__PURE__ */ l(s, { title: "新建会话", children: /* @__PURE__ */ l(
|
|
92
|
+
m,
|
|
93
|
+
{
|
|
94
|
+
type: "text",
|
|
95
|
+
size: "small",
|
|
96
|
+
icon: /* @__PURE__ */ l(D, {}),
|
|
97
|
+
"aria-label": "新建会话",
|
|
98
|
+
disabled: d,
|
|
99
|
+
onClick: o
|
|
100
|
+
}
|
|
101
|
+
) }) : null,
|
|
102
|
+
x && e ? /* @__PURE__ */ l(s, { title: i ? "退出全屏" : "全屏", children: /* @__PURE__ */ l(
|
|
103
|
+
m,
|
|
104
|
+
{
|
|
105
|
+
type: "text",
|
|
106
|
+
size: "small",
|
|
107
|
+
icon: i ? /* @__PURE__ */ l(E, {}) : /* @__PURE__ */ l(H, {}),
|
|
108
|
+
"aria-label": i ? "退出全屏" : "全屏",
|
|
109
|
+
disabled: d,
|
|
110
|
+
onClick: () => e(!i)
|
|
111
|
+
}
|
|
112
|
+
) }) : null,
|
|
113
|
+
M
|
|
114
|
+
]
|
|
115
|
+
}
|
|
116
|
+
);
|
|
117
|
+
};
|
|
118
|
+
export {
|
|
119
|
+
I as DEFAULT_CHAT_ZOOM_STEPS,
|
|
120
|
+
J as default
|
|
121
|
+
};
|
|
122
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../../src/components/AgentHub/Chat/Detail/ChatPanelHeaderTools/index.tsx"],"sourcesContent":["import { Maximize2, Minimize2, Plus, ZoomIn, ZoomOut } from '@/components/Icons';\nimport { Button, Tooltip } from 'antd';\nimport classNames from 'classnames';\nimport { useCallback, type ReactNode } from 'react';\nimport styles from './style.module.scss';\n\nexport const DEFAULT_CHAT_ZOOM_STEPS = [0.2, 0.35, 0.5, 0.7, 0.85, 1, 1.1] as const;\n\nexport type ChatPanelHeaderToolsProps = {\n contentZoom: number;\n zoomSteps?: readonly number[];\n onContentZoomChange: (z: number) => void;\n fullscreen?: boolean;\n onFullscreenChange?: (v: boolean) => void;\n onNewSession?: () => void;\n disableActions?: boolean;\n showZoom?: boolean;\n showNewSession?: boolean;\n showFullscreen?: boolean;\n /** 收起等额外槽位(渲染在工具按钮之后) */\n extra?: ReactNode;\n className?: string;\n};\n\nfunction nearestStepIndex(steps: readonly number[], value: number): number {\n let best = 0;\n let bestDist = Math.abs(steps[0]! - value);\n for (let i = 1; i < steps.length; i += 1) {\n const dist = Math.abs(steps[i]! - value);\n if (dist < bestDist) {\n best = i;\n bestDist = dist;\n }\n }\n return best;\n}\n\nconst ChatPanelHeaderTools: React.FC<ChatPanelHeaderToolsProps> = ({\n contentZoom,\n zoomSteps = DEFAULT_CHAT_ZOOM_STEPS,\n onContentZoomChange,\n fullscreen = false,\n onFullscreenChange,\n onNewSession,\n disableActions = false,\n showZoom = true,\n showNewSession = true,\n showFullscreen = true,\n extra,\n className,\n}) => {\n const bumpZoom = useCallback(\n (dir: -1 | 1) => {\n const idx = nearestStepIndex(zoomSteps, contentZoom);\n const next = zoomSteps[Math.min(zoomSteps.length - 1, Math.max(0, idx + dir))];\n if (typeof next === 'number') onContentZoomChange(next);\n },\n [contentZoom, onContentZoomChange, zoomSteps],\n );\n\n const minZoom = zoomSteps[0] ?? 0.2;\n const maxZoom = zoomSteps[zoomSteps.length - 1] ?? 1.1;\n\n return (\n <div\n className={classNames(\n 'chat-panel-header-tools',\n 'chat-panel-header-icon-actions',\n styles['chat-panel-header-tools'],\n className,\n )}\n >\n {showZoom ? (\n <>\n <Tooltip title=\"缩小对话内容(便于截全图)\">\n <Button\n type=\"text\"\n size=\"small\"\n icon={<ZoomOut />}\n aria-label=\"缩小对话内容\"\n disabled={contentZoom <= minZoom}\n onClick={() => bumpZoom(-1)}\n />\n </Tooltip>\n <Tooltip title=\"重置为 100%\">\n <button\n type=\"button\"\n className={classNames(\n 'chat-panel-header-tools-zoom-label',\n styles['chat-panel-header-tools-zoom-label'],\n )}\n aria-label={`当前缩放 ${Math.round(contentZoom * 100)}%`}\n onClick={() => onContentZoomChange(1)}\n >\n {Math.round(contentZoom * 100)}%\n </button>\n </Tooltip>\n <Tooltip title=\"放大对话内容\">\n <Button\n type=\"text\"\n size=\"small\"\n icon={<ZoomIn />}\n aria-label=\"放大对话内容\"\n disabled={contentZoom >= maxZoom}\n onClick={() => bumpZoom(1)}\n />\n </Tooltip>\n </>\n ) : null}\n {showNewSession && onNewSession ? (\n <Tooltip title=\"新建会话\">\n <Button\n type=\"text\"\n size=\"small\"\n icon={<Plus />}\n aria-label=\"新建会话\"\n disabled={disableActions}\n onClick={onNewSession}\n />\n </Tooltip>\n ) : null}\n {showFullscreen && onFullscreenChange ? (\n <Tooltip title={fullscreen ? '退出全屏' : '全屏'}>\n <Button\n type=\"text\"\n size=\"small\"\n icon={fullscreen ? <Minimize2 /> : <Maximize2 />}\n aria-label={fullscreen ? '退出全屏' : '全屏'}\n disabled={disableActions}\n onClick={() => onFullscreenChange(!fullscreen)}\n />\n </Tooltip>\n ) : null}\n {extra}\n </div>\n );\n};\n\nexport default ChatPanelHeaderTools;\n"],"names":["DEFAULT_CHAT_ZOOM_STEPS","nearestStepIndex","steps","value","best","bestDist","i","dist","ChatPanelHeaderTools","contentZoom","zoomSteps","onContentZoomChange","fullscreen","onFullscreenChange","onNewSession","disableActions","showZoom","showNewSession","showFullscreen","extra","className","bumpZoom","useCallback","dir","idx","next","minZoom","maxZoom","jsxs","classNames","styles","Fragment","jsx","Tooltip","Button","ZoomOut","ZoomIn","Plus","Minimize2","Maximize2"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -8,6 +8,10 @@ export { default as ChatInput } from './ChatInput';
|
|
|
8
8
|
export type { ChatInputProps } from './ChatInput';
|
|
9
9
|
export { default as ChatPanel } from './ChatPanel';
|
|
10
10
|
export type { ChatPanelProps } from './ChatPanel';
|
|
11
|
+
export { default as ChatCapabilityStrip } from './ChatCapabilityStrip';
|
|
12
|
+
export type { ChatCapabilityItem, ChatCapabilityStripProps } from './ChatCapabilityStrip';
|
|
13
|
+
export { default as ChatPanelHeaderTools, DEFAULT_CHAT_ZOOM_STEPS } from './ChatPanelHeaderTools';
|
|
14
|
+
export type { ChatPanelHeaderToolsProps } from './ChatPanelHeaderTools';
|
|
11
15
|
export { default as ChatAgentFab } from './ChatAgentFab';
|
|
12
16
|
export type { ChatAgentFabProps } from './ChatAgentFab';
|
|
13
17
|
export { default as ChatAgentFabLayout } from './ChatAgentFabLayout';
|
|
@@ -16,6 +16,8 @@ export type AuditLogListProps = {
|
|
|
16
16
|
exportLoading?: boolean;
|
|
17
17
|
pagination?: false | object;
|
|
18
18
|
className?: string;
|
|
19
|
+
/** platform 系统列:SSO SystemApp.code → name;缺则回落 systemAppId */
|
|
20
|
+
systemAppNames?: Record<string, string>;
|
|
19
21
|
};
|
|
20
22
|
export declare const AuditStepContent: React.FC<{
|
|
21
23
|
step: AuditStep;
|