@ai-group/chat-sdk 3.0.7 → 3.0.8

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.
@@ -1 +1 @@
1
- {"version":3,"names":["useState","XAdkSender","jsx","_jsx","meta","title","component","parameters","layout","tags","argTypes","BasicUsageStory","_useState","_useState2","_slicedToArray","files","setFiles","_useState3","_useState4","content","setContent","_useState5","_useState6","loading","setLoading","handleSubmit","data","console","info","handleClear","handleStop","handleChange","text","handleSendMessage","obj","setTimeout","style","width","border","padding","children","clearBtnShow","allowUpload","uploadRequest","_ref2","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_ref","file","onProgress","onSuccess","onError","formData","progress","interval","wrap","_callee$","_context","prev","next","FormData","append","setInterval","percent","clearInterval","mockResponse","code","fileId","Math","floor","random","tempUrl","concat","name","fileName","fileType","split","pop","error","stop","_x","apply","arguments","onSubmit","onClear","onStop","基础用法","render","args"],"sources":["../../../../src/components/XAdkSender/XAdkSender.stories.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport type { Meta, StoryObj } from \"@storybook/react-vite\";\nimport type { Attachment } from \"@ant-design/x/es/attachments\";\nimport XAdkSender from \".\";\n\nconst meta: Meta<typeof XAdkSender> = {\n title: \"AI组件/XAdkSender 输入框\",\n component: XAdkSender,\n parameters: {\n layout: \"centered\",\n },\n tags: [\"autodocs\"],\n argTypes: {},\n};\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\n// 基础用法\nconst BasicUsageStory = () => {\n const [files, setFiles] = useState<Attachment[]>([]);\n const [content, setContent] = useState(\"\");\n const [loading, setLoading] = useState(false);\n\n // 模拟清空数据\n const handleSubmit = (data: any) => {\n console.info(\"submit\", data);\n };\n\n const handleClear = () => {\n console.info(\"clear\");\n };\n\n // 模拟停止发送\n const handleStop = () => {\n console.info(\"stop\");\n };\n\n // 模拟输入\n const handleChange = (text: string) => {\n setContent(text);\n };\n\n // 模拟快捷短语点击\n const handleSendMessage = (obj: any) => {\n setLoading(true);\n setTimeout(() => {\n setContent(\"\");\n setFiles([]);\n setLoading(false);\n }, 2000);\n };\n\n return (\n <div style={{ width: 800, border: \"1px solid #eee\", padding: 20 }}>\n <XAdkSender\n loading={loading}\n clearBtnShow={true}\n allowUpload={true}\n uploadRequest={async ({ file, onProgress, onSuccess, onError }) => {\n try {\n // 创建 FormData\n const formData = new FormData();\n formData.append(\"file\", file);\n\n // 模拟上传进度\n let progress = 0;\n const interval = setInterval(() => {\n progress += 10;\n onProgress?.({ percent: progress });\n\n if (progress >= 100) {\n clearInterval(interval);\n // 模拟成功响应\n const mockResponse = {\n code: 200,\n data: {\n fileId: Math.floor(Math.random() * 1000) + 1,\n tempUrl: `https://example.com/uploads/${file.name}`,\n fileName: file.name,\n fileType: file.name.split(\".\").pop() || \"\",\n },\n };\n onSuccess?.(mockResponse);\n }\n }, 100);\n } catch (error) {\n onError?.(error as Error);\n }\n }}\n onSubmit={handleSubmit}\n onClear={handleClear}\n onStop={handleStop}\n />\n </div>\n );\n};\n\nexport const 基础用法: Story = {\n render: BasicUsageStory,\n args: {},\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["useState","XAdkSender","jsx","_jsx","meta","title","component","parameters","layout","tags","argTypes","BasicUsageStory","_useState","_useState2","_slicedToArray","files","setFiles","_useState3","_useState4","content","setContent","_useState5","_useState6","loading","setLoading","handleSubmit","data","console","info","handleClear","handleStop","handleChange","text","handleSendMessage","obj","setTimeout","style","width","border","padding","children","clearBtnShow","allowUpload","uploadRequest","_ref2","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_ref","file","onProgress","onSuccess","onError","formData","progress","interval","wrap","_callee$","_context","prev","next","FormData","append","setInterval","percent","clearInterval","mockResponse","code","fileId","Math","floor","random","tempUrl","concat","name","fileName","fileType","split","pop","fileSize","fize","error","stop","_x","apply","arguments","onSubmit","onClear","onStop","基础用法","render","args"],"sources":["../../../../src/components/XAdkSender/XAdkSender.stories.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport type { Meta, StoryObj } from \"@storybook/react-vite\";\nimport type { Attachment } from \"@ant-design/x/es/attachments\";\nimport XAdkSender from \".\";\n\nconst meta: Meta<typeof XAdkSender> = {\n title: \"AI组件/XAdkSender 输入框\",\n component: XAdkSender,\n parameters: {\n layout: \"centered\",\n },\n tags: [\"autodocs\"],\n argTypes: {},\n};\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\n// 基础用法\nconst BasicUsageStory = () => {\n const [files, setFiles] = useState<Attachment[]>([]);\n const [content, setContent] = useState(\"\");\n const [loading, setLoading] = useState(false);\n\n // 模拟清空数据\n const handleSubmit = (data: any) => {\n console.info(\"submit\", data);\n };\n\n const handleClear = () => {\n console.info(\"clear\");\n };\n\n // 模拟停止发送\n const handleStop = () => {\n console.info(\"stop\");\n };\n\n // 模拟输入\n const handleChange = (text: string) => {\n setContent(text);\n };\n\n // 模拟快捷短语点击\n const handleSendMessage = (obj: any) => {\n setLoading(true);\n setTimeout(() => {\n setContent(\"\");\n setFiles([]);\n setLoading(false);\n }, 2000);\n };\n\n return (\n <div style={{ width: 800, border: \"1px solid #eee\", padding: 20 }}>\n <XAdkSender\n loading={loading}\n clearBtnShow={true}\n allowUpload={true}\n uploadRequest={async ({ file, onProgress, onSuccess, onError }) => {\n try {\n // 创建 FormData\n const formData = new FormData();\n formData.append(\"file\", file);\n\n // 模拟上传进度\n let progress = 0;\n const interval = setInterval(() => {\n progress += 10;\n onProgress?.({ percent: progress });\n\n if (progress >= 100) {\n clearInterval(interval);\n // 模拟成功响应\n const mockResponse = {\n code: 200,\n data: {\n fileId: Math.floor(Math.random() * 1000) + 1,\n tempUrl: `https://example.com/uploads/${file.name}`,\n fileName: file.name,\n fileType: file.name.split(\".\").pop() || \"\",\n fileSize: 11234,\n fize: 22333,\n },\n };\n onSuccess?.(mockResponse);\n }\n }, 100);\n } catch (error) {\n onError?.(error as Error);\n }\n }}\n onSubmit={handleSubmit}\n onClear={handleClear}\n onStop={handleStop}\n />\n </div>\n );\n};\n\nexport const 基础用法: Story = {\n render: BasicUsageStory,\n args: {},\n};\n"],"mappings":"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"}
@@ -420,7 +420,9 @@ var XAdkSender = function XAdkSender(_ref) {
420
420
  fileId: responseData.fileId || responseData.id || 0,
421
421
  tempUrl: responseData.tempUrl || responseData.url || "",
422
422
  type: responseData.fileType || getExt(file),
423
- mimeType: file.type
423
+ size: responseData.fileSize,
424
+ mimeType: file.type,
425
+ raw: _objectSpread({}, responseData)
424
426
  };
425
427
  });
426
428
  };
@@ -1 +1 @@
1
- {"version":3,"names":["React","useState","useRef","useCallback","Popconfirm","message","Tooltip","Input","Modal","ClearOutlined","LoadingOutlined","ArrowUpOutlined","PaperClipOutlined","useStyles","FileGallery","getExt","jsx","_jsx","jsxs","_jsxs","XAdkSender","_ref","_ref$clearBtnShow","clearBtnShow","_ref$allowUpload","allowUpload","_ref$loading","loading","_ref$disabled","disabled","_ref$uploadRequest","uploadRequest","onClear","onChange","onSubmit","onStop","onFilesChange","onUploadSuccess","onUploadError","_ref$maxFileSize","maxFileSize","_ref$validators","validators","customValidators","_ref$allowedFileTypes","allowedFileTypes","_ref$maxFiles","maxFiles","suffix","header","prefix","footer","styles","_useState","_useState2","_slicedToArray","value","setValue","_useState3","_useState4","files","setFiles","_useState5","_useState6","isDragOver","setIsDragOver","containerRef","fileInputRef","generateId","Date","now","toString","Math","random","substr","checkFileType","file","length","ext","some","type","includes","endsWith","startsWith","split","slice","checkFileSize","maxSize","size","isDuplicateFile","f","name","builtInValidators","_file","_ref2","concat","_ref3","allValidators","_toConsumableArray","validateFile","_iterator","_createForOfIteratorHelper","_step","s","n","done","validator","error","valid","err","e","handleFileSelect","selectedFiles","fileArray","Array","from","validFiles","forEach","validation","push","id","uid","progress","status","response","prev","next","uploadFiles","_ref4","_asyncToGenerator","_regeneratorRuntime","mark","_callee","fileList","_iterator2","_step2","_loop","wrap","_callee$","_context2","localFile","_loop$","_context","map","_objectSpread","onProgress","percent","onSuccess","onError","errorMessage","t0","console","Error","stop","delegateYield","t1","finish","_x","apply","arguments","handleRemoveFile","filter","triggerFileSelect","current","click","handleDragOver","preventDefault","stopPropagation","handleDragLeave","handleDrop","dataTransfer","handleSubmit","trim","warning","successFiles","uploadingFiles","confirm","title","content","okText","cancelText","onOk","formattedFiles","formatFilesForServer","text","onCancel","info","_file$response","data","responseData","fileName","fileId","tempUrl","url","fileType","mimeType","handleInputChange","newValue","target","handleKeyDown","key","shiftKey","renderFileList","style","display","flexWrap","gap","padding","children","removable","onRemove","containerClass","container","uploading","isDisabled","SendButton","props","className","iconButton","sendButton","onClick","UploadButton","uploadButton","ClearButton","onConfirm","placement","clearButton","actionsComponents","renderSlot","slot","oriNode","undefined","result","components","defaultSuffix","buttonGroup","ref","onDragOver","onDragLeave","onDrop","multiple","accept","join","mainArea","senderWrap","inputAndButtons","textAreaWrapper","TextArea","textArea","onKeyDown","placeholder","autoSize","minRows","maxRows","border","boxShadow","outline","tip"],"sources":["../../../../src/components/XAdkSender/index.tsx"],"sourcesContent":["import React, { useState, useRef, useCallback } from \"react\";\nimport { Popconfirm, message, Tooltip, Input, Modal } from \"antd\";\nimport {\n ClearOutlined,\n LoadingOutlined,\n ArrowUpOutlined,\n PaperClipOutlined,\n} from \"@ant-design/icons\";\nimport {\n XAdkSenderProps,\n ServerFile,\n LocalFile,\n ActionsComponents,\n FileValidator,\n} from \"@/types\";\nimport { useStyles } from \"./styles\";\nimport FileGallery from \"../FileGallery\";\nimport { getExt } from \"@/utils/file\";\n\nconst XAdkSender: React.FC<XAdkSenderProps> = ({\n clearBtnShow = true,\n allowUpload = false,\n loading = false,\n disabled = false,\n uploadRequest = () => {},\n onClear,\n onChange,\n onSubmit,\n onStop,\n onFilesChange,\n onUploadSuccess,\n onUploadError,\n maxFileSize = 10,\n validators: customValidators = [],\n // allowedFileTypes = [\n // \"image/*\",\n // \"audio/*\",\n // \"video/*\",\n // \"application/pdf\",\n // \"text/plain\",\n // \".doc\",\n // \".docx\",\n // \".xls\",\n // \".xlsx\",\n // \".ppt\",\n // \".pptx\",\n // \"\",\n // ],\n allowedFileTypes = [],\n maxFiles = 5,\n suffix,\n header,\n prefix,\n footer,\n}) => {\n const styles = useStyles();\n const [value, setValue] = useState<string>(\"\");\n const [files, setFiles] = useState<LocalFile[]>([]);\n const [isDragOver, setIsDragOver] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n // 生成唯一ID\n const generateId = () => {\n return Date.now().toString(36) + Math.random().toString(36).substr(2);\n };\n\n // 检查文件类型\n const checkFileType = (file: File): boolean => {\n if (allowedFileTypes?.length > 0) {\n const ext = getExt(file);\n\n return allowedFileTypes.some((type) => {\n // 1️⃣ MIME 校验\n if (type.includes(\"/\")) {\n if (type.endsWith(\"/*\")) {\n return file.type.startsWith(type.split(\"/\")[0]);\n }\n return file.type === type;\n }\n\n if (type.startsWith(\".\")) {\n return ext === type.slice(1);\n }\n\n return false;\n });\n }\n return true;\n };\n\n // 检查文件大小\n const checkFileSize = (file: File): boolean => {\n const maxSize = maxFileSize * 1024 * 1024;\n return file.size <= maxSize;\n };\n\n // 重复文件检测\n const isDuplicateFile = (file: File, files: LocalFile[]) => {\n return files.some((f) => f.name === file.name && f.size === file.size);\n };\n\n // 内置校验器集合\n const builtInValidators: FileValidator[] = [\n // 数量校验(修复批量 bug)\n (_file, { files }) => {\n if (files.length >= maxFiles) {\n return `最多只能上传 ${maxFiles} 个文件`;\n }\n return null;\n },\n\n // 大小校验\n (file) => {\n const maxSize = maxFileSize * 1024 * 1024;\n if (file.size > maxSize) {\n return `文件大小不能超过 ${maxFileSize}MB`;\n }\n return null;\n },\n\n // 类型校验\n (file) => {\n if (!checkFileType(file)) {\n return \"不支持的文件类型\";\n }\n return null;\n },\n\n // ⭐ 新增:去重校验\n (file, { files }) => {\n if (isDuplicateFile(file, files)) {\n return \"文件已存在\";\n }\n return null;\n },\n ];\n\n const allValidators = [...builtInValidators, ...customValidators];\n\n // 验证文件\n const validateFile = (file: File): { valid: boolean; message?: string } => {\n for (const validator of allValidators) {\n const error = validator(file, { files });\n if (error) {\n return { valid: false, message: error };\n }\n }\n return { valid: true };\n };\n\n // 处理文件选择\n const handleFileSelect = useCallback(\n (selectedFiles: File[]) => {\n const fileArray = Array.from(selectedFiles);\n\n if (files.length + fileArray.length > maxFiles) {\n message.error(`最多只能上传 ${maxFiles} 个文件`);\n return;\n }\n\n const validFiles: LocalFile[] = [];\n\n fileArray.forEach((file) => {\n const validation = validateFile(file);\n\n if (validation.valid) {\n validFiles.push({\n id: generateId(),\n uid: generateId(),\n name: file.name,\n size: file.size,\n type: file.type,\n file,\n progress: 0,\n status: \"pending\",\n response: null,\n });\n } else {\n message.error(validation.message);\n }\n });\n\n if (validFiles.length > 0) {\n setFiles((prev) => {\n const next = [...prev, ...validFiles];\n onFilesChange?.(next);\n return next;\n });\n uploadFiles(validFiles);\n }\n },\n [files, maxFiles, maxFileSize, allowedFileTypes],\n );\n\n // 上传文件\n const uploadFiles = async (fileList: LocalFile[]) => {\n for (const localFile of fileList) {\n // 开始上传\n setFiles((prev) =>\n prev.map((f) =>\n f.id === localFile.id ? { ...f, status: \"uploading\" } : f,\n ),\n );\n\n try {\n await uploadRequest({\n file: localFile.file,\n onProgress: (e) => {\n setFiles((prev) =>\n prev.map((f) =>\n f.id === localFile.id ? { ...f, progress: e.percent } : f,\n ),\n );\n },\n onSuccess: (response) => {\n setFiles((prev) =>\n prev.map((f) =>\n f.id === localFile.id\n ? {\n ...f,\n status: \"success\",\n progress: 100,\n response,\n }\n : f,\n ),\n );\n\n onUploadSuccess?.({\n ...localFile,\n status: \"success\",\n response,\n });\n },\n onError: (error) => {\n setFiles((prev) =>\n prev.map((f) =>\n f.id === localFile.id\n ? {\n ...f,\n status: \"error\",\n errorMessage: error.message,\n }\n : f,\n ),\n );\n onUploadError?.(localFile, error);\n },\n });\n } catch (error) {\n console.error(\"上传处理错误:\", error);\n setFiles((prev) =>\n prev.map((f) =>\n f.id === localFile.id\n ? {\n ...f,\n status: \"error\",\n errorMessage:\n error instanceof Error ? error.message : \"上传处理失败\",\n }\n : f,\n ),\n );\n message.error(`${localFile.name} 上传失败`);\n }\n }\n };\n\n // 删除文件\n const handleRemoveFile = (id: string) => {\n setFiles((prev) => {\n const next = prev.filter((file) => file.id !== id);\n\n onFilesChange?.(next);\n\n return next;\n });\n };\n\n // 触发文件选择\n const triggerFileSelect = () => {\n if (fileInputRef.current) {\n fileInputRef.current.click();\n }\n };\n\n // 处理拖拽事件\n const handleDragOver = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (allowUpload) {\n setIsDragOver(true);\n }\n },\n [allowUpload],\n );\n\n const handleDragLeave = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (allowUpload) {\n setIsDragOver(false);\n }\n },\n [allowUpload],\n );\n\n const handleDrop = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragOver(false);\n\n if (\n allowUpload &&\n e.dataTransfer.files &&\n e.dataTransfer.files.length > 0\n ) {\n handleFileSelect(Array.from(e.dataTransfer.files));\n }\n },\n [allowUpload, handleFileSelect],\n );\n\n // 处理提交\n const handleSubmit = () => {\n if (!value.trim() && files.length === 0) {\n message.warning(\"请输入消息或选择文件\");\n return;\n }\n\n const successFiles = files.filter((file) => file.status === \"success\");\n const uploadingFiles = files.filter((file) => file.status === \"uploading\");\n\n if (uploadingFiles.length > 0) {\n Modal.confirm({\n title: \"文件上传中\",\n content: `还有 ${uploadingFiles.length} 个文件正在上传,是否继续发送?`,\n okText: \"发送已完成的\",\n cancelText: \"等待全部完成\",\n onOk: () => {\n const formattedFiles = formatFilesForServer(successFiles);\n if (onSubmit) {\n onSubmit({\n text: value,\n files: formattedFiles,\n });\n }\n\n setValue(\"\");\n setFiles((prev) => prev.filter((f) => f.status !== \"success\"));\n },\n onCancel: () => {\n message.info(\"请等待文件上传完成后再发送\");\n },\n });\n } else {\n const formattedFiles = formatFilesForServer(successFiles);\n\n if (onSubmit) {\n onSubmit({\n text: value,\n files: formattedFiles,\n });\n }\n\n setValue(\"\");\n setFiles((prev) => prev.filter((f) => f.status !== \"success\"));\n }\n };\n\n // 格式化文件列表为服务端格式\n const formatFilesForServer = (fileList: LocalFile[]): ServerFile[] => {\n return fileList\n .filter((file) => file.status === \"success\" && file.response?.data)\n .map((file) => {\n const responseData = file.response.data;\n\n return {\n fileName: file.name,\n fileId: responseData.fileId || responseData.id || 0,\n tempUrl: responseData.tempUrl || responseData.url || \"\",\n type: responseData.fileType || getExt(file),\n mimeType: file.type,\n };\n });\n };\n\n // 处理输入框变化\n const handleInputChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const newValue = e.target.value;\n setValue(newValue);\n onChange?.(newValue);\n };\n\n // 处理回车键\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n handleSubmit();\n }\n };\n\n // 渲染文件列表 - 使用新的 FileGallery 组件\n const renderFileList = () => {\n if (files.length === 0) return null;\n\n return (\n <div style={{ display: \"flex\", flexWrap: \"wrap\", gap: \"8px\", padding: \"12px 0\" }}>\n {files.map((file) => (\n <FileGallery\n key={file.id}\n file={file}\n removable\n onRemove={handleRemoveFile}\n />\n ))}\n </div>\n );\n };\n\n const containerClass = `${styles.container} ${isDragOver ? \"drag-over\" : \"\"}`;\n const uploading = files.some((f) => f.status === \"uploading\");\n const isDisabled = disabled || uploading || loading;\n\n // 定义按钮组件\n const SendButton = (props: any) => (\n <Tooltip title={loading ? \"停止生成\" : \"发送消息\"}>\n <button\n className={`${styles.iconButton} ${styles.sendButton} ${loading ? \"stop\" : \"\"}`}\n onClick={loading ? onStop : handleSubmit}\n disabled={uploading || disabled}\n aria-label={loading ? \"停止生成\" : \"发送消息\"}\n {...props}\n >\n {loading ? <LoadingOutlined /> : <ArrowUpOutlined />}\n </button>\n </Tooltip>\n );\n\n const UploadButton = (props: any) => (\n <Tooltip title=\"上传文件\">\n <button\n className={`${styles.iconButton} ${styles.uploadButton}`}\n onClick={triggerFileSelect}\n disabled={isDisabled}\n aria-label=\"上传文件\"\n {...props}\n >\n <PaperClipOutlined />\n </button>\n </Tooltip>\n );\n\n const ClearButton = (props: any) => (\n <Popconfirm\n title=\"确定要清空聊天记录吗?\"\n onConfirm={onClear}\n placement=\"top\"\n okText=\"确定\"\n cancelText=\"取消\"\n disabled={isDisabled}\n >\n <button\n className={`${styles.iconButton} ${styles.clearButton}`}\n disabled={isDisabled}\n aria-label=\"清空聊天记录\"\n {...props}\n >\n <ClearOutlined />\n </button>\n </Popconfirm>\n );\n\n const actionsComponents: ActionsComponents = {\n SendButton,\n UploadButton,\n ClearButton,\n };\n\n // 渲染插槽内容\n const renderSlot = (\n slot:\n | React.ReactNode\n | false\n | ((\n oriNode: React.ReactNode,\n info: { components: ActionsComponents },\n ) => React.ReactNode | false)\n | undefined,\n oriNode: React.ReactNode,\n ): React.ReactNode | null => {\n if (slot === false) return null;\n if (slot === undefined) return oriNode;\n if (typeof slot === \"function\") {\n const result = slot(oriNode, { components: actionsComponents });\n return result === false ? null : result;\n }\n return slot;\n };\n\n // 默认的后缀内容(操作按钮组)\n const defaultSuffix = (\n <div className={styles.buttonGroup}>\n {allowUpload && <UploadButton />}\n <SendButton />\n </div>\n );\n\n return (\n <div\n ref={containerRef}\n className={containerClass}\n onDragOver={allowUpload ? handleDragOver : undefined}\n onDragLeave={allowUpload ? handleDragLeave : undefined}\n onDrop={allowUpload ? handleDrop : undefined}\n >\n {/* 头部插槽 */}\n {renderSlot(header, false)}\n\n {allowUpload && files.length > 0 && renderFileList()}\n\n {/* 隐藏的原生 file input */}\n {allowUpload && (\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple\n accept={allowedFileTypes.join(\",\")}\n style={{ display: \"none\" }}\n onChange={(e) => {\n if (e.target.files) {\n handleFileSelect(Array.from(e.target.files));\n e.target.value = \"\";\n }\n }}\n />\n )}\n\n <div className={styles.mainArea}>\n <div className={styles.senderWrap}>\n {/* 清除按钮 */}\n {clearBtnShow && <ClearButton />}\n\n <div className={styles.inputAndButtons}>\n {/* 前缀插槽 */}\n {renderSlot(prefix, false)}\n\n <div className={styles.textAreaWrapper}>\n <Input.TextArea\n className={styles.textArea}\n value={value}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n placeholder=\"请输入消息...\"\n disabled={isDisabled}\n autoSize={{ minRows: 1, maxRows: 4 }}\n style={{\n border: \"none\",\n boxShadow: \"none\",\n outline: \"none\",\n padding: 0,\n }}\n />\n </div>\n\n {/* 后缀插槽(默认显示操作按钮) */}\n {renderSlot(suffix, defaultSuffix)}\n </div>\n </div>\n\n {/* 底部插槽(默认显示提示文字) */}\n {renderSlot(\n footer,\n <div className={styles.tip}>\n 内容由AI生成,无法确保真实准确,仅供参考\n </div>,\n )}\n </div>\n </div>\n );\n};\n\nexport default XAdkSender;\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","useState","useRef","useCallback","Popconfirm","message","Tooltip","Input","Modal","ClearOutlined","LoadingOutlined","ArrowUpOutlined","PaperClipOutlined","useStyles","FileGallery","getExt","jsx","_jsx","jsxs","_jsxs","XAdkSender","_ref","_ref$clearBtnShow","clearBtnShow","_ref$allowUpload","allowUpload","_ref$loading","loading","_ref$disabled","disabled","_ref$uploadRequest","uploadRequest","onClear","onChange","onSubmit","onStop","onFilesChange","onUploadSuccess","onUploadError","_ref$maxFileSize","maxFileSize","_ref$validators","validators","customValidators","_ref$allowedFileTypes","allowedFileTypes","_ref$maxFiles","maxFiles","suffix","header","prefix","footer","styles","_useState","_useState2","_slicedToArray","value","setValue","_useState3","_useState4","files","setFiles","_useState5","_useState6","isDragOver","setIsDragOver","containerRef","fileInputRef","generateId","Date","now","toString","Math","random","substr","checkFileType","file","length","ext","some","type","includes","endsWith","startsWith","split","slice","checkFileSize","maxSize","size","isDuplicateFile","f","name","builtInValidators","_file","_ref2","concat","_ref3","allValidators","_toConsumableArray","validateFile","_iterator","_createForOfIteratorHelper","_step","s","n","done","validator","error","valid","err","e","handleFileSelect","selectedFiles","fileArray","Array","from","validFiles","forEach","validation","push","id","uid","progress","status","response","prev","next","uploadFiles","_ref4","_asyncToGenerator","_regeneratorRuntime","mark","_callee","fileList","_iterator2","_step2","_loop","wrap","_callee$","_context2","localFile","_loop$","_context","map","_objectSpread","onProgress","percent","onSuccess","onError","errorMessage","t0","console","Error","stop","delegateYield","t1","finish","_x","apply","arguments","handleRemoveFile","filter","triggerFileSelect","current","click","handleDragOver","preventDefault","stopPropagation","handleDragLeave","handleDrop","dataTransfer","handleSubmit","trim","warning","successFiles","uploadingFiles","confirm","title","content","okText","cancelText","onOk","formattedFiles","formatFilesForServer","text","onCancel","info","_file$response","data","responseData","fileName","fileId","tempUrl","url","fileType","fileSize","mimeType","raw","handleInputChange","newValue","target","handleKeyDown","key","shiftKey","renderFileList","style","display","flexWrap","gap","padding","children","removable","onRemove","containerClass","container","uploading","isDisabled","SendButton","props","className","iconButton","sendButton","onClick","UploadButton","uploadButton","ClearButton","onConfirm","placement","clearButton","actionsComponents","renderSlot","slot","oriNode","undefined","result","components","defaultSuffix","buttonGroup","ref","onDragOver","onDragLeave","onDrop","multiple","accept","join","mainArea","senderWrap","inputAndButtons","textAreaWrapper","TextArea","textArea","onKeyDown","placeholder","autoSize","minRows","maxRows","border","boxShadow","outline","tip"],"sources":["../../../../src/components/XAdkSender/index.tsx"],"sourcesContent":["import React, { useState, useRef, useCallback } from \"react\";\nimport { Popconfirm, message, Tooltip, Input, Modal } from \"antd\";\nimport {\n ClearOutlined,\n LoadingOutlined,\n ArrowUpOutlined,\n PaperClipOutlined,\n} from \"@ant-design/icons\";\nimport {\n XAdkSenderProps,\n ServerFile,\n LocalFile,\n ActionsComponents,\n FileValidator,\n} from \"@/types\";\nimport { useStyles } from \"./styles\";\nimport FileGallery from \"../FileGallery\";\nimport { getExt } from \"@/utils/file\";\n\nconst XAdkSender: React.FC<XAdkSenderProps> = ({\n clearBtnShow = true,\n allowUpload = false,\n loading = false,\n disabled = false,\n uploadRequest = () => {},\n onClear,\n onChange,\n onSubmit,\n onStop,\n onFilesChange,\n onUploadSuccess,\n onUploadError,\n maxFileSize = 10,\n validators: customValidators = [],\n // allowedFileTypes = [\n // \"image/*\",\n // \"audio/*\",\n // \"video/*\",\n // \"application/pdf\",\n // \"text/plain\",\n // \".doc\",\n // \".docx\",\n // \".xls\",\n // \".xlsx\",\n // \".ppt\",\n // \".pptx\",\n // \"\",\n // ],\n allowedFileTypes = [],\n maxFiles = 5,\n suffix,\n header,\n prefix,\n footer,\n}) => {\n const styles = useStyles();\n const [value, setValue] = useState<string>(\"\");\n const [files, setFiles] = useState<LocalFile[]>([]);\n const [isDragOver, setIsDragOver] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n // 生成唯一ID\n const generateId = () => {\n return Date.now().toString(36) + Math.random().toString(36).substr(2);\n };\n\n // 检查文件类型\n const checkFileType = (file: File): boolean => {\n if (allowedFileTypes?.length > 0) {\n const ext = getExt(file);\n\n return allowedFileTypes.some((type) => {\n // 1️⃣ MIME 校验\n if (type.includes(\"/\")) {\n if (type.endsWith(\"/*\")) {\n return file.type.startsWith(type.split(\"/\")[0]);\n }\n return file.type === type;\n }\n\n if (type.startsWith(\".\")) {\n return ext === type.slice(1);\n }\n\n return false;\n });\n }\n return true;\n };\n\n // 检查文件大小\n const checkFileSize = (file: File): boolean => {\n const maxSize = maxFileSize * 1024 * 1024;\n return file.size <= maxSize;\n };\n\n // 重复文件检测\n const isDuplicateFile = (file: File, files: LocalFile[]) => {\n return files.some((f) => f.name === file.name && f.size === file.size);\n };\n\n // 内置校验器集合\n const builtInValidators: FileValidator[] = [\n // 数量校验(修复批量 bug)\n (_file, { files }) => {\n if (files.length >= maxFiles) {\n return `最多只能上传 ${maxFiles} 个文件`;\n }\n return null;\n },\n\n // 大小校验\n (file) => {\n const maxSize = maxFileSize * 1024 * 1024;\n if (file.size > maxSize) {\n return `文件大小不能超过 ${maxFileSize}MB`;\n }\n return null;\n },\n\n // 类型校验\n (file) => {\n if (!checkFileType(file)) {\n return \"不支持的文件类型\";\n }\n return null;\n },\n\n // ⭐ 新增:去重校验\n (file, { files }) => {\n if (isDuplicateFile(file, files)) {\n return \"文件已存在\";\n }\n return null;\n },\n ];\n\n const allValidators = [...builtInValidators, ...customValidators];\n\n // 验证文件\n const validateFile = (file: File): { valid: boolean; message?: string } => {\n for (const validator of allValidators) {\n const error = validator(file, { files });\n if (error) {\n return { valid: false, message: error };\n }\n }\n return { valid: true };\n };\n\n // 处理文件选择\n const handleFileSelect = useCallback(\n (selectedFiles: File[]) => {\n const fileArray = Array.from(selectedFiles);\n\n if (files.length + fileArray.length > maxFiles) {\n message.error(`最多只能上传 ${maxFiles} 个文件`);\n return;\n }\n\n const validFiles: LocalFile[] = [];\n\n fileArray.forEach((file) => {\n const validation = validateFile(file);\n\n if (validation.valid) {\n validFiles.push({\n id: generateId(),\n uid: generateId(),\n name: file.name,\n size: file.size,\n type: file.type,\n file,\n progress: 0,\n status: \"pending\",\n response: null,\n });\n } else {\n message.error(validation.message);\n }\n });\n\n if (validFiles.length > 0) {\n setFiles((prev) => {\n const next = [...prev, ...validFiles];\n onFilesChange?.(next);\n return next;\n });\n uploadFiles(validFiles);\n }\n },\n [files, maxFiles, maxFileSize, allowedFileTypes],\n );\n\n // 上传文件\n const uploadFiles = async (fileList: LocalFile[]) => {\n for (const localFile of fileList) {\n // 开始上传\n setFiles((prev) =>\n prev.map((f) =>\n f.id === localFile.id ? { ...f, status: \"uploading\" } : f,\n ),\n );\n\n try {\n await uploadRequest({\n file: localFile.file,\n onProgress: (e) => {\n setFiles((prev) =>\n prev.map((f) =>\n f.id === localFile.id ? { ...f, progress: e.percent } : f,\n ),\n );\n },\n onSuccess: (response) => {\n setFiles((prev) =>\n prev.map((f) =>\n f.id === localFile.id\n ? {\n ...f,\n status: \"success\",\n progress: 100,\n response,\n }\n : f,\n ),\n );\n\n onUploadSuccess?.({\n ...localFile,\n status: \"success\",\n response,\n });\n },\n onError: (error) => {\n setFiles((prev) =>\n prev.map((f) =>\n f.id === localFile.id\n ? {\n ...f,\n status: \"error\",\n errorMessage: error.message,\n }\n : f,\n ),\n );\n onUploadError?.(localFile, error);\n },\n });\n } catch (error) {\n console.error(\"上传处理错误:\", error);\n setFiles((prev) =>\n prev.map((f) =>\n f.id === localFile.id\n ? {\n ...f,\n status: \"error\",\n errorMessage:\n error instanceof Error ? error.message : \"上传处理失败\",\n }\n : f,\n ),\n );\n message.error(`${localFile.name} 上传失败`);\n }\n }\n };\n\n // 删除文件\n const handleRemoveFile = (id: string) => {\n setFiles((prev) => {\n const next = prev.filter((file) => file.id !== id);\n\n onFilesChange?.(next);\n\n return next;\n });\n };\n\n // 触发文件选择\n const triggerFileSelect = () => {\n if (fileInputRef.current) {\n fileInputRef.current.click();\n }\n };\n\n // 处理拖拽事件\n const handleDragOver = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (allowUpload) {\n setIsDragOver(true);\n }\n },\n [allowUpload],\n );\n\n const handleDragLeave = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (allowUpload) {\n setIsDragOver(false);\n }\n },\n [allowUpload],\n );\n\n const handleDrop = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragOver(false);\n\n if (\n allowUpload &&\n e.dataTransfer.files &&\n e.dataTransfer.files.length > 0\n ) {\n handleFileSelect(Array.from(e.dataTransfer.files));\n }\n },\n [allowUpload, handleFileSelect],\n );\n\n // 处理提交\n const handleSubmit = () => {\n if (!value.trim() && files.length === 0) {\n message.warning(\"请输入消息或选择文件\");\n return;\n }\n\n const successFiles = files.filter((file) => file.status === \"success\");\n const uploadingFiles = files.filter((file) => file.status === \"uploading\");\n\n if (uploadingFiles.length > 0) {\n Modal.confirm({\n title: \"文件上传中\",\n content: `还有 ${uploadingFiles.length} 个文件正在上传,是否继续发送?`,\n okText: \"发送已完成的\",\n cancelText: \"等待全部完成\",\n onOk: () => {\n const formattedFiles = formatFilesForServer(successFiles);\n if (onSubmit) {\n onSubmit({\n text: value,\n files: formattedFiles,\n });\n }\n\n setValue(\"\");\n setFiles((prev) => prev.filter((f) => f.status !== \"success\"));\n },\n onCancel: () => {\n message.info(\"请等待文件上传完成后再发送\");\n },\n });\n } else {\n const formattedFiles = formatFilesForServer(successFiles);\n\n if (onSubmit) {\n onSubmit({\n text: value,\n files: formattedFiles,\n });\n }\n\n setValue(\"\");\n setFiles((prev) => prev.filter((f) => f.status !== \"success\"));\n }\n };\n\n // 格式化文件列表为服务端格式\n const formatFilesForServer = (fileList: LocalFile[]): ServerFile[] => {\n return fileList\n .filter((file) => file.status === \"success\" && file.response?.data)\n .map((file) => {\n const responseData = file.response.data;\n\n return {\n fileName: file.name,\n fileId: responseData.fileId || responseData.id || 0,\n tempUrl: responseData.tempUrl || responseData.url || \"\",\n type: responseData.fileType || getExt(file),\n size: responseData.fileSize,\n mimeType: file.type,\n raw: {\n ...responseData,\n },\n };\n });\n };\n\n // 处理输入框变化\n const handleInputChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const newValue = e.target.value;\n setValue(newValue);\n onChange?.(newValue);\n };\n\n // 处理回车键\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n handleSubmit();\n }\n };\n\n // 渲染文件列表 - 使用新的 FileGallery 组件\n const renderFileList = () => {\n if (files.length === 0) return null;\n\n return (\n <div\n style={{\n display: \"flex\",\n flexWrap: \"wrap\",\n gap: \"8px\",\n padding: \"12px 0\",\n }}\n >\n {files.map((file) => (\n <FileGallery\n key={file.id}\n file={file}\n removable\n onRemove={handleRemoveFile}\n />\n ))}\n </div>\n );\n };\n\n const containerClass = `${styles.container} ${isDragOver ? \"drag-over\" : \"\"}`;\n const uploading = files.some((f) => f.status === \"uploading\");\n const isDisabled = disabled || uploading || loading;\n\n // 定义按钮组件\n const SendButton = (props: any) => (\n <Tooltip title={loading ? \"停止生成\" : \"发送消息\"}>\n <button\n className={`${styles.iconButton} ${styles.sendButton} ${loading ? \"stop\" : \"\"}`}\n onClick={loading ? onStop : handleSubmit}\n disabled={uploading || disabled}\n aria-label={loading ? \"停止生成\" : \"发送消息\"}\n {...props}\n >\n {loading ? <LoadingOutlined /> : <ArrowUpOutlined />}\n </button>\n </Tooltip>\n );\n\n const UploadButton = (props: any) => (\n <Tooltip title=\"上传文件\">\n <button\n className={`${styles.iconButton} ${styles.uploadButton}`}\n onClick={triggerFileSelect}\n disabled={isDisabled}\n aria-label=\"上传文件\"\n {...props}\n >\n <PaperClipOutlined />\n </button>\n </Tooltip>\n );\n\n const ClearButton = (props: any) => (\n <Popconfirm\n title=\"确定要清空聊天记录吗?\"\n onConfirm={onClear}\n placement=\"top\"\n okText=\"确定\"\n cancelText=\"取消\"\n disabled={isDisabled}\n >\n <button\n className={`${styles.iconButton} ${styles.clearButton}`}\n disabled={isDisabled}\n aria-label=\"清空聊天记录\"\n {...props}\n >\n <ClearOutlined />\n </button>\n </Popconfirm>\n );\n\n const actionsComponents: ActionsComponents = {\n SendButton,\n UploadButton,\n ClearButton,\n };\n\n // 渲染插槽内容\n const renderSlot = (\n slot:\n | React.ReactNode\n | false\n | ((\n oriNode: React.ReactNode,\n info: { components: ActionsComponents },\n ) => React.ReactNode | false)\n | undefined,\n oriNode: React.ReactNode,\n ): React.ReactNode | null => {\n if (slot === false) return null;\n if (slot === undefined) return oriNode;\n if (typeof slot === \"function\") {\n const result = slot(oriNode, { components: actionsComponents });\n return result === false ? null : result;\n }\n return slot;\n };\n\n // 默认的后缀内容(操作按钮组)\n const defaultSuffix = (\n <div className={styles.buttonGroup}>\n {allowUpload && <UploadButton />}\n <SendButton />\n </div>\n );\n\n return (\n <div\n ref={containerRef}\n className={containerClass}\n onDragOver={allowUpload ? handleDragOver : undefined}\n onDragLeave={allowUpload ? handleDragLeave : undefined}\n onDrop={allowUpload ? handleDrop : undefined}\n >\n {/* 头部插槽 */}\n {renderSlot(header, false)}\n\n {allowUpload && files.length > 0 && renderFileList()}\n\n {/* 隐藏的原生 file input */}\n {allowUpload && (\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple\n accept={allowedFileTypes.join(\",\")}\n style={{ display: \"none\" }}\n onChange={(e) => {\n if (e.target.files) {\n handleFileSelect(Array.from(e.target.files));\n e.target.value = \"\";\n }\n }}\n />\n )}\n\n <div className={styles.mainArea}>\n <div className={styles.senderWrap}>\n {/* 清除按钮 */}\n {clearBtnShow && <ClearButton />}\n\n <div className={styles.inputAndButtons}>\n {/* 前缀插槽 */}\n {renderSlot(prefix, false)}\n\n <div className={styles.textAreaWrapper}>\n <Input.TextArea\n className={styles.textArea}\n value={value}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n placeholder=\"请输入消息...\"\n disabled={isDisabled}\n autoSize={{ minRows: 1, maxRows: 4 }}\n style={{\n border: \"none\",\n boxShadow: \"none\",\n outline: \"none\",\n padding: 0,\n }}\n />\n </div>\n\n {/* 后缀插槽(默认显示操作按钮) */}\n {renderSlot(suffix, defaultSuffix)}\n </div>\n </div>\n\n {/* 底部插槽(默认显示提示文字) */}\n {renderSlot(\n footer,\n <div className={styles.tip}>\n 内容由AI生成,无法确保真实准确,仅供参考\n </div>,\n )}\n </div>\n </div>\n );\n};\n\nexport default XAdkSender;\n"],"mappings":"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"}
@@ -14,6 +14,7 @@ export interface ServerFile {
14
14
  fileId: number;
15
15
  tempUrl: string;
16
16
  type: string;
17
+ size: number;
17
18
  mimeType: string;
18
19
  }
19
20
  export interface LocalFile {
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["../../../src/types/XAdkSender.ts"],"sourcesContent":["// types/XAdkSender.ts\nimport React from \"react\";\n\ninterface uploadRequestProps {\n (options: {\n file: File;\n onProgress?: (e: { percent: number }) => void;\n onSuccess?: (response: any) => void;\n onError?: (error: Error) => void;\n }): Promise<void> | void;\n}\n\nexport interface ServerFile {\n fileName: string;\n fileId: number;\n tempUrl: string;\n type: string;\n mimeType: string;\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?: 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 loading?: boolean;\n disabled?: boolean; // 只读状态\n onClear?: () => void;\n onChange?: (value: string) => void;\n onSubmit?: (data: { text: string; files: ServerFile[] }) => void;\n onStop?: () => void;\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}\n\nexport type XAdkSenderProps = SenderUIProps & UploaderCoreProps;\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["../../../src/types/XAdkSender.ts"],"sourcesContent":["// types/XAdkSender.ts\nimport React from \"react\";\n\ninterface uploadRequestProps {\n (options: {\n file: File;\n onProgress?: (e: { percent: number }) => void;\n onSuccess?: (response: any) => void;\n onError?: (error: Error) => void;\n }): Promise<void> | void;\n}\n\nexport interface ServerFile {\n fileName: string;\n fileId: number;\n tempUrl: string;\n type: string;\n size: number;\n mimeType: string;\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?: 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 loading?: boolean;\n disabled?: boolean; // 只读状态\n onClear?: () => void;\n onChange?: (value: string) => void;\n onSubmit?: (data: { text: string; files: ServerFile[] }) => void;\n onStop?: () => void;\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}\n\nexport type XAdkSenderProps = SenderUIProps & UploaderCoreProps;\n"],"mappings":""}