@ai-group/chat-sdk 3.7.1-alpha1 → 3.7.1-alpha3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/FileGallery/index.js +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 +58 -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/XAdkSender/InlineTagInput.d.ts +2 -1
- package/dist/cjs/components/XAdkSender/InlineTagInput.js +107 -50
- package/dist/cjs/components/XAdkSender/InlineTagInput.js.map +2 -2
- package/dist/cjs/components/XAdkSender/index.js +101 -34
- package/dist/cjs/components/XAdkSender/index.js.map +3 -3
- package/dist/cjs/components/XAdkSender/styles.d.ts +4 -0
- package/dist/cjs/components/XAdkSender/styles.js +34 -6
- package/dist/cjs/components/XAdkSender/styles.js.map +2 -2
- package/dist/cjs/index.d.ts +3 -0
- package/dist/cjs/index.js +3 -0
- package/dist/cjs/index.js.map +3 -3
- 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/XAdkSender.d.ts +52 -6
- 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/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/XAdkSender/InlineTagInput.d.ts +2 -1
- package/dist/esm/components/XAdkSender/InlineTagInput.js +110 -40
- package/dist/esm/components/XAdkSender/InlineTagInput.js.map +1 -1
- package/dist/esm/components/XAdkSender/index.js +129 -38
- package/dist/esm/components/XAdkSender/index.js.map +1 -1
- package/dist/esm/components/XAdkSender/styles.d.ts +4 -0
- package/dist/esm/components/XAdkSender/styles.js +29 -25
- package/dist/esm/components/XAdkSender/styles.js.map +1 -1
- package/dist/esm/index.d.ts +3 -0
- package/dist/esm/index.js +3 -0
- package/dist/esm/index.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/XAdkSender.d.ts +52 -6
- 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/umd/chat-sdk.min.js +1 -1
- package/package.json +1 -1
|
@@ -13,6 +13,8 @@ export interface QuickListOption {
|
|
|
13
13
|
export interface QuickKeyConfig {
|
|
14
14
|
/** 触发字符,如 '@', '#', '$' */
|
|
15
15
|
key: string;
|
|
16
|
+
/** 选中后写入 InputTag.type 的语义类型,不传时回退为 key 以兼容旧行为 */
|
|
17
|
+
tagType?: string;
|
|
16
18
|
/** 列表标题 */
|
|
17
19
|
title?: string;
|
|
18
20
|
/** 列表数据 */
|
|
@@ -28,6 +30,10 @@ export interface InputTag {
|
|
|
28
30
|
label: string;
|
|
29
31
|
/** 标签类型,如 'aggregation', 'skill', 'app' */
|
|
30
32
|
type: string;
|
|
33
|
+
/** 提交为纯文本/Markdown/XML 时使用的业务值,不传时回退 label */
|
|
34
|
+
value?: string;
|
|
35
|
+
/** 触发字符,如 '@', '#', '$',用于业务方区分来源 */
|
|
36
|
+
trigger?: string;
|
|
31
37
|
color?: string;
|
|
32
38
|
icon?: React.ReactNode;
|
|
33
39
|
/** 原始数据 */
|
|
@@ -36,6 +42,32 @@ export interface InputTag {
|
|
|
36
42
|
export interface InlineTagRenderInfo {
|
|
37
43
|
onRemove: () => void;
|
|
38
44
|
}
|
|
45
|
+
export type XAdkSenderSubmitFormat = "text" | "structured" | "markdown" | "xml";
|
|
46
|
+
export type XAdkSenderSubmitPart = {
|
|
47
|
+
type: "text";
|
|
48
|
+
text: string;
|
|
49
|
+
} | {
|
|
50
|
+
type: "tag";
|
|
51
|
+
tag: InputTag;
|
|
52
|
+
};
|
|
53
|
+
export interface XAdkSenderFormatTagContext {
|
|
54
|
+
format: Exclude<XAdkSenderSubmitFormat, "structured">;
|
|
55
|
+
index: number;
|
|
56
|
+
}
|
|
57
|
+
export interface XAdkSenderSubmitData<TPayload = unknown> {
|
|
58
|
+
/** 根据 submitFormat 生成的最终内容,默认是纯文本 */
|
|
59
|
+
text: string;
|
|
60
|
+
/** 去掉标签后的用户原始输入文本 */
|
|
61
|
+
rawText: string;
|
|
62
|
+
/** 当前提交格式 */
|
|
63
|
+
format: XAdkSenderSubmitFormat;
|
|
64
|
+
/** 文本与标签的有序片段,inlineTags 模式下可还原标签在输入框中的位置 */
|
|
65
|
+
parts: XAdkSenderSubmitPart[];
|
|
66
|
+
files: ServerFile[];
|
|
67
|
+
tags?: InputTag[];
|
|
68
|
+
/** 业务方通过 transformSubmitData 派生出的自定义提交结构 */
|
|
69
|
+
payload?: TPayload;
|
|
70
|
+
}
|
|
39
71
|
export interface UploadFileResult {
|
|
40
72
|
fileName?: string;
|
|
41
73
|
fileId?: string | number;
|
|
@@ -120,11 +152,7 @@ export interface SenderUIProps {
|
|
|
120
152
|
defaultValue?: string;
|
|
121
153
|
onClear?: () => void;
|
|
122
154
|
onChange?: (value: string) => void;
|
|
123
|
-
onSubmit?: (data:
|
|
124
|
-
text: string;
|
|
125
|
-
files: ServerFile[];
|
|
126
|
-
tags?: InputTag[];
|
|
127
|
-
}) => void;
|
|
155
|
+
onSubmit?: (data: XAdkSenderSubmitData) => void;
|
|
128
156
|
onStop?: () => void;
|
|
129
157
|
/** 自定义发送按钮渲染 */
|
|
130
158
|
sendButtonRender?: (info: {
|
|
@@ -137,7 +165,7 @@ export interface SenderUIProps {
|
|
|
137
165
|
}) => React.ReactNode;
|
|
138
166
|
/** 后缀内容,默认展示操作按钮,设为 false 时不显示 */
|
|
139
167
|
suffix?: React.ReactNode | false | SlotRenderFunction;
|
|
140
|
-
/**
|
|
168
|
+
/** 输入主体内部的头部内容 */
|
|
141
169
|
header?: React.ReactNode | false | SlotRenderFunction;
|
|
142
170
|
/** 前缀内容 */
|
|
143
171
|
prefix?: React.ReactNode | false | SlotRenderFunction;
|
|
@@ -159,9 +187,27 @@ export interface SenderUIProps {
|
|
|
159
187
|
onTagsChange?: (tags: InputTag[]) => void;
|
|
160
188
|
/** 快捷键触发回调(业务方可在此处理搜索等逻辑) */
|
|
161
189
|
onQuickKeyTrigger?: (key: string, keyword: string) => void;
|
|
190
|
+
/**
|
|
191
|
+
* 提交内容格式:
|
|
192
|
+
* - text: 默认,输出文字 + 标签文本(如 /生图技能)
|
|
193
|
+
* - structured: 保留 parts/tags/files 结构化数据,text 为 rawText
|
|
194
|
+
* - markdown/xml: 输出对应标记文本
|
|
195
|
+
*/
|
|
196
|
+
submitFormat?: XAdkSenderSubmitFormat;
|
|
197
|
+
/** 自定义标签在 text/markdown/xml 格式中的序列化结果 */
|
|
198
|
+
formatTag?: (tag: InputTag, context: XAdkSenderFormatTagContext) => string;
|
|
199
|
+
/**
|
|
200
|
+
* 基于 SDK 标准提交结构派生业务 payload。
|
|
201
|
+
* SDK 不理解 knowledge/skill/agent 等业务字段,只负责把 payload 原样放入 onSubmit 数据中。
|
|
202
|
+
*/
|
|
203
|
+
transformSubmitData?: (data: Omit<XAdkSenderSubmitData, "payload">) => unknown;
|
|
162
204
|
}
|
|
163
205
|
export type XAdkSenderProps = SenderUIProps & UploaderCoreProps;
|
|
164
206
|
export interface XAdkSenderHandle {
|
|
165
207
|
addFiles: (files: File[]) => void;
|
|
208
|
+
/** 向当前光标位置插入一个内联标签;未启用 inlineTags 时会退化为追加标签。 */
|
|
209
|
+
insertTag: (tag: InputTag) => void;
|
|
210
|
+
/** 聚焦输入区 */
|
|
211
|
+
focus: () => void;
|
|
166
212
|
}
|
|
167
213
|
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\n// ===================== 快捷键/标签相关类型 =====================\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 /** 列表标题 */\n title?: string;\n /** 列表数据 */\n options: QuickListOption[];\n /** 自定义列表项渲染 */\n renderItem?: (option: QuickListOption) => React.ReactNode;\n /** 选中回调 */\n onSelect?: (option: QuickListOption) => void;\n}\n\n/** 输入框内标签 */\nexport interface InputTag {\n id: string;\n label: string;\n /** 标签类型,如 'aggregation', 'skill', 'app' */\n type: string;\n color?: string;\n icon?: React.ReactNode;\n /** 原始数据 */\n data?: any;\n}\n\nexport interface InlineTagRenderInfo {\n onRemove: () => void;\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 UploadButton: 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 allowUpload?: boolean;\n /** 是否启用 Sender 自身的拖拽上传,设为 false 时由外层(如 DefaultLayout)管理拖拽 */\n draggable?: boolean;\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:
|
|
4
|
+
"sourcesContent": ["// types/XAdkSender.ts\nimport React from \"react\";\n\n// ===================== 快捷键/标签相关类型 =====================\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 /** 选中后写入 InputTag.type 的语义类型,不传时回退为 key 以兼容旧行为 */\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/** 输入框内标签 */\nexport interface InputTag {\n id: string;\n label: string;\n /** 标签类型,如 'aggregation', 'skill', 'app' */\n type: string;\n /** 提交为纯文本/Markdown/XML 时使用的业务值,不传时回退 label */\n value?: string;\n /** 触发字符,如 '@', '#', '$',用于业务方区分来源 */\n trigger?: string;\n color?: string;\n icon?: React.ReactNode;\n /** 原始数据 */\n data?: any;\n}\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: \"tag\"; tag: InputTag };\n\nexport interface XAdkSenderFormatTagContext {\n format: Exclude<XAdkSenderSubmitFormat, \"structured\">;\n index: number;\n}\n\nexport interface XAdkSenderSubmitData<TPayload = unknown> {\n /** 根据 submitFormat 生成的最终内容,默认是纯文本 */\n text: string;\n /** 去掉标签后的用户原始输入文本 */\n rawText: string;\n /** 当前提交格式 */\n format: XAdkSenderSubmitFormat;\n /** 文本与标签的有序片段,inlineTags 模式下可还原标签在输入框中的位置 */\n parts: XAdkSenderSubmitPart[];\n files: ServerFile[];\n tags?: InputTag[];\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 UploadButton: 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 allowUpload?: boolean;\n /** 是否启用 Sender 自身的拖拽上传,设为 false 时由外层(如 DefaultLayout)管理拖拽 */\n draggable?: boolean;\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 // 快捷键/标签功能\n /** 快捷键配置列表 */\n quickKeys?: QuickKeyConfig[];\n /** 是否把标签以内联 token 形式展示在输入区内;默认 false 保持历史 textarea 行为 */\n inlineTags?: boolean;\n /** 自定义内联标签渲染 */\n renderTag?: (\n tag: InputTag,\n info: InlineTagRenderInfo,\n ) => React.ReactNode;\n /** 受控:标签列表 */\n tags?: InputTag[];\n /** 非受控:默认标签列表 */\n defaultTags?: InputTag[];\n /** 标签变化回调 */\n onTagsChange?: (tags: InputTag[]) => void;\n /** 快捷键触发回调(业务方可在此处理搜索等逻辑) */\n onQuickKeyTrigger?: (key: string, keyword: string) => void;\n /**\n * 提交内容格式:\n * - text: 默认,输出文字 + 标签文本(如 /生图技能)\n * - structured: 保留 parts/tags/files 结构化数据,text 为 rawText\n * - markdown/xml: 输出对应标记文本\n */\n submitFormat?: XAdkSenderSubmitFormat;\n /** 自定义标签在 text/markdown/xml 格式中的序列化结果 */\n formatTag?: (\n tag: InputTag,\n context: XAdkSenderFormatTagContext,\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 /** 向当前光标位置插入一个内联标签;未启用 inlineTags 时会退化为追加标签。 */\n insertTag: (tag: InputTag) => 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
|
}
|
|
@@ -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({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useState","useEffect","useMemo","Image","Tooltip","Progress","FileOutlined","FilePdfOutlined","FileWordOutlined","FileExcelOutlined","FilePptOutlined","FileImageOutlined","CloseOutlined","AudioOutlined","FileZipOutlined","VideoCameraOutlined","FileMarkdownOutlined","PictureOutlined","useStyles","jsx","_jsx","jsxs","_jsxs","getFileName","file","displayName","name","getFileSize","size","getMimeType","mimeType","type","getFileUrl","_file$response","_file$response2","fileUri","response","fileUrl","tempUrl","getFileId","id","uid","getFileExtension","filename","ext","split","pop","toLowerCase","IMAGE_EXTS","AUDIO_EXTS","VIDEO_EXTS","inferFileType","startsWith","includes","url","urlExtMatch","match","urlExt","getFileIconType","DEFAULT_ICON_MAP","pdf","icon","color","word","excel","ppt","audio","video","zip","markdown","image","default","formatFileSize","bytes","toFixed","FALLBACK_IMAGE","ImageWithLoading","_ref","src","alt","width","height","loading","preview","fallback","displayMode","styles","_useState","_useState2","_slicedToArray","loadState","setLoadState","modeClass","imageFullMode","imagePreviewMode","imageThumbnail","containerStyle","concat","className","style","children","imageLoadingSkeleton","fontSize","imageErrorFallback","_objectSpread","display","opacity","transition","objectFit","maxWidth","onLoad","onError","FileGallery","_ref2","_ref2$align","align","_ref2$removable","removable","_ref2$onRemove","onRemove","onClick","customType","_ref2$imageDisplayMod","imageDisplayMode","imageWidth","imageHeight","_ref2$imageLoading","imageLoading","imageAlt","_ref2$mediaAutoPlay","mediaAutoPlay","_ref2$mediaLoop","mediaLoop","_ref2$mediaMuted","mediaMuted","mediaPoster","videoProps","audioProps","iconMap","customIcon","_useState3","_useState4","objectUrl","setObjectUrl","URL","createObjectURL","revokeObjectURL","fileName","fileSize","fileId","fileType","getIcon","iconType","renderRemoveBtn","fileRemoveBtn","e","stopPropagation","disabled","status","renderUploadOverlay","imageOverlay","percent","progress","strokeColor","renderFileCard","_getIcon","isExternalUrl","fileCard","cursor","undefined","fileIcon","fileInfo","href","target","rel","fileLink","title","length","substring","showInfo","errorMessage","marginTop","Number","position","controls","autoPlay","loop","muted","poster","aspectRatio","borderRadius","background"],"sources":["../../../../src/components/FileGallery/index.tsx"],"sourcesContent":["import React, { useState, useEffect, useMemo } from \"react\";\nimport { Image, Tooltip, Progress } from \"antd\";\nimport {\n FileOutlined,\n FilePdfOutlined,\n FileWordOutlined,\n FileExcelOutlined,\n FilePptOutlined,\n FileImageOutlined,\n CloseOutlined,\n AudioOutlined,\n FileZipOutlined,\n VideoCameraOutlined,\n FileMarkdownOutlined,\n PictureOutlined,\n} from \"@ant-design/icons\";\nimport {\n FileItem,\n FileGalleryProps,\n FileIconType,\n ImageDisplayMode,\n FileCardType,\n} from \"@/types\";\nimport { useStyles } from \"./styles\";\n\n// ==================== 工具函数 ====================\n\nconst getFileName = (file: FileItem): string =>\n file.displayName || file.name || \"\";\n\nconst getFileSize = (file: FileItem): number => file.size || 0;\n\nconst getMimeType = (file: FileItem): string =>\n file.mimeType || file.type || \"\";\n\nconst getFileUrl = (file: FileItem): string =>\n file.fileUri ||\n file.response?.fileUrl ||\n file.response?.tempUrl ||\n file.tempUrl ||\n \"\";\n\nconst getFileId = (file: FileItem): string => file.id || file.uid || \"\";\n\nconst getFileExtension = (filename: string): string => {\n const ext = filename.split(\".\").pop();\n return ext ? ext.toLowerCase() : \"\";\n};\n\nconst IMAGE_EXTS = [\"jpg\", \"jpeg\", \"png\", \"gif\", \"webp\", \"bmp\", \"svg\"];\nconst AUDIO_EXTS = [\"mp3\", \"wav\", \"m4a\", \"aac\", \"ogg\", \"flac\"];\nconst VIDEO_EXTS = [\"mp4\", \"mov\", \"webm\", \"mkv\", \"avi\"];\n\n/** 自动推断文件卡片类型 */\nconst inferFileType = (file: FileItem): FileCardType => {\n const mimeType = getMimeType(file);\n if (mimeType.startsWith(\"image/\")) return \"image\";\n if (mimeType.startsWith(\"audio/\")) return \"audio\";\n if (mimeType.startsWith(\"video/\")) return \"video\";\n\n const ext = getFileExtension(getFileName(file));\n if (IMAGE_EXTS.includes(ext)) return \"image\";\n if (AUDIO_EXTS.includes(ext)) return \"audio\";\n if (VIDEO_EXTS.includes(ext)) return \"video\";\n\n // URL 扩展名兜底\n const url = getFileUrl(file);\n const urlExtMatch = url.match(/\\.(\\w+)(\\?.*)?$/);\n if (urlExtMatch) {\n const urlExt = urlExtMatch[1].toLowerCase();\n if (IMAGE_EXTS.includes(urlExt)) return \"image\";\n if (AUDIO_EXTS.includes(urlExt)) return \"audio\";\n if (VIDEO_EXTS.includes(urlExt)) return \"video\";\n }\n\n return \"file\";\n};\n\n/** 根据扩展名获取文件图标类型 key */\nconst getFileIconType = (file: FileItem): FileIconType => {\n const ext = getFileExtension(getFileName(file));\n if (ext === \"pdf\") return \"pdf\";\n if ([\"doc\", \"docx\"].includes(ext)) return \"word\";\n if ([\"xls\", \"xlsx\", \"csv\"].includes(ext)) return \"excel\";\n if ([\"ppt\", \"pptx\"].includes(ext)) return \"ppt\";\n if (AUDIO_EXTS.includes(ext)) return \"audio\";\n if (VIDEO_EXTS.includes(ext)) return \"video\";\n if ([\"zip\", \"rar\", \"7z\", \"tar\", \"gz\", \"bz2\", \"xz\", \"tgz\"].includes(ext))\n return \"zip\";\n if ([\"md\", \"markdown\"].includes(ext)) return \"markdown\";\n if (IMAGE_EXTS.includes(ext)) return \"image\";\n return \"default\";\n};\n\n/** 默认图标映射 */\nconst DEFAULT_ICON_MAP: Record<\n FileIconType,\n { icon: React.ReactNode; color: string }\n> = {\n pdf: { icon: <FilePdfOutlined />, color: \"#ff4d4f\" },\n word: { icon: <FileWordOutlined />, color: \"#1677ff\" },\n excel: { icon: <FileExcelOutlined />, color: \"#22b35e\" },\n ppt: { icon: <FilePptOutlined />, color: \"#ff6e31\" },\n audio: { icon: <AudioOutlined />, color: \"#722ed1\" },\n video: { icon: <VideoCameraOutlined />, color: \"#fa8c16\" },\n zip: { icon: <FileZipOutlined />, color: \"#eb2f96\" },\n markdown: { icon: <FileMarkdownOutlined />, color: \"#13c2c2\" },\n image: { icon: <FileImageOutlined />, color: \"#8c8c8c\" },\n default: { icon: <FileOutlined />, color: \"#8c8c8c\" },\n};\n\nconst formatFileSize = (bytes: number): string => {\n if (bytes < 1024) return bytes + \" B\";\n if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + \" KB\";\n return (bytes / (1024 * 1024)).toFixed(1) + \" MB\";\n};\n\nconst FALLBACK_IMAGE =\n \"data:image/png;base64,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\";\n\n// ==================== 子组件:图片加载状态管理 ====================\n\nconst ImageWithLoading: React.FC<{\n src: string;\n alt: string;\n width?: number | string;\n height?: number | string;\n loading?: \"lazy\" | \"eager\";\n preview?: false | { src: string };\n fallback?: string;\n displayMode: ImageDisplayMode;\n styles: ReturnType<typeof useStyles>;\n}> = ({\n src,\n alt,\n width,\n height,\n loading,\n preview,\n fallback,\n displayMode,\n styles,\n}) => {\n const [loadState, setLoadState] = useState<\n \"loading\" | \"loaded\" | \"error\"\n >(\"loading\");\n\n useEffect(() => {\n setLoadState(\"loading\");\n }, [src]);\n\n const modeClass =\n displayMode === \"full\"\n ? styles.imageFullMode\n : displayMode === \"preview\"\n ? styles.imagePreviewMode\n : styles.imageThumbnail;\n\n const containerStyle: React.CSSProperties = {};\n if (width)\n containerStyle.width = typeof width === \"number\" ? `${width}px` : width;\n if (height)\n containerStyle.height = typeof height === \"number\" ? `${height}px` : height;\n\n return (\n <div className={modeClass} style={containerStyle}>\n {loadState === \"loading\" && (\n <div className={styles.imageLoadingSkeleton}>\n <PictureOutlined style={{ fontSize: 20, color: \"#d9d9d9\" }} />\n </div>\n )}\n\n {loadState === \"error\" && (\n <div className={styles.imageErrorFallback}>\n <PictureOutlined />\n <span>加载失败</span>\n </div>\n )}\n\n <Image\n src={src}\n alt={alt}\n fallback={fallback}\n preview={preview}\n loading={loading}\n style={{\n display: loadState === \"error\" ? \"none\" : \"block\",\n opacity: loadState === \"loading\" ? 0 : 1,\n transition: \"opacity 0.3s ease\",\n ...(displayMode === \"thumbnail\"\n ? { width: \"100%\", height: \"100%\", objectFit: \"cover\" }\n : { maxWidth: \"100%\", objectFit: \"contain\" }),\n }}\n onLoad={() => setLoadState(\"loaded\")}\n onError={() => setLoadState(\"error\")}\n />\n </div>\n );\n};\n\n// ==================== 主组件 ====================\n\nconst FileGallery: React.FC<FileGalleryProps> = ({\n file,\n align = \"left\",\n removable = false,\n onRemove = () => {},\n className,\n style,\n onClick,\n type: customType,\n // 图片相关\n imageDisplayMode = \"thumbnail\",\n imageWidth,\n imageHeight,\n imageLoading = \"eager\",\n imageAlt,\n // 音视频相关\n mediaAutoPlay = false,\n mediaLoop = false,\n mediaMuted = false,\n mediaPoster,\n videoProps,\n audioProps,\n // 自定义图标\n iconMap,\n customIcon,\n}) => {\n const styles = useStyles();\n const [objectUrl, setObjectUrl] = useState(\"\");\n\n useEffect(() => {\n if (!file?.file) return;\n const url = URL.createObjectURL(file.file);\n setObjectUrl(url);\n return () => URL.revokeObjectURL(url);\n }, [file?.file]);\n\n if (!file) return null;\n\n const fileName = getFileName(file);\n const fileSize = getFileSize(file);\n const fileId = getFileId(file);\n const url = getFileUrl(file) || objectUrl;\n\n // 核心逻辑:type prop 决定渲染方式(参考 file-card)\n // - 不传 type:自动推断,图片/音频/视频用原生渲染\n // - type=\"file\":强制附件卡片(音视频不可播放)\n // - type=\"image\"/\"audio\"/\"video\":强制指定类型\n const fileType = useMemo<FileCardType>(\n () => customType || inferFileType(file),\n [customType, file],\n );\n\n /** 获取图标(支持自定义) */\n const getIcon = (\n iconType: FileIconType,\n ): { icon: React.ReactNode; color: string } => {\n if (customIcon) return { icon: customIcon, color: \"inherit\" };\n if (iconMap?.[iconType])\n return { icon: iconMap[iconType]!, color: \"inherit\" };\n return DEFAULT_ICON_MAP[iconType];\n };\n\n // ==================== 渲染删除按钮 ====================\n const renderRemoveBtn = () =>\n removable ? (\n <button\n className={styles.fileRemoveBtn}\n onClick={(e) => {\n e.stopPropagation();\n onRemove(fileId);\n }}\n disabled={file.status === \"uploading\"}\n aria-label=\"删除文件\"\n >\n <CloseOutlined />\n </button>\n ) : null;\n\n // ==================== 渲染上传进度遮罩 ====================\n const renderUploadOverlay = () =>\n file.status === \"uploading\" ? (\n <div className={styles.imageOverlay}>\n <Progress\n type=\"circle\"\n percent={file.progress}\n size={30}\n strokeColor=\"#1677ff\"\n />\n </div>\n ) : null;\n\n // ==================== 附件卡片渲染(type=\"file\" 或普通文档) ====================\n const renderFileCard = () => {\n const iconType = getFileIconType(file);\n const { icon, color } = getIcon(iconType);\n const isExternalUrl = url && url.startsWith(\"http\");\n\n return (\n <div\n className={`${styles.fileCard} ${align === \"right\" ? \"align-right\" : \"\"} ${className || \"\"}`}\n style={{ ...style, cursor: onClick ? \"pointer\" : undefined }}\n onClick={() => onClick?.(file)}\n >\n <div className={styles.fileIcon} style={{ color }}>\n {icon}\n </div>\n\n <div className={styles.fileInfo}>\n {isExternalUrl && !onClick ? (\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={styles.fileLink}\n >\n <Tooltip title={fileName}>\n <div className={styles.fileName}>\n {fileName.length > 15\n ? `${fileName.substring(0, 15)}...`\n : fileName}\n </div>\n </Tooltip>\n </a>\n ) : (\n <Tooltip title={fileName}>\n <div className={styles.fileName}>\n {fileName.length > 15\n ? `${fileName.substring(0, 15)}...`\n : fileName}\n </div>\n </Tooltip>\n )}\n\n {file.status === \"uploading\" ? (\n <Progress\n percent={file.progress}\n size=\"small\"\n showInfo={false}\n strokeColor=\"#1677ff\"\n className={styles.progress}\n />\n ) : (\n fileSize > 0 && (\n <div className={styles.fileSize}>\n {formatFileSize(fileSize)}\n </div>\n )\n )}\n\n {file.status === \"error\" && file.errorMessage && (\n <div\n style={{ fontSize: \"11px\", color: \"#ff4d4f\", marginTop: \"2px\" }}\n >\n {file.errorMessage}\n </div>\n )}\n </div>\n\n {renderRemoveBtn()}\n </div>\n );\n };\n\n // ==================== 图片渲染 ====================\n if (fileType === \"image\") {\n // full / preview 模式:独立展示\n if (imageDisplayMode === \"full\" || imageDisplayMode === \"preview\") {\n const containerStyle: React.CSSProperties = { ...style };\n if (imageWidth)\n containerStyle.width =\n typeof imageWidth === \"number\" ? `${imageWidth}px` : imageWidth;\n if (imageHeight)\n containerStyle.height =\n typeof imageHeight === \"number\" ? `${imageHeight}px` : imageHeight;\n\n return (\n <div\n className={`${imageDisplayMode === \"full\" ? styles.imageFullMode : styles.imagePreviewMode} ${className || \"\"}`}\n style={containerStyle}\n >\n <ImageWithLoading\n src={url}\n alt={imageAlt || fileName}\n displayMode={imageDisplayMode}\n loading={imageLoading}\n preview={onClick ? false : { src: url }}\n fallback={FALLBACK_IMAGE}\n styles={styles}\n />\n {renderUploadOverlay()}\n {renderRemoveBtn()}\n </div>\n );\n }\n\n // thumbnail 模式:卡片形式\n return (\n <div\n className={`${styles.fileCard} ${align === \"right\" ? \"align-right\" : \"\"} ${className || \"\"}`}\n style={{ ...style, cursor: onClick ? \"pointer\" : undefined }}\n onClick={() => onClick?.(file)}\n >\n <ImageWithLoading\n src={url}\n alt={imageAlt || fileName}\n width={imageWidth}\n height={imageHeight}\n displayMode=\"thumbnail\"\n loading={imageLoading}\n preview={onClick ? false : { src: url }}\n fallback={FALLBACK_IMAGE}\n styles={styles}\n />\n {renderUploadOverlay()}\n\n <div className={styles.fileInfo}>\n <Tooltip title={fileName}>\n <div className={styles.fileName}>\n {fileName.length > 15\n ? `${fileName.substring(0, 15)}...`\n : fileName}\n </div>\n </Tooltip>\n {Number(file?.size) > 0 && (\n <div className={styles.fileSize}>{formatFileSize(fileSize)}</div>\n )}\n </div>\n\n {renderRemoveBtn()}\n </div>\n );\n }\n\n // ==================== 音频渲染(原生播放器,无卡片包裹) ====================\n if (fileType === \"audio\") {\n return (\n <div\n className={`file-gallery-audio ${className || \"\"}`}\n style={{ position: \"relative\", width: 268, ...style }}\n >\n <audio\n src={url}\n controls\n autoPlay={mediaAutoPlay}\n loop={mediaLoop}\n muted={mediaMuted}\n style={{ width: \"100%\" }}\n {...audioProps}\n />\n {renderRemoveBtn()}\n </div>\n );\n }\n\n // ==================== 视频渲染(原生播放器,无卡片包裹) ====================\n if (fileType === \"video\") {\n return (\n <div\n className={`file-gallery-video ${className || \"\"}`}\n style={{ position: \"relative\", width: 268, ...style }}\n >\n <video\n src={url}\n controls\n autoPlay={mediaAutoPlay}\n loop={mediaLoop}\n muted={mediaMuted}\n poster={mediaPoster}\n style={{\n width: \"100%\",\n aspectRatio: \"16 / 9\",\n borderRadius: 8,\n background: \"#000\",\n }}\n {...videoProps}\n />\n {renderRemoveBtn()}\n </div>\n );\n }\n\n // ==================== 其他文件(附件卡片) ====================\n return renderFileCard();\n};\n\nexport default FileGallery;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["React","useState","useEffect","useMemo","Image","Tooltip","Progress","FileOutlined","FilePdfOutlined","FileWordOutlined","FileExcelOutlined","FilePptOutlined","FileImageOutlined","CloseOutlined","AudioOutlined","FileZipOutlined","VideoCameraOutlined","FileMarkdownOutlined","PictureOutlined","useStyles","jsx","_jsx","jsxs","_jsxs","getFileName","file","displayName","name","getFileSize","size","getMimeType","mimeType","type","getFileUrl","_file$response","_file$response2","fileUri","response","fileUrl","tempUrl","getFileId","id","uid","getFileExtension","filename","ext","split","pop","toLowerCase","IMAGE_EXTS","AUDIO_EXTS","VIDEO_EXTS","inferFileType","startsWith","includes","url","urlExtMatch","match","urlExt","getFileIconType","DEFAULT_ICON_MAP","pdf","icon","color","word","excel","ppt","audio","video","zip","markdown","image","default","formatFileSize","bytes","toFixed","FALLBACK_IMAGE","ImageWithLoading","_ref","src","alt","width","height","loading","preview","fallback","displayMode","className","styles","_useState","_useState2","_slicedToArray","loadState","setLoadState","modeClass","imageFullMode","imagePreviewMode","imageThumbnail","containerStyle","concat","style","children","imageLoadingSkeleton","fontSize","imageErrorFallback","_objectSpread","display","opacity","transition","objectFit","maxWidth","onLoad","onError","FileGallery","_ref2","_ref2$align","align","_ref2$size","_ref2$removable","removable","_ref2$onRemove","onRemove","onClick","customType","_ref2$imageDisplayMod","imageDisplayMode","imageWidth","imageHeight","_ref2$imageLoading","imageLoading","imageAlt","_ref2$mediaAutoPlay","mediaAutoPlay","_ref2$mediaLoop","mediaLoop","_ref2$mediaMuted","mediaMuted","mediaPoster","videoProps","audioProps","iconMap","customIcon","_useState3","_useState4","objectUrl","setObjectUrl","URL","createObjectURL","revokeObjectURL","fileName","fileSize","fileId","isSmall","cardClassName","fileCard","fileCardSmall","fileType","getIcon","iconType","renderRemoveBtn","fileRemoveBtn","fileRemoveBtnSmall","e","stopPropagation","disabled","status","renderUploadOverlay","imageOverlay","percent","progress","strokeColor","renderFileCard","_getIcon","isExternalUrl","cursor","undefined","fileIcon","fileIconSmall","fileInfo","href","target","rel","fileLink","title","fileNameSmall","length","substring","showInfo","progressSmall","errorMessage","marginTop","imageThumbnailSmall","Number","position","controls","autoPlay","loop","muted","poster","aspectRatio","borderRadius","background"],"sources":["../../../../src/components/FileGallery/index.tsx"],"sourcesContent":["import React, { useState, useEffect, useMemo } from \"react\";\nimport { Image, Tooltip, Progress } from \"antd\";\nimport {\n FileOutlined,\n FilePdfOutlined,\n FileWordOutlined,\n FileExcelOutlined,\n FilePptOutlined,\n FileImageOutlined,\n CloseOutlined,\n AudioOutlined,\n FileZipOutlined,\n VideoCameraOutlined,\n FileMarkdownOutlined,\n PictureOutlined,\n} from \"@ant-design/icons\";\nimport {\n FileItem,\n FileGalleryProps,\n FileIconType,\n ImageDisplayMode,\n FileCardType,\n} from \"@/types\";\nimport { useStyles } from \"./styles\";\n\n// ==================== 工具函数 ====================\n\nconst getFileName = (file: FileItem): string =>\n file.displayName || file.name || \"\";\n\nconst getFileSize = (file: FileItem): number => file.size || 0;\n\nconst getMimeType = (file: FileItem): string =>\n file.mimeType || file.type || \"\";\n\nconst getFileUrl = (file: FileItem): string =>\n file.fileUri ||\n file.response?.fileUrl ||\n file.response?.tempUrl ||\n file.tempUrl ||\n \"\";\n\nconst getFileId = (file: FileItem): string => file.id || file.uid || \"\";\n\nconst getFileExtension = (filename: string): string => {\n const ext = filename.split(\".\").pop();\n return ext ? ext.toLowerCase() : \"\";\n};\n\nconst IMAGE_EXTS = [\"jpg\", \"jpeg\", \"png\", \"gif\", \"webp\", \"bmp\", \"svg\"];\nconst AUDIO_EXTS = [\"mp3\", \"wav\", \"m4a\", \"aac\", \"ogg\", \"flac\"];\nconst VIDEO_EXTS = [\"mp4\", \"mov\", \"webm\", \"mkv\", \"avi\"];\n\n/** 自动推断文件卡片类型 */\nconst inferFileType = (file: FileItem): FileCardType => {\n const mimeType = getMimeType(file);\n if (mimeType.startsWith(\"image/\")) return \"image\";\n if (mimeType.startsWith(\"audio/\")) return \"audio\";\n if (mimeType.startsWith(\"video/\")) return \"video\";\n\n const ext = getFileExtension(getFileName(file));\n if (IMAGE_EXTS.includes(ext)) return \"image\";\n if (AUDIO_EXTS.includes(ext)) return \"audio\";\n if (VIDEO_EXTS.includes(ext)) return \"video\";\n\n // URL 扩展名兜底\n const url = getFileUrl(file);\n const urlExtMatch = url.match(/\\.(\\w+)(\\?.*)?$/);\n if (urlExtMatch) {\n const urlExt = urlExtMatch[1].toLowerCase();\n if (IMAGE_EXTS.includes(urlExt)) return \"image\";\n if (AUDIO_EXTS.includes(urlExt)) return \"audio\";\n if (VIDEO_EXTS.includes(urlExt)) return \"video\";\n }\n\n return \"file\";\n};\n\n/** 根据扩展名获取文件图标类型 key */\nconst getFileIconType = (file: FileItem): FileIconType => {\n const ext = getFileExtension(getFileName(file));\n if (ext === \"pdf\") return \"pdf\";\n if ([\"doc\", \"docx\"].includes(ext)) return \"word\";\n if ([\"xls\", \"xlsx\", \"csv\"].includes(ext)) return \"excel\";\n if ([\"ppt\", \"pptx\"].includes(ext)) return \"ppt\";\n if (AUDIO_EXTS.includes(ext)) return \"audio\";\n if (VIDEO_EXTS.includes(ext)) return \"video\";\n if ([\"zip\", \"rar\", \"7z\", \"tar\", \"gz\", \"bz2\", \"xz\", \"tgz\"].includes(ext))\n return \"zip\";\n if ([\"md\", \"markdown\"].includes(ext)) return \"markdown\";\n if (IMAGE_EXTS.includes(ext)) return \"image\";\n return \"default\";\n};\n\n/** 默认图标映射 */\nconst DEFAULT_ICON_MAP: Record<\n FileIconType,\n { icon: React.ReactNode; color: string }\n> = {\n pdf: { icon: <FilePdfOutlined />, color: \"#ff4d4f\" },\n word: { icon: <FileWordOutlined />, color: \"#1677ff\" },\n excel: { icon: <FileExcelOutlined />, color: \"#22b35e\" },\n ppt: { icon: <FilePptOutlined />, color: \"#ff6e31\" },\n audio: { icon: <AudioOutlined />, color: \"#722ed1\" },\n video: { icon: <VideoCameraOutlined />, color: \"#fa8c16\" },\n zip: { icon: <FileZipOutlined />, color: \"#eb2f96\" },\n markdown: { icon: <FileMarkdownOutlined />, color: \"#13c2c2\" },\n image: { icon: <FileImageOutlined />, color: \"#8c8c8c\" },\n default: { icon: <FileOutlined />, color: \"#8c8c8c\" },\n};\n\nconst formatFileSize = (bytes: number): string => {\n if (bytes < 1024) return bytes + \" B\";\n if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(1) + \" KB\";\n return (bytes / (1024 * 1024)).toFixed(1) + \" MB\";\n};\n\nconst FALLBACK_IMAGE =\n \"data:image/png;base64,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\";\n\n// ==================== 子组件:图片加载状态管理 ====================\n\nconst ImageWithLoading: React.FC<{\n src: string;\n alt: string;\n width?: number | string;\n height?: number | string;\n loading?: \"lazy\" | \"eager\";\n preview?: false | { src: string };\n fallback?: string;\n displayMode: ImageDisplayMode;\n className?: string;\n styles: ReturnType<typeof useStyles>;\n}> = ({\n src,\n alt,\n width,\n height,\n loading,\n preview,\n fallback,\n displayMode,\n className,\n styles,\n}) => {\n const [loadState, setLoadState] = useState<\n \"loading\" | \"loaded\" | \"error\"\n >(\"loading\");\n\n useEffect(() => {\n setLoadState(\"loading\");\n }, [src]);\n\n const modeClass =\n displayMode === \"full\"\n ? styles.imageFullMode\n : displayMode === \"preview\"\n ? styles.imagePreviewMode\n : styles.imageThumbnail;\n\n const containerStyle: React.CSSProperties = {};\n if (width)\n containerStyle.width = typeof width === \"number\" ? `${width}px` : width;\n if (height)\n containerStyle.height = typeof height === \"number\" ? `${height}px` : height;\n\n return (\n <div\n className={`${modeClass} ${className || \"\"}`}\n style={containerStyle}\n >\n {loadState === \"loading\" && (\n <div className={styles.imageLoadingSkeleton}>\n <PictureOutlined style={{ fontSize: 20, color: \"#d9d9d9\" }} />\n </div>\n )}\n\n {loadState === \"error\" && (\n <div className={styles.imageErrorFallback}>\n <PictureOutlined />\n <span>加载失败</span>\n </div>\n )}\n\n <Image\n src={src}\n alt={alt}\n fallback={fallback}\n preview={preview}\n loading={loading}\n style={{\n display: loadState === \"error\" ? \"none\" : \"block\",\n opacity: loadState === \"loading\" ? 0 : 1,\n transition: \"opacity 0.3s ease\",\n ...(displayMode === \"thumbnail\"\n ? { width: \"100%\", height: \"100%\", objectFit: \"cover\" }\n : { maxWidth: \"100%\", objectFit: \"contain\" }),\n }}\n onLoad={() => setLoadState(\"loaded\")}\n onError={() => setLoadState(\"error\")}\n />\n </div>\n );\n};\n\n// ==================== 主组件 ====================\n\nconst FileGallery: React.FC<FileGalleryProps> = ({\n file,\n align = \"left\",\n size = \"default\",\n removable = false,\n onRemove = () => {},\n className,\n style,\n onClick,\n type: customType,\n // 图片相关\n imageDisplayMode = \"thumbnail\",\n imageWidth,\n imageHeight,\n imageLoading = \"eager\",\n imageAlt,\n // 音视频相关\n mediaAutoPlay = false,\n mediaLoop = false,\n mediaMuted = false,\n mediaPoster,\n videoProps,\n audioProps,\n // 自定义图标\n iconMap,\n customIcon,\n}) => {\n const styles = useStyles();\n const [objectUrl, setObjectUrl] = useState(\"\");\n\n useEffect(() => {\n if (!file?.file) return;\n const url = URL.createObjectURL(file.file);\n setObjectUrl(url);\n return () => URL.revokeObjectURL(url);\n }, [file?.file]);\n\n if (!file) return null;\n\n const fileName = getFileName(file);\n const fileSize = getFileSize(file);\n const fileId = getFileId(file);\n const url = getFileUrl(file) || objectUrl;\n const isSmall = size === \"small\";\n const cardClassName = `${styles.fileCard} ${isSmall ? styles.fileCardSmall : \"\"} ${align === \"right\" ? \"align-right\" : \"\"} ${className || \"\"}`;\n\n // 核心逻辑:type prop 决定渲染方式(参考 file-card)\n // - 不传 type:自动推断,图片/音频/视频用原生渲染\n // - type=\"file\":强制附件卡片(音视频不可播放)\n // - type=\"image\"/\"audio\"/\"video\":强制指定类型\n const fileType = useMemo<FileCardType>(\n () => customType || inferFileType(file),\n [customType, file],\n );\n\n /** 获取图标(支持自定义) */\n const getIcon = (\n iconType: FileIconType,\n ): { icon: React.ReactNode; color: string } => {\n if (customIcon) return { icon: customIcon, color: \"inherit\" };\n if (iconMap?.[iconType])\n return { icon: iconMap[iconType]!, color: \"inherit\" };\n return DEFAULT_ICON_MAP[iconType];\n };\n\n // ==================== 渲染删除按钮 ====================\n const renderRemoveBtn = () =>\n removable ? (\n <button\n className={`${styles.fileRemoveBtn} ${isSmall ? styles.fileRemoveBtnSmall : \"\"}`}\n onClick={(e) => {\n e.stopPropagation();\n onRemove(fileId);\n }}\n disabled={file.status === \"uploading\"}\n aria-label=\"删除文件\"\n >\n <CloseOutlined />\n </button>\n ) : null;\n\n // ==================== 渲染上传进度遮罩 ====================\n const renderUploadOverlay = () =>\n file.status === \"uploading\" ? (\n <div className={styles.imageOverlay}>\n <Progress\n type=\"circle\"\n percent={file.progress}\n size={30}\n strokeColor=\"#1677ff\"\n />\n </div>\n ) : null;\n\n // ==================== 附件卡片渲染(type=\"file\" 或普通文档) ====================\n const renderFileCard = () => {\n const iconType = getFileIconType(file);\n const { icon, color } = getIcon(iconType);\n const isExternalUrl = url && url.startsWith(\"http\");\n\n return (\n <div\n className={cardClassName}\n style={{ ...style, cursor: onClick ? \"pointer\" : undefined }}\n onClick={() => onClick?.(file)}\n >\n <div\n className={`${styles.fileIcon} ${isSmall ? styles.fileIconSmall : \"\"}`}\n style={{ color }}\n >\n {icon}\n </div>\n\n <div className={styles.fileInfo}>\n {isExternalUrl && !onClick ? (\n <a\n href={url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className={styles.fileLink}\n >\n <Tooltip title={fileName}>\n <div className={`${styles.fileName} ${isSmall ? styles.fileNameSmall : \"\"}`}>\n {fileName.length > 15\n ? `${fileName.substring(0, 15)}...`\n : fileName}\n </div>\n </Tooltip>\n </a>\n ) : (\n <Tooltip title={fileName}>\n <div className={`${styles.fileName} ${isSmall ? styles.fileNameSmall : \"\"}`}>\n {fileName.length > 15\n ? `${fileName.substring(0, 15)}...`\n : fileName}\n </div>\n </Tooltip>\n )}\n\n {file.status === \"uploading\" ? (\n <Progress\n percent={file.progress}\n size=\"small\"\n showInfo={false}\n strokeColor=\"#1677ff\"\n className={`${styles.progress} ${isSmall ? styles.progressSmall : \"\"}`}\n />\n ) : (\n !isSmall && fileSize > 0 && (\n <div className={styles.fileSize}>\n {formatFileSize(fileSize)}\n </div>\n )\n )}\n\n {file.status === \"error\" && file.errorMessage && (\n <div\n style={{ fontSize: \"11px\", color: \"#ff4d4f\", marginTop: \"2px\" }}\n >\n {file.errorMessage}\n </div>\n )}\n </div>\n\n {renderRemoveBtn()}\n </div>\n );\n };\n\n // ==================== 图片渲染 ====================\n if (fileType === \"image\") {\n // full / preview 模式:独立展示\n if (imageDisplayMode === \"full\" || imageDisplayMode === \"preview\") {\n const containerStyle: React.CSSProperties = { ...style };\n if (imageWidth)\n containerStyle.width =\n typeof imageWidth === \"number\" ? `${imageWidth}px` : imageWidth;\n if (imageHeight)\n containerStyle.height =\n typeof imageHeight === \"number\" ? `${imageHeight}px` : imageHeight;\n\n return (\n <div\n className={`${imageDisplayMode === \"full\" ? styles.imageFullMode : styles.imagePreviewMode} ${className || \"\"}`}\n style={containerStyle}\n >\n <ImageWithLoading\n src={url}\n alt={imageAlt || fileName}\n displayMode={imageDisplayMode}\n loading={imageLoading}\n preview={onClick ? false : { src: url }}\n fallback={FALLBACK_IMAGE}\n styles={styles}\n />\n {renderUploadOverlay()}\n {renderRemoveBtn()}\n </div>\n );\n }\n\n // thumbnail 模式:卡片形式\n return (\n <div\n className={cardClassName}\n style={{ ...style, cursor: onClick ? \"pointer\" : undefined }}\n onClick={() => onClick?.(file)}\n >\n <ImageWithLoading\n src={url}\n alt={imageAlt || fileName}\n width={size === \"small\" ? 22 : imageWidth}\n height={size === \"small\" ? 22 : imageHeight}\n displayMode=\"thumbnail\"\n loading={imageLoading}\n preview={onClick ? false : { src: url }}\n fallback={FALLBACK_IMAGE}\n styles={styles}\n className={isSmall ? styles.imageThumbnailSmall : undefined}\n />\n {renderUploadOverlay()}\n\n <div className={styles.fileInfo}>\n <Tooltip title={fileName}>\n <div className={`${styles.fileName} ${isSmall ? styles.fileNameSmall : \"\"}`}>\n {fileName.length > 15\n ? `${fileName.substring(0, 15)}...`\n : fileName}\n </div>\n </Tooltip>\n {!isSmall && Number(file?.size) > 0 && (\n <div className={styles.fileSize}>{formatFileSize(fileSize)}</div>\n )}\n </div>\n\n {renderRemoveBtn()}\n </div>\n );\n }\n\n // ==================== 音频渲染(原生播放器,无卡片包裹) ====================\n if (fileType === \"audio\" && size !== \"small\") {\n return (\n <div\n className={`file-gallery-audio ${className || \"\"}`}\n style={{ position: \"relative\", width: 268, ...style }}\n >\n <audio\n src={url}\n controls\n autoPlay={mediaAutoPlay}\n loop={mediaLoop}\n muted={mediaMuted}\n style={{ width: \"100%\" }}\n {...audioProps}\n />\n {renderRemoveBtn()}\n </div>\n );\n }\n\n // ==================== 视频渲染(原生播放器,无卡片包裹) ====================\n if (fileType === \"video\" && size !== \"small\") {\n return (\n <div\n className={`file-gallery-video ${className || \"\"}`}\n style={{ position: \"relative\", width: 268, ...style }}\n >\n <video\n src={url}\n controls\n autoPlay={mediaAutoPlay}\n loop={mediaLoop}\n muted={mediaMuted}\n poster={mediaPoster}\n style={{\n width: \"100%\",\n aspectRatio: \"16 / 9\",\n borderRadius: 8,\n background: \"#000\",\n }}\n {...videoProps}\n />\n {renderRemoveBtn()}\n </div>\n );\n }\n\n // ==================== 其他文件(附件卡片) ====================\n return renderFileCard();\n};\n\nexport default FileGallery;\n"],"mappings":"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"}
|
|
@@ -2,14 +2,21 @@ export declare const useStyles: () => {
|
|
|
2
2
|
container: string;
|
|
3
3
|
fileList: string;
|
|
4
4
|
fileCard: string;
|
|
5
|
+
fileCardSmall: string;
|
|
5
6
|
imageThumbnail: string;
|
|
7
|
+
imageThumbnailSmall: string;
|
|
6
8
|
imageOverlay: string;
|
|
7
9
|
fileIcon: string;
|
|
10
|
+
fileIconSmall: string;
|
|
8
11
|
fileInfo: string;
|
|
9
12
|
fileName: string;
|
|
13
|
+
fileNameSmall: string;
|
|
10
14
|
fileSize: string;
|
|
15
|
+
fileSizeSmall: string;
|
|
11
16
|
progress: string;
|
|
17
|
+
progressSmall: string;
|
|
12
18
|
fileRemoveBtn: string;
|
|
19
|
+
fileRemoveBtnSmall: string;
|
|
13
20
|
fileLink: string;
|
|
14
21
|
mediaWrapper: string;
|
|
15
22
|
imagePreviewMode: string;
|