@ai-group/chat-sdk 3.7.0 → 3.7.1-alpha10
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/README.md +22 -0
- package/dist/cjs/components/FileGallery/index.js +59 -40
- package/dist/cjs/components/FileGallery/index.js.map +2 -2
- package/dist/cjs/components/FileGallery/styles.d.ts +7 -0
- package/dist/cjs/components/FileGallery/styles.js +78 -0
- package/dist/cjs/components/FileGallery/styles.js.map +2 -2
- package/dist/cjs/components/Sources/components/CarouselCard.d.ts +12 -0
- package/dist/cjs/components/Sources/components/CarouselCard.js +130 -0
- package/dist/cjs/components/Sources/components/CarouselCard.js.map +7 -0
- package/dist/cjs/components/Sources/index.d.ts +5 -0
- package/dist/cjs/components/Sources/index.js +162 -0
- package/dist/cjs/components/Sources/index.js.map +7 -0
- package/dist/cjs/components/Sources/styles.d.ts +59 -0
- package/dist/cjs/components/Sources/styles.js +179 -0
- package/dist/cjs/components/Sources/styles.js.map +7 -0
- package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.d.ts +19 -1
- package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.js +232 -22
- package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.js.map +2 -2
- package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/styles.d.ts +3 -0
- package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/styles.js +83 -0
- package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/styles.js.map +2 -2
- package/dist/cjs/components/XAdkChatbot/index.d.ts +2 -2
- package/dist/cjs/components/XAdkChatbot/index.js +75 -8
- package/dist/cjs/components/XAdkChatbot/index.js.map +2 -2
- package/dist/cjs/components/XAdkChatbot/styles.js +1 -1
- package/dist/cjs/components/XAdkChatbot/styles.js.map +1 -1
- package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.d.ts +7 -2
- package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.js +30 -12
- package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.js.map +2 -2
- package/dist/cjs/components/XAdkProvider/compound/Sender.d.ts +3 -1
- package/dist/cjs/components/XAdkProvider/compound/Sender.js +81 -4
- package/dist/cjs/components/XAdkProvider/compound/Sender.js.map +3 -3
- package/dist/cjs/components/XAdkProvider/compound/styles.d.ts +1 -0
- package/dist/cjs/components/XAdkProvider/compound/styles.js +16 -0
- package/dist/cjs/components/XAdkProvider/compound/styles.js.map +2 -2
- package/dist/cjs/components/XAdkProvider/context/ChatSenderStateContext.d.ts +4 -0
- package/dist/cjs/components/XAdkProvider/context/ChatSenderStateContext.js.map +2 -2
- package/dist/cjs/components/XAdkProvider/context/DefaultLayoutContext.d.ts +9 -0
- package/dist/cjs/components/XAdkProvider/context/DefaultLayoutContext.js +34 -0
- package/dist/cjs/components/XAdkProvider/context/DefaultLayoutContext.js.map +7 -0
- package/dist/cjs/components/XAdkProvider/context/index.d.ts +5 -4
- package/dist/cjs/components/XAdkProvider/context/index.js +3 -1
- package/dist/cjs/components/XAdkProvider/context/index.js.map +2 -2
- package/dist/cjs/components/XAdkProvider/index.js +11 -10
- package/dist/cjs/components/XAdkProvider/index.js.map +2 -2
- package/dist/cjs/components/XAdkSender/InlineTagInput.d.ts +31 -0
- package/dist/cjs/components/XAdkSender/InlineTagInput.js +759 -0
- package/dist/cjs/components/XAdkSender/InlineTagInput.js.map +7 -0
- package/dist/cjs/components/XAdkSender/InputTags.d.ts +8 -0
- package/dist/cjs/components/XAdkSender/InputTags.js +51 -0
- package/dist/cjs/components/XAdkSender/InputTags.js.map +7 -0
- package/dist/cjs/components/XAdkSender/QuickList.d.ts +16 -0
- package/dist/cjs/components/XAdkSender/QuickList.js +105 -0
- package/dist/cjs/components/XAdkSender/QuickList.js.map +7 -0
- package/dist/cjs/components/XAdkSender/index.d.ts +1 -6
- package/dist/cjs/components/XAdkSender/index.js +422 -150
- package/dist/cjs/components/XAdkSender/index.js.map +3 -3
- package/dist/cjs/components/XAdkSender/styles.d.ts +19 -0
- package/dist/cjs/components/XAdkSender/styles.js +225 -5
- package/dist/cjs/components/XAdkSender/styles.js.map +2 -2
- package/dist/cjs/components/XAiConversations/styles.js +11 -1
- package/dist/cjs/components/XAiConversations/styles.js.map +2 -2
- package/dist/cjs/hooks/useADKChat.js +5 -1
- package/dist/cjs/hooks/useADKChat.js.map +2 -2
- package/dist/cjs/index.d.ts +8 -3
- package/dist/cjs/index.js +44 -10
- package/dist/cjs/index.js.map +3 -3
- package/dist/cjs/presets/base.d.ts +6 -0
- package/dist/cjs/presets/base.js +50 -0
- package/dist/cjs/presets/base.js.map +7 -0
- package/dist/cjs/presets/define.d.ts +11 -0
- package/dist/cjs/presets/define.js +58 -0
- package/dist/cjs/presets/define.js.map +7 -0
- package/dist/cjs/presets/index.d.ts +3 -0
- package/dist/cjs/presets/index.js +28 -0
- package/dist/cjs/presets/index.js.map +7 -0
- package/dist/cjs/presets/runtime.d.ts +22 -0
- package/dist/cjs/presets/runtime.js +75 -0
- package/dist/cjs/presets/runtime.js.map +7 -0
- package/dist/cjs/presets/xgroup/index.d.ts +5 -0
- package/dist/cjs/presets/xgroup/index.js +10 -0
- package/dist/cjs/presets/xgroup/index.js.map +2 -2
- package/dist/cjs/presets/xgroup/knowledgeReference.d.ts +17 -0
- package/dist/cjs/presets/xgroup/knowledgeReference.js +162 -0
- package/dist/cjs/presets/xgroup/knowledgeReference.js.map +7 -0
- package/dist/cjs/presets/xgroup/preset.d.ts +1 -13
- package/dist/cjs/presets/xgroup/preset.js +16 -37
- package/dist/cjs/presets/xgroup/preset.js.map +2 -2
- package/dist/cjs/presets/xgroup/strategies.d.ts +5 -4
- package/dist/cjs/presets/xgroup/strategies.js +11 -15
- package/dist/cjs/presets/xgroup/strategies.js.map +3 -3
- package/dist/cjs/presets/xgroup/webReference.d.ts +10 -0
- package/dist/cjs/presets/xgroup/webReference.js +85 -0
- package/dist/cjs/presets/xgroup/webReference.js.map +7 -0
- package/dist/cjs/types/ChatStrategies.d.ts +11 -2
- package/dist/cjs/types/ChatStrategies.js.map +1 -1
- package/dist/cjs/types/FileGallery.d.ts +3 -0
- package/dist/cjs/types/FileGallery.js.map +1 -1
- package/dist/cjs/types/Sources.d.ts +30 -0
- package/dist/cjs/types/Sources.js +18 -0
- package/dist/cjs/types/Sources.js.map +7 -0
- package/dist/cjs/types/XAdkChatbot.d.ts +33 -0
- package/dist/cjs/types/XAdkChatbot.js.map +1 -1
- package/dist/cjs/types/XAdkSender.d.ts +154 -8
- package/dist/cjs/types/XAdkSender.js.map +1 -1
- package/dist/cjs/types/index.d.ts +1 -0
- package/dist/cjs/types/index.js +3 -1
- package/dist/cjs/types/index.js.map +2 -2
- package/dist/cjs/utils/index.d.ts +1 -0
- package/dist/cjs/utils/index.js +3 -1
- package/dist/cjs/utils/index.js.map +2 -2
- package/dist/cjs/utils/markdownResource.d.ts +14 -0
- package/dist/cjs/utils/markdownResource.js +131 -0
- package/dist/cjs/utils/markdownResource.js.map +7 -0
- package/dist/esm/components/FileGallery/index.js +22 -16
- package/dist/esm/components/FileGallery/index.js.map +1 -1
- package/dist/esm/components/FileGallery/styles.d.ts +7 -0
- package/dist/esm/components/FileGallery/styles.js +24 -17
- package/dist/esm/components/FileGallery/styles.js.map +1 -1
- package/dist/esm/components/Sources/components/CarouselCard.d.ts +12 -0
- package/dist/esm/components/Sources/components/CarouselCard.js +107 -0
- package/dist/esm/components/Sources/components/CarouselCard.js.map +1 -0
- package/dist/esm/components/Sources/index.d.ts +5 -0
- package/dist/esm/components/Sources/index.js +127 -0
- package/dist/esm/components/Sources/index.js.map +1 -0
- package/dist/esm/components/Sources/styles.d.ts +59 -0
- package/dist/esm/components/Sources/styles.js +34 -0
- package/dist/esm/components/Sources/styles.js.map +1 -0
- package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.d.ts +19 -1
- package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.js +190 -11
- package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.js.map +1 -1
- package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.d.ts +3 -0
- package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.js +5 -2
- package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.js.map +1 -1
- package/dist/esm/components/XAdkChatbot/index.d.ts +2 -2
- package/dist/esm/components/XAdkChatbot/index.js +55 -10
- package/dist/esm/components/XAdkChatbot/index.js.map +1 -1
- package/dist/esm/components/XAdkChatbot/styles.js +1 -1
- package/dist/esm/components/XAdkChatbot/styles.js.map +1 -1
- package/dist/esm/components/XAdkProvider/compound/DefaultLayout.d.ts +7 -2
- package/dist/esm/components/XAdkProvider/compound/DefaultLayout.js +40 -17
- package/dist/esm/components/XAdkProvider/compound/DefaultLayout.js.map +1 -1
- package/dist/esm/components/XAdkProvider/compound/Sender.d.ts +3 -1
- package/dist/esm/components/XAdkProvider/compound/Sender.js +70 -6
- package/dist/esm/components/XAdkProvider/compound/Sender.js.map +1 -1
- package/dist/esm/components/XAdkProvider/compound/styles.d.ts +1 -0
- package/dist/esm/components/XAdkProvider/compound/styles.js +3 -2
- package/dist/esm/components/XAdkProvider/compound/styles.js.map +1 -1
- package/dist/esm/components/XAdkProvider/context/ChatSenderStateContext.d.ts +4 -0
- package/dist/esm/components/XAdkProvider/context/ChatSenderStateContext.js.map +1 -1
- package/dist/esm/components/XAdkProvider/context/DefaultLayoutContext.d.ts +9 -0
- package/dist/esm/components/XAdkProvider/context/DefaultLayoutContext.js +9 -0
- package/dist/esm/components/XAdkProvider/context/DefaultLayoutContext.js.map +1 -0
- package/dist/esm/components/XAdkProvider/context/index.d.ts +5 -4
- package/dist/esm/components/XAdkProvider/context/index.js +1 -0
- package/dist/esm/components/XAdkProvider/context/index.js.map +1 -1
- package/dist/esm/components/XAdkProvider/index.js +7 -3
- package/dist/esm/components/XAdkProvider/index.js.map +1 -1
- package/dist/esm/components/XAdkSender/InlineTagInput.d.ts +31 -0
- package/dist/esm/components/XAdkSender/InlineTagInput.js +734 -0
- package/dist/esm/components/XAdkSender/InlineTagInput.js.map +1 -0
- package/dist/esm/components/XAdkSender/InputTags.d.ts +8 -0
- package/dist/esm/components/XAdkSender/InputTags.js +37 -0
- package/dist/esm/components/XAdkSender/InputTags.js.map +1 -0
- package/dist/esm/components/XAdkSender/QuickList.d.ts +16 -0
- package/dist/esm/components/XAdkSender/QuickList.js +96 -0
- package/dist/esm/components/XAdkSender/QuickList.js.map +1 -0
- package/dist/esm/components/XAdkSender/index.d.ts +1 -6
- package/dist/esm/components/XAdkSender/index.js +476 -143
- package/dist/esm/components/XAdkSender/index.js.map +1 -1
- package/dist/esm/components/XAdkSender/styles.d.ts +19 -0
- package/dist/esm/components/XAdkSender/styles.js +34 -12
- package/dist/esm/components/XAdkSender/styles.js.map +1 -1
- package/dist/esm/components/XAiConversations/styles.js +3 -3
- package/dist/esm/components/XAiConversations/styles.js.map +1 -1
- package/dist/esm/hooks/useADKChat.js +8 -2
- package/dist/esm/hooks/useADKChat.js.map +1 -1
- package/dist/esm/index.d.ts +8 -3
- package/dist/esm/index.js +7 -4
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/presets/base.d.ts +6 -0
- package/dist/esm/presets/base.js +28 -0
- package/dist/esm/presets/base.js.map +1 -0
- package/dist/esm/presets/define.d.ts +11 -0
- package/dist/esm/presets/define.js +33 -0
- package/dist/esm/presets/define.js.map +1 -0
- package/dist/esm/presets/index.d.ts +3 -0
- package/dist/esm/presets/index.js +4 -0
- package/dist/esm/presets/index.js.map +1 -0
- package/dist/esm/presets/runtime.d.ts +22 -0
- package/dist/esm/presets/runtime.js +45 -0
- package/dist/esm/presets/runtime.js.map +1 -0
- package/dist/esm/presets/xgroup/index.d.ts +5 -0
- package/dist/esm/presets/xgroup/index.js +6 -0
- package/dist/esm/presets/xgroup/index.js.map +1 -1
- package/dist/esm/presets/xgroup/knowledgeReference.d.ts +17 -0
- package/dist/esm/presets/xgroup/knowledgeReference.js +95 -0
- package/dist/esm/presets/xgroup/knowledgeReference.js.map +1 -0
- package/dist/esm/presets/xgroup/preset.d.ts +1 -13
- package/dist/esm/presets/xgroup/preset.js +9 -29
- package/dist/esm/presets/xgroup/preset.js.map +1 -1
- package/dist/esm/presets/xgroup/strategies.d.ts +5 -4
- package/dist/esm/presets/xgroup/strategies.js +8 -20
- package/dist/esm/presets/xgroup/strategies.js.map +1 -1
- package/dist/esm/presets/xgroup/webReference.d.ts +10 -0
- package/dist/esm/presets/xgroup/webReference.js +46 -0
- package/dist/esm/presets/xgroup/webReference.js.map +1 -0
- package/dist/esm/types/ChatStrategies.d.ts +11 -2
- package/dist/esm/types/ChatStrategies.js.map +1 -1
- package/dist/esm/types/FileGallery.d.ts +3 -0
- package/dist/esm/types/FileGallery.js.map +1 -1
- package/dist/esm/types/Sources.d.ts +30 -0
- package/dist/esm/types/Sources.js +2 -0
- package/dist/esm/types/Sources.js.map +1 -0
- package/dist/esm/types/XAdkChatbot.d.ts +33 -0
- package/dist/esm/types/XAdkChatbot.js.map +1 -1
- package/dist/esm/types/XAdkSender.d.ts +154 -8
- package/dist/esm/types/XAdkSender.js.map +1 -1
- package/dist/esm/types/index.d.ts +1 -0
- package/dist/esm/types/index.js +1 -0
- package/dist/esm/types/index.js.map +1 -1
- package/dist/esm/utils/index.d.ts +1 -0
- package/dist/esm/utils/index.js +1 -0
- package/dist/esm/utils/index.js.map +1 -1
- package/dist/esm/utils/markdownResource.d.ts +14 -0
- package/dist/esm/utils/markdownResource.js +101 -0
- package/dist/esm/utils/markdownResource.js.map +1 -0
- package/dist/umd/chat-sdk.min.js +1 -1
- package/package.json +6 -1
- package/dist/cjs/components/XAdkSender/Switch.d.ts +0 -16
- package/dist/cjs/components/XAdkSender/Switch.js +0 -95
- package/dist/cjs/components/XAdkSender/Switch.js.map +0 -7
- package/dist/esm/components/XAdkSender/Switch.d.ts +0 -16
- package/dist/esm/components/XAdkSender/Switch.js +0 -53
- package/dist/esm/components/XAdkSender/Switch.js.map +0 -1
|
@@ -1,4 +1,97 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
+
/** 快捷键触发的列表项 */
|
|
3
|
+
export interface QuickListOption {
|
|
4
|
+
id: string;
|
|
5
|
+
label: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
icon?: React.ReactNode;
|
|
8
|
+
/** 分组名(用于聚合列表,子分组通过下划线分割) */
|
|
9
|
+
group?: string;
|
|
10
|
+
[key: string]: any;
|
|
11
|
+
}
|
|
12
|
+
/** 快捷键配置 */
|
|
13
|
+
export interface QuickKeyConfig {
|
|
14
|
+
/** 触发字符,如 '@', '#', '$' */
|
|
15
|
+
key: string;
|
|
16
|
+
/** 选中后写入 MentionTag.type 的语义类型,不传时回退为 key */
|
|
17
|
+
mentionType?: string;
|
|
18
|
+
/** @deprecated 请使用 mentionType。 */
|
|
19
|
+
tagType?: string;
|
|
20
|
+
/** 列表标题 */
|
|
21
|
+
title?: string;
|
|
22
|
+
/** 列表数据 */
|
|
23
|
+
options: QuickListOption[];
|
|
24
|
+
/** 自定义列表项渲染 */
|
|
25
|
+
renderItem?: (option: QuickListOption) => React.ReactNode;
|
|
26
|
+
/** 选中回调 */
|
|
27
|
+
onSelect?: (option: QuickListOption) => void;
|
|
28
|
+
}
|
|
29
|
+
/** 输入框内的资源引用。SDK 只理解通用 Mention,业务语义可放入 data 或可选语义字段。 */
|
|
30
|
+
export interface MentionTag {
|
|
31
|
+
id: string;
|
|
32
|
+
label: string;
|
|
33
|
+
/** Mention 类型,如 'knowledge', 'skill', 'plugin', 'agent' */
|
|
34
|
+
type: string;
|
|
35
|
+
/** 资源 URI,如 skill://skillNo、kb://kb/knNo/dir/docs/2024 */
|
|
36
|
+
uri?: string;
|
|
37
|
+
/** 业务资源 ID,如 skillNo、knowledgeNo */
|
|
38
|
+
targetId?: string;
|
|
39
|
+
/** 展示名;不传时回退 label */
|
|
40
|
+
displayName?: string;
|
|
41
|
+
/** 提交为纯文本/Markdown/XML 时使用的业务值,不传时回退 uri/targetId/label */
|
|
42
|
+
value?: string;
|
|
43
|
+
/** 触发字符,如 '@', '#', '$',用于业务方区分来源 */
|
|
44
|
+
trigger?: string;
|
|
45
|
+
color?: string;
|
|
46
|
+
icon?: React.ReactNode;
|
|
47
|
+
/** 业务扩展上下文,例如知识库目录 scope */
|
|
48
|
+
scope?: any;
|
|
49
|
+
/** 原始数据 */
|
|
50
|
+
data?: any;
|
|
51
|
+
}
|
|
52
|
+
/** @deprecated 请使用 MentionTag。 */
|
|
53
|
+
export type InputTag = MentionTag;
|
|
54
|
+
export interface InlineTagRenderInfo {
|
|
55
|
+
onRemove: () => void;
|
|
56
|
+
}
|
|
57
|
+
export type XAdkSenderSubmitFormat = "text" | "structured" | "markdown" | "xml";
|
|
58
|
+
export type XAdkSenderSubmitPart = {
|
|
59
|
+
type: "text";
|
|
60
|
+
text: string;
|
|
61
|
+
} | {
|
|
62
|
+
type: "mention";
|
|
63
|
+
mention: MentionTag;
|
|
64
|
+
};
|
|
65
|
+
/** @deprecated 旧 tag part,仅用于兼容 defaultInputParts 历史传入。 */
|
|
66
|
+
export type XAdkSenderLegacyTagPart = {
|
|
67
|
+
type: "tag";
|
|
68
|
+
tag: MentionTag;
|
|
69
|
+
};
|
|
70
|
+
/** 输入框文本/Mention 有序片段,表示用户正在编辑的输入内容 */
|
|
71
|
+
export type XAdkSenderInputPart = XAdkSenderSubmitPart | XAdkSenderLegacyTagPart;
|
|
72
|
+
export interface XAdkSenderFormatMentionContext {
|
|
73
|
+
format: Exclude<XAdkSenderSubmitFormat, "structured">;
|
|
74
|
+
index: number;
|
|
75
|
+
}
|
|
76
|
+
/** @deprecated 请使用 XAdkSenderFormatMentionContext。 */
|
|
77
|
+
export type XAdkSenderFormatTagContext = XAdkSenderFormatMentionContext;
|
|
78
|
+
export interface XAdkSenderSubmitData<TPayload = unknown> {
|
|
79
|
+
/** 根据 submitFormat 生成的最终内容,默认是纯文本 */
|
|
80
|
+
text: string;
|
|
81
|
+
/** 去掉标签后的用户原始输入文本 */
|
|
82
|
+
rawText: string;
|
|
83
|
+
/** 当前提交格式 */
|
|
84
|
+
format: XAdkSenderSubmitFormat;
|
|
85
|
+
/** 文本与 Mention 的有序片段,inlineTags 模式下可还原资源引用在输入框中的位置 */
|
|
86
|
+
parts: XAdkSenderSubmitPart[];
|
|
87
|
+
files: ServerFile[];
|
|
88
|
+
/** 当前 Mention 列表 */
|
|
89
|
+
mentions?: MentionTag[];
|
|
90
|
+
/** @deprecated 请使用 mentions。 */
|
|
91
|
+
tags?: MentionTag[];
|
|
92
|
+
/** 业务方通过 transformSubmitData 派生出的自定义提交结构 */
|
|
93
|
+
payload?: TPayload;
|
|
94
|
+
}
|
|
2
95
|
export interface UploadFileResult {
|
|
3
96
|
fileName?: string;
|
|
4
97
|
fileId?: string | number;
|
|
@@ -53,7 +146,6 @@ export type FileValidator = (file: File, context: {
|
|
|
53
146
|
}) => string | null;
|
|
54
147
|
export interface ActionsComponents {
|
|
55
148
|
SendButton: React.ComponentType<any>;
|
|
56
|
-
UploadButton: React.ComponentType<any>;
|
|
57
149
|
ClearButton: React.ComponentType<any>;
|
|
58
150
|
}
|
|
59
151
|
export type SlotRenderFunction = (oriNode: React.ReactNode, info: {
|
|
@@ -71,21 +163,27 @@ export interface UploaderCoreProps {
|
|
|
71
163
|
}
|
|
72
164
|
export interface SenderUIProps {
|
|
73
165
|
clearBtnShow?: boolean;
|
|
74
|
-
|
|
75
|
-
|
|
166
|
+
/**
|
|
167
|
+
* 是否启用 Sender 自身的拖拽上传。
|
|
168
|
+
* 拖拽产生的文件通过 onFileSelect 回调交给业务/外层处理;
|
|
169
|
+
* 默认 false,由外层(如 DefaultLayout)管理拖拽时无需开启。
|
|
170
|
+
*/
|
|
76
171
|
draggable?: boolean;
|
|
172
|
+
/**
|
|
173
|
+
* 拖拽文件回调:当 draggable 为 true 且用户向输入区拖拽文件时触发。
|
|
174
|
+
* 业务/外层在此回调中决定如何处理文件(通常调用 senderRef.addFiles 注入)。
|
|
175
|
+
*/
|
|
176
|
+
onFileSelect?: (files: File[]) => void;
|
|
77
177
|
loading?: boolean;
|
|
78
178
|
disabled?: boolean;
|
|
179
|
+
placeholder?: string;
|
|
79
180
|
/** 受控:输入框的值 */
|
|
80
181
|
value?: string;
|
|
81
182
|
/** 非受控:输入框默认值 */
|
|
82
183
|
defaultValue?: string;
|
|
83
184
|
onClear?: () => void;
|
|
84
185
|
onChange?: (value: string) => void;
|
|
85
|
-
onSubmit?: (data:
|
|
86
|
-
text: string;
|
|
87
|
-
files: ServerFile[];
|
|
88
|
-
}) => void;
|
|
186
|
+
onSubmit?: (data: XAdkSenderSubmitData) => void;
|
|
89
187
|
onStop?: () => void;
|
|
90
188
|
/** 自定义发送按钮渲染 */
|
|
91
189
|
sendButtonRender?: (info: {
|
|
@@ -98,15 +196,63 @@ export interface SenderUIProps {
|
|
|
98
196
|
}) => React.ReactNode;
|
|
99
197
|
/** 后缀内容,默认展示操作按钮,设为 false 时不显示 */
|
|
100
198
|
suffix?: React.ReactNode | false | SlotRenderFunction;
|
|
101
|
-
/**
|
|
199
|
+
/** 输入主体内部的头部内容 */
|
|
102
200
|
header?: React.ReactNode | false | SlotRenderFunction;
|
|
103
201
|
/** 前缀内容 */
|
|
104
202
|
prefix?: React.ReactNode | false | SlotRenderFunction;
|
|
105
203
|
/** 底部内容 */
|
|
106
204
|
footer?: React.ReactNode | false | SlotRenderFunction;
|
|
205
|
+
/** 底部左侧拓展区域,不传时 footer 保持原有居中布局 */
|
|
206
|
+
footerLeft?: React.ReactNode | false | SlotRenderFunction;
|
|
207
|
+
/** 快捷键配置列表 */
|
|
208
|
+
quickKeys?: QuickKeyConfig[];
|
|
209
|
+
/** 是否把 Mention 以内联 token 形式展示在输入区内;默认 false 保持历史 textarea 行为 */
|
|
210
|
+
inlineTags?: boolean;
|
|
211
|
+
/** 自定义内联 Mention 渲染 */
|
|
212
|
+
renderMention?: (mention: MentionTag, info: InlineTagRenderInfo) => React.ReactNode;
|
|
213
|
+
/** @deprecated 请使用 renderMention。 */
|
|
214
|
+
renderTag?: (mention: MentionTag, info: InlineTagRenderInfo) => React.ReactNode;
|
|
215
|
+
/** 受控:Mention 列表 */
|
|
216
|
+
mentions?: MentionTag[];
|
|
217
|
+
/** @deprecated 请使用 mentions。 */
|
|
218
|
+
tags?: MentionTag[];
|
|
219
|
+
/** 非受控:默认 Mention 列表 */
|
|
220
|
+
defaultMentions?: MentionTag[];
|
|
221
|
+
/** @deprecated 请使用 defaultMentions。 */
|
|
222
|
+
defaultTags?: MentionTag[];
|
|
223
|
+
/** 非受控:默认输入内容片段,用于初始化内联 Mention 输入区 */
|
|
224
|
+
defaultInputParts?: XAdkSenderInputPart[];
|
|
225
|
+
/** Mention 变化回调 */
|
|
226
|
+
onMentionsChange?: (mentions: MentionTag[]) => void;
|
|
227
|
+
/** @deprecated 请使用 onMentionsChange。 */
|
|
228
|
+
onTagsChange?: (mentions: MentionTag[]) => void;
|
|
229
|
+
/** 快捷键触发回调(业务方可在此处理搜索等逻辑) */
|
|
230
|
+
onQuickKeyTrigger?: (key: string, keyword: string) => void;
|
|
231
|
+
/**
|
|
232
|
+
* 提交内容格式:
|
|
233
|
+
* - text: 默认,输出文字 + Mention 文本(如 @生图技能)
|
|
234
|
+
* - structured: 保留 parts/mentions/files 结构化数据,text 为 rawText
|
|
235
|
+
* - markdown/xml: 输出对应标记文本
|
|
236
|
+
*/
|
|
237
|
+
submitFormat?: XAdkSenderSubmitFormat;
|
|
238
|
+
/** 自定义 Mention 在 text/markdown/xml 格式中的序列化结果 */
|
|
239
|
+
formatMention?: (mention: MentionTag, context: XAdkSenderFormatMentionContext) => string;
|
|
240
|
+
/** @deprecated 请使用 formatMention。 */
|
|
241
|
+
formatTag?: (mention: MentionTag, context: XAdkSenderFormatMentionContext) => string;
|
|
242
|
+
/**
|
|
243
|
+
* 基于 SDK 标准提交结构派生业务 payload。
|
|
244
|
+
* SDK 不理解 knowledge/skill/agent 等业务字段,只负责把 payload 原样放入 onSubmit 数据中。
|
|
245
|
+
*/
|
|
246
|
+
transformSubmitData?: (data: Omit<XAdkSenderSubmitData, "payload">) => unknown;
|
|
107
247
|
}
|
|
108
248
|
export type XAdkSenderProps = SenderUIProps & UploaderCoreProps;
|
|
109
249
|
export interface XAdkSenderHandle {
|
|
110
250
|
addFiles: (files: File[]) => void;
|
|
251
|
+
/** 向当前光标位置插入一个内联 Mention;未启用 inlineTags 时会退化为追加 Mention。 */
|
|
252
|
+
insertMention: (mention: MentionTag) => void;
|
|
253
|
+
/** @deprecated 请使用 insertMention。 */
|
|
254
|
+
insertTag: (mention: MentionTag) => void;
|
|
255
|
+
/** 聚焦输入区 */
|
|
256
|
+
focus: () => void;
|
|
111
257
|
}
|
|
112
258
|
export {};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/types/XAdkSender.ts"],
|
|
4
|
-
"sourcesContent": ["// types/XAdkSender.ts\nimport React from \"react\";\n\nexport interface UploadFileResult {\n fileName?: string;\n fileId?: string | number;\n tempUrl?: string;\n url?: string;\n fileUrl?: string;\n fileType?: string;\n fileSize?: number;\n mimeType?: string;\n [key: string]: any;\n}\n\nexport interface UploadSuccessResponse {\n data?: UploadFileResult | UploadFileResult[];\n [key: string]: any;\n}\n\ninterface uploadRequestProps {\n (options: {\n file: File;\n onProgress?: (e: { percent: number }) => void;\n onSuccess?: (\n response: UploadFileResult | UploadFileResult[] | UploadSuccessResponse,\n ) => void;\n onError?: (error: Error) => void;\n }): Promise<void> | void;\n}\n\nexport type UploadRequestFn = uploadRequestProps;\n\nexport interface ServerFile {\n fileName: string;\n fileId: string | number;\n tempUrl: string;\n type: string;\n size?: number;\n mimeType: string;\n raw?: UploadFileResult;\n}\n\nexport interface LocalFile {\n id: string;\n uid: string;\n name: string;\n file: File;\n size: number;\n type: string;\n progress: number;\n status: \"pending\" | \"uploading\" | \"success\" | \"error\";\n // 服务器返回字段\n fileId?: string | number;\n tempUrl?: string;\n response?: any;\n errorMessage?: string; // 上传错误信息\n}\n\nexport type FileValidator = (\n file: File,\n context: { files: LocalFile[] },\n) => string | null;\n\nexport interface ActionsComponents {\n SendButton: React.ComponentType<any>;\n
|
|
4
|
+
"sourcesContent": ["// types/XAdkSender.ts\nimport React from \"react\";\n\n// ===================== 快捷键/Mention 相关类型 =====================\n\n/** 快捷键触发的列表项 */\nexport interface QuickListOption {\n id: string;\n label: string;\n description?: string;\n icon?: React.ReactNode;\n /** 分组名(用于聚合列表,子分组通过下划线分割) */\n group?: string;\n [key: string]: any;\n}\n\n/** 快捷键配置 */\nexport interface QuickKeyConfig {\n /** 触发字符,如 '@', '#', '$' */\n key: string;\n /** 选中后写入 MentionTag.type 的语义类型,不传时回退为 key */\n mentionType?: string;\n /** @deprecated 请使用 mentionType。 */\n tagType?: string;\n /** 列表标题 */\n title?: string;\n /** 列表数据 */\n options: QuickListOption[];\n /** 自定义列表项渲染 */\n renderItem?: (option: QuickListOption) => React.ReactNode;\n /** 选中回调 */\n onSelect?: (option: QuickListOption) => void;\n}\n\n/** 输入框内的资源引用。SDK 只理解通用 Mention,业务语义可放入 data 或可选语义字段。 */\nexport interface MentionTag {\n id: string;\n label: string;\n /** Mention 类型,如 'knowledge', 'skill', 'plugin', 'agent' */\n type: string;\n /** 资源 URI,如 skill://skillNo、kb://kb/knNo/dir/docs/2024 */\n uri?: string;\n /** 业务资源 ID,如 skillNo、knowledgeNo */\n targetId?: string;\n /** 展示名;不传时回退 label */\n displayName?: string;\n /** 提交为纯文本/Markdown/XML 时使用的业务值,不传时回退 uri/targetId/label */\n value?: string;\n /** 触发字符,如 '@', '#', '$',用于业务方区分来源 */\n trigger?: string;\n color?: string;\n icon?: React.ReactNode;\n /** 业务扩展上下文,例如知识库目录 scope */\n scope?: any;\n /** 原始数据 */\n data?: any;\n}\n\n/** @deprecated 请使用 MentionTag。 */\nexport type InputTag = MentionTag;\n\nexport interface InlineTagRenderInfo {\n onRemove: () => void;\n}\n\nexport type XAdkSenderSubmitFormat = \"text\" | \"structured\" | \"markdown\" | \"xml\";\n\nexport type XAdkSenderSubmitPart =\n | { type: \"text\"; text: string }\n | { type: \"mention\"; mention: MentionTag };\n\n/** @deprecated 旧 tag part,仅用于兼容 defaultInputParts 历史传入。 */\nexport type XAdkSenderLegacyTagPart = { type: \"tag\"; tag: MentionTag };\n\n/** 输入框文本/Mention 有序片段,表示用户正在编辑的输入内容 */\nexport type XAdkSenderInputPart =\n | XAdkSenderSubmitPart\n | XAdkSenderLegacyTagPart;\n\nexport interface XAdkSenderFormatMentionContext {\n format: Exclude<XAdkSenderSubmitFormat, \"structured\">;\n index: number;\n}\n\n/** @deprecated 请使用 XAdkSenderFormatMentionContext。 */\nexport type XAdkSenderFormatTagContext = XAdkSenderFormatMentionContext;\n\nexport interface XAdkSenderSubmitData<TPayload = unknown> {\n /** 根据 submitFormat 生成的最终内容,默认是纯文本 */\n text: string;\n /** 去掉标签后的用户原始输入文本 */\n rawText: string;\n /** 当前提交格式 */\n format: XAdkSenderSubmitFormat;\n /** 文本与 Mention 的有序片段,inlineTags 模式下可还原资源引用在输入框中的位置 */\n parts: XAdkSenderSubmitPart[];\n files: ServerFile[];\n /** 当前 Mention 列表 */\n mentions?: MentionTag[];\n /** @deprecated 请使用 mentions。 */\n tags?: MentionTag[];\n /** 业务方通过 transformSubmitData 派生出的自定义提交结构 */\n payload?: TPayload;\n}\n\n// ===================== 上传相关类型 =====================\n\nexport interface UploadFileResult {\n fileName?: string;\n fileId?: string | number;\n tempUrl?: string;\n url?: string;\n fileUrl?: string;\n fileType?: string;\n fileSize?: number;\n mimeType?: string;\n [key: string]: any;\n}\n\nexport interface UploadSuccessResponse {\n data?: UploadFileResult | UploadFileResult[];\n [key: string]: any;\n}\n\ninterface uploadRequestProps {\n (options: {\n file: File;\n onProgress?: (e: { percent: number }) => void;\n onSuccess?: (\n response: UploadFileResult | UploadFileResult[] | UploadSuccessResponse,\n ) => void;\n onError?: (error: Error) => void;\n }): Promise<void> | void;\n}\n\nexport type UploadRequestFn = uploadRequestProps;\n\nexport interface ServerFile {\n fileName: string;\n fileId: string | number;\n tempUrl: string;\n type: string;\n size?: number;\n mimeType: string;\n raw?: UploadFileResult;\n}\n\nexport interface LocalFile {\n id: string;\n uid: string;\n name: string;\n file: File;\n size: number;\n type: string;\n progress: number;\n status: \"pending\" | \"uploading\" | \"success\" | \"error\";\n // 服务器返回字段\n fileId?: string | number;\n tempUrl?: string;\n response?: any;\n errorMessage?: string; // 上传错误信息\n}\n\nexport type FileValidator = (\n file: File,\n context: { files: LocalFile[] },\n) => string | null;\n\nexport interface ActionsComponents {\n SendButton: React.ComponentType<any>;\n ClearButton: React.ComponentType<any>;\n}\n\nexport type SlotRenderFunction = (\n oriNode: React.ReactNode,\n info: { components: ActionsComponents },\n) => React.ReactNode | false;\n\n// 上传相关\nexport interface UploaderCoreProps {\n uploadRequest?: uploadRequestProps;\n\n maxFileSize?: number;\n allowedFileTypes?: string[];\n maxFiles?: number;\n\n validators?: FileValidator[];\n\n // 数据层回调\n onFilesChange?: (files: LocalFile[]) => void;\n onUploadSuccess?: (file: LocalFile) => void;\n onUploadError?: (file: LocalFile, error: Error) => void;\n}\n\n// UI 相关\nexport interface SenderUIProps {\n clearBtnShow?: boolean;\n /**\n * 是否启用 Sender 自身的拖拽上传。\n * 拖拽产生的文件通过 onFileSelect 回调交给业务/外层处理;\n * 默认 false,由外层(如 DefaultLayout)管理拖拽时无需开启。\n */\n draggable?: boolean;\n /**\n * 拖拽文件回调:当 draggable 为 true 且用户向输入区拖拽文件时触发。\n * 业务/外层在此回调中决定如何处理文件(通常调用 senderRef.addFiles 注入)。\n */\n onFileSelect?: (files: File[]) => void;\n loading?: boolean;\n disabled?: boolean; // 只读状态\n placeholder?: string;\n /** 受控:输入框的值 */\n value?: string;\n /** 非受控:输入框默认值 */\n defaultValue?: string;\n onClear?: () => void;\n onChange?: (value: string) => void;\n onSubmit?: (data: XAdkSenderSubmitData) => void;\n onStop?: () => void;\n\n /** 自定义发送按钮渲染 */\n sendButtonRender?: (info: {\n loading: boolean;\n disabled: boolean;\n /** 当前是否可以发送(文本非空或有已上传的文件) */\n canSend: boolean;\n onSend: () => void;\n onStop?: () => void;\n }) => React.ReactNode;\n\n // UI插槽功能\n /** 后缀内容,默认展示操作按钮,设为 false 时不显示 */\n suffix?: React.ReactNode | false | SlotRenderFunction;\n /** 输入主体内部的头部内容 */\n header?: React.ReactNode | false | SlotRenderFunction;\n /** 前缀内容 */\n prefix?: React.ReactNode | false | SlotRenderFunction;\n /** 底部内容 */\n footer?: React.ReactNode | false | SlotRenderFunction;\n /** 底部左侧拓展区域,不传时 footer 保持原有居中布局 */\n footerLeft?: React.ReactNode | false | SlotRenderFunction;\n\n // 快捷键/Mention 功能\n /** 快捷键配置列表 */\n quickKeys?: QuickKeyConfig[];\n /** 是否把 Mention 以内联 token 形式展示在输入区内;默认 false 保持历史 textarea 行为 */\n inlineTags?: boolean;\n /** 自定义内联 Mention 渲染 */\n renderMention?: (\n mention: MentionTag,\n info: InlineTagRenderInfo,\n ) => React.ReactNode;\n /** @deprecated 请使用 renderMention。 */\n renderTag?: (\n mention: MentionTag,\n info: InlineTagRenderInfo,\n ) => React.ReactNode;\n /** 受控:Mention 列表 */\n mentions?: MentionTag[];\n /** @deprecated 请使用 mentions。 */\n tags?: MentionTag[];\n /** 非受控:默认 Mention 列表 */\n defaultMentions?: MentionTag[];\n /** @deprecated 请使用 defaultMentions。 */\n defaultTags?: MentionTag[];\n /** 非受控:默认输入内容片段,用于初始化内联 Mention 输入区 */\n defaultInputParts?: XAdkSenderInputPart[];\n /** Mention 变化回调 */\n onMentionsChange?: (mentions: MentionTag[]) => void;\n /** @deprecated 请使用 onMentionsChange。 */\n onTagsChange?: (mentions: MentionTag[]) => void;\n /** 快捷键触发回调(业务方可在此处理搜索等逻辑) */\n onQuickKeyTrigger?: (key: string, keyword: string) => void;\n /**\n * 提交内容格式:\n * - text: 默认,输出文字 + Mention 文本(如 @生图技能)\n * - structured: 保留 parts/mentions/files 结构化数据,text 为 rawText\n * - markdown/xml: 输出对应标记文本\n */\n submitFormat?: XAdkSenderSubmitFormat;\n /** 自定义 Mention 在 text/markdown/xml 格式中的序列化结果 */\n formatMention?: (\n mention: MentionTag,\n context: XAdkSenderFormatMentionContext,\n ) => string;\n /** @deprecated 请使用 formatMention。 */\n formatTag?: (\n mention: MentionTag,\n context: XAdkSenderFormatMentionContext,\n ) => string;\n /**\n * 基于 SDK 标准提交结构派生业务 payload。\n * SDK 不理解 knowledge/skill/agent 等业务字段,只负责把 payload 原样放入 onSubmit 数据中。\n */\n transformSubmitData?: (\n data: Omit<XAdkSenderSubmitData, \"payload\">,\n ) => unknown;\n}\n\nexport type XAdkSenderProps = SenderUIProps & UploaderCoreProps;\n\nexport interface XAdkSenderHandle {\n addFiles: (files: File[]) => void;\n /** 向当前光标位置插入一个内联 Mention;未启用 inlineTags 时会退化为追加 Mention。 */\n insertMention: (mention: MentionTag) => void;\n /** @deprecated 请使用 insertMention。 */\n insertTag: (mention: MentionTag) => void;\n /** 聚焦输入区 */\n focus: () => void;\n}\n"],
|
|
5
5
|
"mappings": ";;;;;;;;;;;;;;;AAAA;AAAA;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/cjs/types/index.js
CHANGED
|
@@ -29,6 +29,7 @@ __reExport(types_exports, require("./FileGallery"), module.exports);
|
|
|
29
29
|
__reExport(types_exports, require("./common"), module.exports);
|
|
30
30
|
__reExport(types_exports, require("./FunctionCallRender"), module.exports);
|
|
31
31
|
__reExport(types_exports, require("./ChatStrategies"), module.exports);
|
|
32
|
+
__reExport(types_exports, require("./Sources"), module.exports);
|
|
32
33
|
// Annotate the CommonJS export names for ESM import in node:
|
|
33
34
|
0 && (module.exports = {
|
|
34
35
|
...require("./XAiChatbot"),
|
|
@@ -43,6 +44,7 @@ __reExport(types_exports, require("./ChatStrategies"), module.exports);
|
|
|
43
44
|
...require("./FileGallery"),
|
|
44
45
|
...require("./common"),
|
|
45
46
|
...require("./FunctionCallRender"),
|
|
46
|
-
...require("./ChatStrategies")
|
|
47
|
+
...require("./ChatStrategies"),
|
|
48
|
+
...require("./Sources")
|
|
47
49
|
});
|
|
48
50
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/types/index.ts"],
|
|
4
|
-
"sourcesContent": ["export * from \"./XAiChatbot\";\nexport * from \"./XAiMessage\";\nexport * from \"./XAiProvider\";\nexport * from \"./XAiSender\";\nexport * from \"./XAiConversations\";\nexport * from \"./XAdkProvider\";\nexport * from \"./XAdkChatbot\";\nexport * from \"./XAdkSender\";\nexport * from \"./XAdkThoughtChain\";\nexport * from \"./FileGallery\";\nexport * from \"./common\";\nexport * from \"./FunctionCallRender\";\nexport * from \"./ChatStrategies\";\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,0BAAc,yBAAd;AACA,0BAAc,yBADd;AAEA,0BAAc,0BAFd;AAGA,0BAAc,wBAHd;AAIA,0BAAc,+BAJd;AAKA,0BAAc,2BALd;AAMA,0BAAc,0BANd;AAOA,0BAAc,yBAPd;AAQA,0BAAc,+BARd;AASA,0BAAc,0BATd;AAUA,0BAAc,qBAVd;AAWA,0BAAc,iCAXd;AAYA,0BAAc,6BAZd;",
|
|
4
|
+
"sourcesContent": ["export * from \"./XAiChatbot\";\nexport * from \"./XAiMessage\";\nexport * from \"./XAiProvider\";\nexport * from \"./XAiSender\";\nexport * from \"./XAiConversations\";\nexport * from \"./XAdkProvider\";\nexport * from \"./XAdkChatbot\";\nexport * from \"./XAdkSender\";\nexport * from \"./XAdkThoughtChain\";\nexport * from \"./FileGallery\";\nexport * from \"./common\";\nexport * from \"./FunctionCallRender\";\nexport * from \"./ChatStrategies\";\nexport * from \"./Sources\";\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,0BAAc,yBAAd;AACA,0BAAc,yBADd;AAEA,0BAAc,0BAFd;AAGA,0BAAc,wBAHd;AAIA,0BAAc,+BAJd;AAKA,0BAAc,2BALd;AAMA,0BAAc,0BANd;AAOA,0BAAc,yBAPd;AAQA,0BAAc,+BARd;AASA,0BAAc,0BATd;AAUA,0BAAc,qBAVd;AAWA,0BAAc,iCAXd;AAYA,0BAAc,6BAZd;AAaA,0BAAc,sBAbd;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -2,3 +2,4 @@ export declare const safeJsonParse: <T = any>(str?: string, defaultValue?: any)
|
|
|
2
2
|
export declare const safeJsonStringify: <T = any>(obj?: T, defaultValue?: any) => string;
|
|
3
3
|
export declare function cleanProcessText(text: string): string;
|
|
4
4
|
export * from './parseAgentMessage';
|
|
5
|
+
export * from './markdownResource';
|
package/dist/cjs/utils/index.js
CHANGED
|
@@ -26,6 +26,7 @@ __export(utils_exports, {
|
|
|
26
26
|
});
|
|
27
27
|
module.exports = __toCommonJS(utils_exports);
|
|
28
28
|
__reExport(utils_exports, require("./parseAgentMessage"), module.exports);
|
|
29
|
+
__reExport(utils_exports, require("./markdownResource"), module.exports);
|
|
29
30
|
var safeJsonParse = (str, defaultValue = {}) => {
|
|
30
31
|
if (!str)
|
|
31
32
|
return defaultValue;
|
|
@@ -54,6 +55,7 @@ function cleanProcessText(text) {
|
|
|
54
55
|
cleanProcessText,
|
|
55
56
|
safeJsonParse,
|
|
56
57
|
safeJsonStringify,
|
|
57
|
-
...require("./parseAgentMessage")
|
|
58
|
+
...require("./parseAgentMessage"),
|
|
59
|
+
...require("./markdownResource")
|
|
58
60
|
});
|
|
59
61
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/utils/index.ts"],
|
|
4
|
-
"sourcesContent": ["export const safeJsonParse = <T = any>(\n str?: string,\n defaultValue: any = {},\n): T => {\n if (!str) return defaultValue as T;\n try {\n return JSON.parse(str) || defaultValue;\n } catch (error) {\n return defaultValue as T;\n }\n};\n\nexport const safeJsonStringify = <T = any>(\n obj?: T,\n defaultValue: any = {},\n): string => {\n if (!obj) return defaultValue as string;\n try {\n return JSON.stringify(obj) || defaultValue;\n } catch (error) {\n return defaultValue as string;\n }\n};\n\nexport function cleanProcessText(text: string): string {\n if (!text) return \"\";\n return text\n .replace(/\\/\\*(PLANNING|REPLANNING|REASONING|ACTION|FINAL_ANSWER)\\*\\//g, \"\")\n .trim();\n}\n\n// 导出新的解析工具\nexport * from './parseAgentMessage';\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgCA,0BAAc,gCAhCd;AAAO,IAAM,gBAAgB,CAC3B,KACA,eAAoB,CAAC,MACf;AACN,MAAI,CAAC;AAAK,WAAO;AACjB,MAAI;AACF,WAAO,KAAK,MAAM,GAAG,KAAK;AAAA,EAC5B,SAAS,OAAP;AACA,WAAO;AAAA,EACT;AACF;AAEO,IAAM,oBAAoB,CAC/B,KACA,eAAoB,CAAC,MACV;AACX,MAAI,CAAC;AAAK,WAAO;AACjB,MAAI;AACF,WAAO,KAAK,UAAU,GAAG,KAAK;AAAA,EAChC,SAAS,OAAP;AACA,WAAO;AAAA,EACT;AACF;AAEO,SAAS,iBAAiB,MAAsB;AACrD,MAAI,CAAC;AAAM,WAAO;AAClB,SAAO,KACJ,QAAQ,gEAAgE,EAAE,EAC1E,KAAK;AACV;",
|
|
4
|
+
"sourcesContent": ["export const safeJsonParse = <T = any>(\n str?: string,\n defaultValue: any = {},\n): T => {\n if (!str) return defaultValue as T;\n try {\n return JSON.parse(str) || defaultValue;\n } catch (error) {\n return defaultValue as T;\n }\n};\n\nexport const safeJsonStringify = <T = any>(\n obj?: T,\n defaultValue: any = {},\n): string => {\n if (!obj) return defaultValue as string;\n try {\n return JSON.stringify(obj) || defaultValue;\n } catch (error) {\n return defaultValue as string;\n }\n};\n\nexport function cleanProcessText(text: string): string {\n if (!text) return \"\";\n return text\n .replace(/\\/\\*(PLANNING|REPLANNING|REASONING|ACTION|FINAL_ANSWER)\\*\\//g, \"\")\n .trim();\n}\n\n// 导出新的解析工具\nexport * from './parseAgentMessage';\nexport * from './markdownResource';\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgCA,0BAAc,gCAhCd;AAiCA,0BAAc,+BAjCd;AAAO,IAAM,gBAAgB,CAC3B,KACA,eAAoB,CAAC,MACf;AACN,MAAI,CAAC;AAAK,WAAO;AACjB,MAAI;AACF,WAAO,KAAK,MAAM,GAAG,KAAK;AAAA,EAC5B,SAAS,OAAP;AACA,WAAO;AAAA,EACT;AACF;AAEO,IAAM,oBAAoB,CAC/B,KACA,eAAoB,CAAC,MACV;AACX,MAAI,CAAC;AAAK,WAAO;AACjB,MAAI;AACF,WAAO,KAAK,UAAU,GAAG,KAAK;AAAA,EAChC,SAAS,OAAP;AACA,WAAO;AAAA,EACT;AACF;AAEO,SAAS,iBAAiB,MAAsB;AACrD,MAAI,CAAC;AAAM,WAAO;AAClB,SAAO,KACJ,QAAQ,gEAAgE,EAAE,EAC1E,KAAK;AACV;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { MarkdownResourceLink, XAdkSenderSubmitPart } from "../types";
|
|
2
|
+
export declare const MARKDOWN_RESOURCE_LINK_SCHEMES: readonly ["skill", "kb"];
|
|
3
|
+
export type MarkdownResourceLinkScheme = (typeof MARKDOWN_RESOURCE_LINK_SCHEMES)[number] | (string & {});
|
|
4
|
+
export interface MarkdownResourceLinkOptions {
|
|
5
|
+
schemes?: readonly MarkdownResourceLinkScheme[];
|
|
6
|
+
}
|
|
7
|
+
export declare const getMarkdownResourceDisplayLabel: (label: string) => string;
|
|
8
|
+
/** 将包含资源链接的 Markdown 还原成 Sender 可编辑的有序片段。 */
|
|
9
|
+
export declare const parseMarkdownResourceLinksAsParts: (text: string, options?: MarkdownResourceLinkOptions) => XAdkSenderSubmitPart[];
|
|
10
|
+
export declare const parseMarkdownResourceHref: (href: string, label?: string, options?: MarkdownResourceLinkOptions) => MarkdownResourceLink | null;
|
|
11
|
+
export declare const replaceMarkdownResourceLinks: (text: string, replacer: (link: MarkdownResourceLink) => string, options?: MarkdownResourceLinkOptions) => string;
|
|
12
|
+
export declare const formatMarkdownResourceLinksAsText: (text: string, options?: MarkdownResourceLinkOptions & {
|
|
13
|
+
stripTrigger?: boolean;
|
|
14
|
+
}) => string;
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
|
|
19
|
+
// src/utils/markdownResource.ts
|
|
20
|
+
var markdownResource_exports = {};
|
|
21
|
+
__export(markdownResource_exports, {
|
|
22
|
+
MARKDOWN_RESOURCE_LINK_SCHEMES: () => MARKDOWN_RESOURCE_LINK_SCHEMES,
|
|
23
|
+
formatMarkdownResourceLinksAsText: () => formatMarkdownResourceLinksAsText,
|
|
24
|
+
getMarkdownResourceDisplayLabel: () => getMarkdownResourceDisplayLabel,
|
|
25
|
+
parseMarkdownResourceHref: () => parseMarkdownResourceHref,
|
|
26
|
+
parseMarkdownResourceLinksAsParts: () => parseMarkdownResourceLinksAsParts,
|
|
27
|
+
replaceMarkdownResourceLinks: () => replaceMarkdownResourceLinks
|
|
28
|
+
});
|
|
29
|
+
module.exports = __toCommonJS(markdownResource_exports);
|
|
30
|
+
var MARKDOWN_RESOURCE_LINK_SCHEMES = [
|
|
31
|
+
"skill",
|
|
32
|
+
"kb"
|
|
33
|
+
// "plugin",
|
|
34
|
+
// "tool",
|
|
35
|
+
// "knowledge",
|
|
36
|
+
// "agent",
|
|
37
|
+
// "model",
|
|
38
|
+
];
|
|
39
|
+
var getResourceLinkSchemeSet = (options) => new Set((options == null ? void 0 : options.schemes) || MARKDOWN_RESOURCE_LINK_SCHEMES);
|
|
40
|
+
var RESOURCE_LINK_REGEX = /\[([^\]\n]+)\]\(([a-z][a-z0-9+.-]*:\/{2,3}[^)\s]+)\)/gi;
|
|
41
|
+
var stripTriggerPrefix = (label) => label.replace(/^[@/#$]+/, "");
|
|
42
|
+
var getMarkdownResourceDisplayLabel = (label) => stripTriggerPrefix(label).trim();
|
|
43
|
+
var parseMarkdownResourceLinksAsParts = (text, options) => {
|
|
44
|
+
var _a;
|
|
45
|
+
if (!text)
|
|
46
|
+
return [];
|
|
47
|
+
const parts = [];
|
|
48
|
+
let lastIndex = 0;
|
|
49
|
+
let mentionIndex = 0;
|
|
50
|
+
const regex = new RegExp(
|
|
51
|
+
RESOURCE_LINK_REGEX.source,
|
|
52
|
+
RESOURCE_LINK_REGEX.flags
|
|
53
|
+
);
|
|
54
|
+
let match;
|
|
55
|
+
while ((match = regex.exec(text)) !== null) {
|
|
56
|
+
const source = match[0];
|
|
57
|
+
const label = match[1] || "";
|
|
58
|
+
const href = match[2] || "";
|
|
59
|
+
const start = match.index ?? 0;
|
|
60
|
+
const link = parseMarkdownResourceHref(href, label, options);
|
|
61
|
+
if (!link)
|
|
62
|
+
continue;
|
|
63
|
+
if (start > lastIndex) {
|
|
64
|
+
parts.push({ type: "text", text: text.slice(lastIndex, start) });
|
|
65
|
+
}
|
|
66
|
+
const displayName = getMarkdownResourceDisplayLabel(
|
|
67
|
+
link.label || link.value
|
|
68
|
+
);
|
|
69
|
+
const mention = {
|
|
70
|
+
id: `pasted-${link.type}-${mentionIndex}-${Date.now().toString(36)}`,
|
|
71
|
+
label: displayName,
|
|
72
|
+
displayName,
|
|
73
|
+
type: link.type,
|
|
74
|
+
uri: link.href,
|
|
75
|
+
targetId: link.value,
|
|
76
|
+
value: link.value,
|
|
77
|
+
trigger: (_a = label.match(/^[@/#$]+/)) == null ? void 0 : _a[0],
|
|
78
|
+
data: { uri: link.href, value: link.value }
|
|
79
|
+
};
|
|
80
|
+
parts.push({ type: "mention", mention });
|
|
81
|
+
mentionIndex += 1;
|
|
82
|
+
lastIndex = start + source.length;
|
|
83
|
+
}
|
|
84
|
+
if (lastIndex < text.length) {
|
|
85
|
+
parts.push({ type: "text", text: text.slice(lastIndex) });
|
|
86
|
+
}
|
|
87
|
+
return parts.length > 0 ? parts : [{ type: "text", text }];
|
|
88
|
+
};
|
|
89
|
+
var parseMarkdownResourceHref = (href, label = "", options) => {
|
|
90
|
+
const match = href.match(/^([a-z][a-z0-9+.-]*):\/{2,3}(.+)$/i);
|
|
91
|
+
if (!match)
|
|
92
|
+
return null;
|
|
93
|
+
const type = match[1].toLowerCase();
|
|
94
|
+
if (!getResourceLinkSchemeSet(options).has(type))
|
|
95
|
+
return null;
|
|
96
|
+
return {
|
|
97
|
+
href,
|
|
98
|
+
label: label || href,
|
|
99
|
+
type,
|
|
100
|
+
value: decodeURIComponent(match[2])
|
|
101
|
+
};
|
|
102
|
+
};
|
|
103
|
+
var replaceMarkdownResourceLinks = (text, replacer, options) => {
|
|
104
|
+
if (!text)
|
|
105
|
+
return "";
|
|
106
|
+
return text.replace(
|
|
107
|
+
RESOURCE_LINK_REGEX,
|
|
108
|
+
(source, label, href) => {
|
|
109
|
+
const link = parseMarkdownResourceHref(href, label, options);
|
|
110
|
+
return link ? replacer(link) : source;
|
|
111
|
+
}
|
|
112
|
+
);
|
|
113
|
+
};
|
|
114
|
+
var formatMarkdownResourceLinksAsText = (text, options) => replaceMarkdownResourceLinks(
|
|
115
|
+
text,
|
|
116
|
+
(link) => {
|
|
117
|
+
const label = link.label || link.value;
|
|
118
|
+
return (options == null ? void 0 : options.stripTrigger) === false ? label : stripTriggerPrefix(label);
|
|
119
|
+
},
|
|
120
|
+
options
|
|
121
|
+
);
|
|
122
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
123
|
+
0 && (module.exports = {
|
|
124
|
+
MARKDOWN_RESOURCE_LINK_SCHEMES,
|
|
125
|
+
formatMarkdownResourceLinksAsText,
|
|
126
|
+
getMarkdownResourceDisplayLabel,
|
|
127
|
+
parseMarkdownResourceHref,
|
|
128
|
+
parseMarkdownResourceLinksAsParts,
|
|
129
|
+
replaceMarkdownResourceLinks
|
|
130
|
+
});
|
|
131
|
+
//# sourceMappingURL=markdownResource.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/utils/markdownResource.ts"],
|
|
4
|
+
"sourcesContent": ["import type {\n MarkdownResourceLink,\n MentionTag,\n XAdkSenderSubmitPart,\n} from \"@/types\";\n\nexport const MARKDOWN_RESOURCE_LINK_SCHEMES = [\n \"skill\",\n \"kb\",\n // \"plugin\",\n // \"tool\",\n // \"knowledge\",\n // \"agent\",\n // \"model\",\n] as const;\n\nexport type MarkdownResourceLinkScheme =\n | (typeof MARKDOWN_RESOURCE_LINK_SCHEMES)[number]\n | (string & {});\n\nexport interface MarkdownResourceLinkOptions {\n schemes?: readonly MarkdownResourceLinkScheme[];\n}\n\nconst getResourceLinkSchemeSet = (options?: MarkdownResourceLinkOptions) =>\n new Set<string>(options?.schemes || MARKDOWN_RESOURCE_LINK_SCHEMES);\n\nconst RESOURCE_LINK_REGEX =\n /\\[([^\\]\\n]+)\\]\\(([a-z][a-z0-9+.-]*:\\/{2,3}[^)\\s]+)\\)/gi;\n\nconst stripTriggerPrefix = (label: string) => label.replace(/^[@/#$]+/, \"\");\n\nexport const getMarkdownResourceDisplayLabel = (label: string) =>\n stripTriggerPrefix(label).trim();\n\n/** 将包含资源链接的 Markdown 还原成 Sender 可编辑的有序片段。 */\nexport const parseMarkdownResourceLinksAsParts = (\n text: string,\n options?: MarkdownResourceLinkOptions,\n): XAdkSenderSubmitPart[] => {\n if (!text) return [];\n\n const parts: XAdkSenderSubmitPart[] = [];\n let lastIndex = 0;\n let mentionIndex = 0;\n const regex = new RegExp(\n RESOURCE_LINK_REGEX.source,\n RESOURCE_LINK_REGEX.flags,\n );\n\n let match: RegExpExecArray | null;\n while ((match = regex.exec(text)) !== null) {\n const source = match[0];\n const label = match[1] || \"\";\n const href = match[2] || \"\";\n const start = match.index ?? 0;\n const link = parseMarkdownResourceHref(href, label, options);\n if (!link) continue;\n\n if (start > lastIndex) {\n parts.push({ type: \"text\", text: text.slice(lastIndex, start) });\n }\n\n const displayName = getMarkdownResourceDisplayLabel(\n link.label || link.value,\n );\n const mention: MentionTag = {\n id: `pasted-${link.type}-${mentionIndex}-${Date.now().toString(36)}`,\n label: displayName,\n displayName,\n type: link.type,\n uri: link.href,\n targetId: link.value,\n value: link.value,\n trigger: label.match(/^[@/#$]+/)?.[0],\n data: { uri: link.href, value: link.value },\n };\n parts.push({ type: \"mention\", mention });\n mentionIndex += 1;\n lastIndex = start + source.length;\n }\n\n if (lastIndex < text.length) {\n parts.push({ type: \"text\", text: text.slice(lastIndex) });\n }\n return parts.length > 0 ? parts : [{ type: \"text\", text }];\n};\n\nexport const parseMarkdownResourceHref = (\n href: string,\n label = \"\",\n options?: MarkdownResourceLinkOptions,\n): MarkdownResourceLink | null => {\n const match = href.match(/^([a-z][a-z0-9+.-]*):\\/{2,3}(.+)$/i);\n if (!match) return null;\n\n const type = match[1].toLowerCase();\n if (!getResourceLinkSchemeSet(options).has(type)) return null;\n\n return {\n href,\n label: label || href,\n type,\n value: decodeURIComponent(match[2]),\n };\n};\n\nexport const replaceMarkdownResourceLinks = (\n text: string,\n replacer: (link: MarkdownResourceLink) => string,\n options?: MarkdownResourceLinkOptions,\n) => {\n if (!text) return \"\";\n return text.replace(\n RESOURCE_LINK_REGEX,\n (source, label: string, href: string) => {\n const link = parseMarkdownResourceHref(href, label, options);\n return link ? replacer(link) : source;\n },\n );\n};\n\nexport const formatMarkdownResourceLinksAsText = (\n text: string,\n options?: MarkdownResourceLinkOptions & { stripTrigger?: boolean },\n) =>\n replaceMarkdownResourceLinks(\n text,\n (link) => {\n const label = link.label || link.value;\n return options?.stripTrigger === false\n ? label\n : stripTriggerPrefix(label);\n },\n options,\n );\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMO,IAAM,iCAAiC;AAAA,EAC5C;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMF;AAUA,IAAM,2BAA2B,CAAC,YAChC,IAAI,KAAY,mCAAS,YAAW,8BAA8B;AAEpE,IAAM,sBACJ;AAEF,IAAM,qBAAqB,CAAC,UAAkB,MAAM,QAAQ,YAAY,EAAE;AAEnE,IAAM,kCAAkC,CAAC,UAC9C,mBAAmB,KAAK,EAAE,KAAK;AAG1B,IAAM,oCAAoC,CAC/C,MACA,YAC2B;AAvC7B;AAwCE,MAAI,CAAC;AAAM,WAAO,CAAC;AAEnB,QAAM,QAAgC,CAAC;AACvC,MAAI,YAAY;AAChB,MAAI,eAAe;AACnB,QAAM,QAAQ,IAAI;AAAA,IAChB,oBAAoB;AAAA,IACpB,oBAAoB;AAAA,EACtB;AAEA,MAAI;AACJ,UAAQ,QAAQ,MAAM,KAAK,IAAI,OAAO,MAAM;AAC1C,UAAM,SAAS,MAAM,CAAC;AACtB,UAAM,QAAQ,MAAM,CAAC,KAAK;AAC1B,UAAM,OAAO,MAAM,CAAC,KAAK;AACzB,UAAM,QAAQ,MAAM,SAAS;AAC7B,UAAM,OAAO,0BAA0B,MAAM,OAAO,OAAO;AAC3D,QAAI,CAAC;AAAM;AAEX,QAAI,QAAQ,WAAW;AACrB,YAAM,KAAK,EAAE,MAAM,QAAQ,MAAM,KAAK,MAAM,WAAW,KAAK,EAAE,CAAC;AAAA,IACjE;AAEA,UAAM,cAAc;AAAA,MAClB,KAAK,SAAS,KAAK;AAAA,IACrB;AACA,UAAM,UAAsB;AAAA,MAC1B,IAAI,UAAU,KAAK,QAAQ,gBAAgB,KAAK,IAAI,EAAE,SAAS,EAAE;AAAA,MACjE,OAAO;AAAA,MACP;AAAA,MACA,MAAM,KAAK;AAAA,MACX,KAAK,KAAK;AAAA,MACV,UAAU,KAAK;AAAA,MACf,OAAO,KAAK;AAAA,MACZ,UAAS,WAAM,MAAM,UAAU,MAAtB,mBAA0B;AAAA,MACnC,MAAM,EAAE,KAAK,KAAK,MAAM,OAAO,KAAK,MAAM;AAAA,IAC5C;AACA,UAAM,KAAK,EAAE,MAAM,WAAW,QAAQ,CAAC;AACvC,oBAAgB;AAChB,gBAAY,QAAQ,OAAO;AAAA,EAC7B;AAEA,MAAI,YAAY,KAAK,QAAQ;AAC3B,UAAM,KAAK,EAAE,MAAM,QAAQ,MAAM,KAAK,MAAM,SAAS,EAAE,CAAC;AAAA,EAC1D;AACA,SAAO,MAAM,SAAS,IAAI,QAAQ,CAAC,EAAE,MAAM,QAAQ,KAAK,CAAC;AAC3D;AAEO,IAAM,4BAA4B,CACvC,MACA,QAAQ,IACR,YACgC;AAChC,QAAM,QAAQ,KAAK,MAAM,oCAAoC;AAC7D,MAAI,CAAC;AAAO,WAAO;AAEnB,QAAM,OAAO,MAAM,CAAC,EAAE,YAAY;AAClC,MAAI,CAAC,yBAAyB,OAAO,EAAE,IAAI,IAAI;AAAG,WAAO;AAEzD,SAAO;AAAA,IACL;AAAA,IACA,OAAO,SAAS;AAAA,IAChB;AAAA,IACA,OAAO,mBAAmB,MAAM,CAAC,CAAC;AAAA,EACpC;AACF;AAEO,IAAM,+BAA+B,CAC1C,MACA,UACA,YACG;AACH,MAAI,CAAC;AAAM,WAAO;AAClB,SAAO,KAAK;AAAA,IACV;AAAA,IACA,CAAC,QAAQ,OAAe,SAAiB;AACvC,YAAM,OAAO,0BAA0B,MAAM,OAAO,OAAO;AAC3D,aAAO,OAAO,SAAS,IAAI,IAAI;AAAA,IACjC;AAAA,EACF;AACF;AAEO,IAAM,oCAAoC,CAC/C,MACA,YAEA;AAAA,EACE;AAAA,EACA,CAAC,SAAS;AACR,UAAM,QAAQ,KAAK,SAAS,KAAK;AACjC,YAAO,mCAAS,kBAAiB,QAC7B,QACA,mBAAmB,KAAK;AAAA,EAC9B;AAAA,EACA;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -131,6 +131,7 @@ var ImageWithLoading = function ImageWithLoading(_ref) {
|
|
|
131
131
|
preview = _ref.preview,
|
|
132
132
|
fallback = _ref.fallback,
|
|
133
133
|
displayMode = _ref.displayMode,
|
|
134
|
+
className = _ref.className,
|
|
134
135
|
styles = _ref.styles;
|
|
135
136
|
var _useState = useState("loading"),
|
|
136
137
|
_useState2 = _slicedToArray(_useState, 2),
|
|
@@ -144,7 +145,7 @@ var ImageWithLoading = function ImageWithLoading(_ref) {
|
|
|
144
145
|
if (width) containerStyle.width = typeof width === "number" ? "".concat(width, "px") : width;
|
|
145
146
|
if (height) containerStyle.height = typeof height === "number" ? "".concat(height, "px") : height;
|
|
146
147
|
return /*#__PURE__*/_jsxs("div", {
|
|
147
|
-
className: modeClass,
|
|
148
|
+
className: "".concat(modeClass, " ").concat(className || ""),
|
|
148
149
|
style: containerStyle,
|
|
149
150
|
children: [loadState === "loading" && /*#__PURE__*/_jsx("div", {
|
|
150
151
|
className: styles.imageLoadingSkeleton,
|
|
@@ -193,6 +194,8 @@ var FileGallery = function FileGallery(_ref2) {
|
|
|
193
194
|
var file = _ref2.file,
|
|
194
195
|
_ref2$align = _ref2.align,
|
|
195
196
|
align = _ref2$align === void 0 ? "left" : _ref2$align,
|
|
197
|
+
_ref2$size = _ref2.size,
|
|
198
|
+
size = _ref2$size === void 0 ? "default" : _ref2$size,
|
|
196
199
|
_ref2$removable = _ref2.removable,
|
|
197
200
|
removable = _ref2$removable === void 0 ? false : _ref2$removable,
|
|
198
201
|
_ref2$onRemove = _ref2.onRemove,
|
|
@@ -237,6 +240,8 @@ var FileGallery = function FileGallery(_ref2) {
|
|
|
237
240
|
var fileSize = getFileSize(file);
|
|
238
241
|
var fileId = getFileId(file);
|
|
239
242
|
var url = getFileUrl(file) || objectUrl;
|
|
243
|
+
var isSmall = size === "small";
|
|
244
|
+
var cardClassName = "".concat(styles.fileCard, " ").concat(isSmall ? styles.fileCardSmall : "", " ").concat(align === "right" ? "align-right" : "", " ").concat(className || "");
|
|
240
245
|
|
|
241
246
|
// 核心逻辑:type prop 决定渲染方式(参考 file-card)
|
|
242
247
|
// - 不传 type:自动推断,图片/音频/视频用原生渲染
|
|
@@ -262,7 +267,7 @@ var FileGallery = function FileGallery(_ref2) {
|
|
|
262
267
|
// ==================== 渲染删除按钮 ====================
|
|
263
268
|
var renderRemoveBtn = function renderRemoveBtn() {
|
|
264
269
|
return removable ? /*#__PURE__*/_jsx("button", {
|
|
265
|
-
className: styles.fileRemoveBtn,
|
|
270
|
+
className: "".concat(styles.fileRemoveBtn, " ").concat(isSmall ? styles.fileRemoveBtnSmall : ""),
|
|
266
271
|
onClick: function onClick(e) {
|
|
267
272
|
e.stopPropagation();
|
|
268
273
|
onRemove(fileId);
|
|
@@ -294,7 +299,7 @@ var FileGallery = function FileGallery(_ref2) {
|
|
|
294
299
|
color = _getIcon.color;
|
|
295
300
|
var isExternalUrl = url && url.startsWith("http");
|
|
296
301
|
return /*#__PURE__*/_jsxs("div", {
|
|
297
|
-
className:
|
|
302
|
+
className: cardClassName,
|
|
298
303
|
style: _objectSpread(_objectSpread({}, style), {}, {
|
|
299
304
|
cursor: _onClick ? "pointer" : undefined
|
|
300
305
|
}),
|
|
@@ -302,7 +307,7 @@ var FileGallery = function FileGallery(_ref2) {
|
|
|
302
307
|
return _onClick === null || _onClick === void 0 ? void 0 : _onClick(file);
|
|
303
308
|
},
|
|
304
309
|
children: [/*#__PURE__*/_jsx("div", {
|
|
305
|
-
className: styles.fileIcon,
|
|
310
|
+
className: "".concat(styles.fileIcon, " ").concat(isSmall ? styles.fileIconSmall : ""),
|
|
306
311
|
style: {
|
|
307
312
|
color: color
|
|
308
313
|
},
|
|
@@ -317,14 +322,14 @@ var FileGallery = function FileGallery(_ref2) {
|
|
|
317
322
|
children: /*#__PURE__*/_jsx(Tooltip, {
|
|
318
323
|
title: fileName,
|
|
319
324
|
children: /*#__PURE__*/_jsx("div", {
|
|
320
|
-
className: styles.fileName,
|
|
325
|
+
className: "".concat(styles.fileName, " ").concat(isSmall ? styles.fileNameSmall : ""),
|
|
321
326
|
children: fileName.length > 15 ? "".concat(fileName.substring(0, 15), "...") : fileName
|
|
322
327
|
})
|
|
323
328
|
})
|
|
324
329
|
}) : /*#__PURE__*/_jsx(Tooltip, {
|
|
325
330
|
title: fileName,
|
|
326
331
|
children: /*#__PURE__*/_jsx("div", {
|
|
327
|
-
className: styles.fileName,
|
|
332
|
+
className: "".concat(styles.fileName, " ").concat(isSmall ? styles.fileNameSmall : ""),
|
|
328
333
|
children: fileName.length > 15 ? "".concat(fileName.substring(0, 15), "...") : fileName
|
|
329
334
|
})
|
|
330
335
|
}), file.status === "uploading" ? /*#__PURE__*/_jsx(Progress, {
|
|
@@ -332,8 +337,8 @@ var FileGallery = function FileGallery(_ref2) {
|
|
|
332
337
|
size: "small",
|
|
333
338
|
showInfo: false,
|
|
334
339
|
strokeColor: "#1677ff",
|
|
335
|
-
className: styles.progress
|
|
336
|
-
}) : fileSize > 0 && /*#__PURE__*/_jsx("div", {
|
|
340
|
+
className: "".concat(styles.progress, " ").concat(isSmall ? styles.progressSmall : "")
|
|
341
|
+
}) : !isSmall && fileSize > 0 && /*#__PURE__*/_jsx("div", {
|
|
337
342
|
className: styles.fileSize,
|
|
338
343
|
children: formatFileSize(fileSize)
|
|
339
344
|
}), file.status === "error" && file.errorMessage && /*#__PURE__*/_jsx("div", {
|
|
@@ -374,7 +379,7 @@ var FileGallery = function FileGallery(_ref2) {
|
|
|
374
379
|
|
|
375
380
|
// thumbnail 模式:卡片形式
|
|
376
381
|
return /*#__PURE__*/_jsxs("div", {
|
|
377
|
-
className:
|
|
382
|
+
className: cardClassName,
|
|
378
383
|
style: _objectSpread(_objectSpread({}, style), {}, {
|
|
379
384
|
cursor: _onClick ? "pointer" : undefined
|
|
380
385
|
}),
|
|
@@ -384,24 +389,25 @@ var FileGallery = function FileGallery(_ref2) {
|
|
|
384
389
|
children: [/*#__PURE__*/_jsx(ImageWithLoading, {
|
|
385
390
|
src: url,
|
|
386
391
|
alt: imageAlt || fileName,
|
|
387
|
-
width: imageWidth,
|
|
388
|
-
height: imageHeight,
|
|
392
|
+
width: size === "small" ? 22 : imageWidth,
|
|
393
|
+
height: size === "small" ? 22 : imageHeight,
|
|
389
394
|
displayMode: "thumbnail",
|
|
390
395
|
loading: imageLoading,
|
|
391
396
|
preview: _onClick ? false : {
|
|
392
397
|
src: url
|
|
393
398
|
},
|
|
394
399
|
fallback: FALLBACK_IMAGE,
|
|
395
|
-
styles: styles
|
|
400
|
+
styles: styles,
|
|
401
|
+
className: isSmall ? styles.imageThumbnailSmall : undefined
|
|
396
402
|
}), renderUploadOverlay(), /*#__PURE__*/_jsxs("div", {
|
|
397
403
|
className: styles.fileInfo,
|
|
398
404
|
children: [/*#__PURE__*/_jsx(Tooltip, {
|
|
399
405
|
title: fileName,
|
|
400
406
|
children: /*#__PURE__*/_jsx("div", {
|
|
401
|
-
className: styles.fileName,
|
|
407
|
+
className: "".concat(styles.fileName, " ").concat(isSmall ? styles.fileNameSmall : ""),
|
|
402
408
|
children: fileName.length > 15 ? "".concat(fileName.substring(0, 15), "...") : fileName
|
|
403
409
|
})
|
|
404
|
-
}), Number(file === null || file === void 0 ? void 0 : file.size) > 0 && /*#__PURE__*/_jsx("div", {
|
|
410
|
+
}), !isSmall && Number(file === null || file === void 0 ? void 0 : file.size) > 0 && /*#__PURE__*/_jsx("div", {
|
|
405
411
|
className: styles.fileSize,
|
|
406
412
|
children: formatFileSize(fileSize)
|
|
407
413
|
})]
|
|
@@ -410,7 +416,7 @@ var FileGallery = function FileGallery(_ref2) {
|
|
|
410
416
|
}
|
|
411
417
|
|
|
412
418
|
// ==================== 音频渲染(原生播放器,无卡片包裹) ====================
|
|
413
|
-
if (fileType === "audio") {
|
|
419
|
+
if (fileType === "audio" && size !== "small") {
|
|
414
420
|
return /*#__PURE__*/_jsxs("div", {
|
|
415
421
|
className: "file-gallery-audio ".concat(className || ""),
|
|
416
422
|
style: _objectSpread({
|
|
@@ -431,7 +437,7 @@ var FileGallery = function FileGallery(_ref2) {
|
|
|
431
437
|
}
|
|
432
438
|
|
|
433
439
|
// ==================== 视频渲染(原生播放器,无卡片包裹) ====================
|
|
434
|
-
if (fileType === "video") {
|
|
440
|
+
if (fileType === "video" && size !== "small") {
|
|
435
441
|
return /*#__PURE__*/_jsxs("div", {
|
|
436
442
|
className: "file-gallery-video ".concat(className || ""),
|
|
437
443
|
style: _objectSpread({
|