@ai-group/chat-sdk 3.3.4 → 3.3.5
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/XAdkProvider/compound/DefaultLayout.d.ts +2 -0
- package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.js +150 -112
- package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.js.map +2 -2
- package/dist/cjs/components/XAdkProvider/compound/Sender.d.ts +2 -2
- package/dist/cjs/components/XAdkProvider/compound/Sender.js +4 -2
- package/dist/cjs/components/XAdkProvider/compound/Sender.js.map +2 -2
- package/dist/cjs/components/XAdkSender/index.d.ts +2 -2
- package/dist/cjs/components/XAdkSender/index.js +13 -6
- package/dist/cjs/components/XAdkSender/index.js.map +2 -2
- package/dist/cjs/types/XAdkProvider.d.ts +6 -0
- package/dist/cjs/types/XAdkProvider.js.map +1 -1
- package/dist/cjs/types/XAdkSender.d.ts +5 -0
- package/dist/cjs/types/XAdkSender.js.map +1 -1
- package/dist/cjs/utils/umdEntry.js +3 -0
- package/dist/cjs/utils/umdEntry.js.map +2 -2
- package/dist/esm/components/XAdkProvider/compound/DefaultLayout.d.ts +2 -0
- package/dist/esm/components/XAdkProvider/compound/DefaultLayout.js +48 -5
- package/dist/esm/components/XAdkProvider/compound/DefaultLayout.js.map +1 -1
- package/dist/esm/components/XAdkProvider/compound/Sender.d.ts +2 -2
- package/dist/esm/components/XAdkProvider/compound/Sender.js +4 -3
- package/dist/esm/components/XAdkProvider/compound/Sender.js.map +1 -1
- package/dist/esm/components/XAdkSender/index.d.ts +2 -2
- package/dist/esm/components/XAdkSender/index.js +18 -6
- package/dist/esm/components/XAdkSender/index.js.map +1 -1
- package/dist/esm/types/XAdkProvider.d.ts +6 -0
- package/dist/esm/types/XAdkProvider.js.map +1 -1
- package/dist/esm/types/XAdkSender.d.ts +5 -0
- package/dist/esm/types/XAdkSender.js.map +1 -1
- package/dist/esm/utils/umdEntry.js +4 -1
- package/dist/esm/utils/umdEntry.js.map +1 -1
- package/dist/umd/chat-sdk.min.js +1 -1
- package/package.json +1 -1
- package/dist/esm/assets/svg/AddChatIcon.d.ts.map +0 -1
- package/dist/esm/client/base.d.ts.map +0 -1
- package/dist/esm/client/restClient.d.ts.map +0 -1
- package/dist/esm/client/wsClient.d.ts.map +0 -1
- package/dist/esm/components/DislikeFeedback.d.ts.map +0 -1
- package/dist/esm/components/FeedbackTags.d.ts.map +0 -1
- package/dist/esm/components/FileGallery/index.d.ts.map +0 -1
- package/dist/esm/components/FileGallery/styles.d.ts.map +0 -1
- package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/index.d.ts.map +0 -1
- package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/styles.d.ts.map +0 -1
- package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.d.ts.map +0 -1
- package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.d.ts.map +0 -1
- package/dist/esm/components/XAdkChatbot/components/ThinkRender/index.d.ts.map +0 -1
- package/dist/esm/components/XAdkChatbot/index.d.ts.map +0 -1
- package/dist/esm/components/XAdkChatbot/styles.d.ts.map +0 -1
- package/dist/esm/components/XAdkProvider/compound/Chatbot.d.ts.map +0 -1
- package/dist/esm/components/XAdkProvider/compound/DefaultLayout.d.ts.map +0 -1
- package/dist/esm/components/XAdkProvider/compound/DislikeFeedBack.d.ts.map +0 -1
- package/dist/esm/components/XAdkProvider/compound/FeedbackTags.d.ts.map +0 -1
- package/dist/esm/components/XAdkProvider/compound/Header.d.ts.map +0 -1
- package/dist/esm/components/XAdkProvider/compound/Messages.d.ts.map +0 -1
- package/dist/esm/components/XAdkProvider/compound/Sender.d.ts.map +0 -1
- package/dist/esm/components/XAdkProvider/compound/Sidebar.d.ts.map +0 -1
- package/dist/esm/components/XAdkProvider/compound/Welcome.d.ts.map +0 -1
- package/dist/esm/components/XAdkProvider/compound/index.d.ts.map +0 -1
- package/dist/esm/components/XAdkProvider/compound/styles.d.ts.map +0 -1
- package/dist/esm/components/XAdkProvider/context/ChatActionContext.d.ts.map +0 -1
- package/dist/esm/components/XAdkProvider/context/ChatStateContext.d.ts.map +0 -1
- package/dist/esm/components/XAdkProvider/context/SessionContext.d.ts.map +0 -1
- package/dist/esm/components/XAdkProvider/context/index.d.ts.map +0 -1
- package/dist/esm/components/XAdkProvider/index.d.ts.map +0 -1
- package/dist/esm/components/XAdkProvider/styles.d.ts.map +0 -1
- package/dist/esm/components/XAdkSender/index.d.ts.map +0 -1
- package/dist/esm/components/XAdkSender/styles.d.ts.map +0 -1
- package/dist/esm/components/XAdkThoughtChain/index.d.ts.map +0 -1
- package/dist/esm/components/XAdkThoughtChain/styles.d.ts.map +0 -1
- package/dist/esm/components/XAiChatbot/index.d.ts.map +0 -1
- package/dist/esm/components/XAiChatbot/styles.d.ts.map +0 -1
- package/dist/esm/components/XAiConversations/index.d.ts.map +0 -1
- package/dist/esm/components/XAiConversations/styles.d.ts.map +0 -1
- package/dist/esm/components/XAiJsonView/index.d.ts.map +0 -1
- package/dist/esm/components/XAiJsonView/styles.d.ts.map +0 -1
- package/dist/esm/components/XAiProvider/demo.styles.d.ts.map +0 -1
- package/dist/esm/components/XAiProvider/index.d.ts.map +0 -1
- package/dist/esm/components/XAiSDK.d.ts.map +0 -1
- package/dist/esm/components/XAiSender/index.d.ts.map +0 -1
- package/dist/esm/components/XAiSender/styles.d.ts.map +0 -1
- package/dist/esm/constants/index.d.ts.map +0 -1
- package/dist/esm/context/AiProviderContext.d.ts.map +0 -1
- package/dist/esm/context/ThemeContext.d.ts.map +0 -1
- package/dist/esm/hooks/useAgentGenerator.d.ts.map +0 -1
- package/dist/esm/hooks/useEventStreamRequest.d.ts.map +0 -1
- package/dist/esm/hooks/useProviderContext.d.ts.map +0 -1
- package/dist/esm/hooks/useXAiSDK.d.ts.map +0 -1
- package/dist/esm/index.d.ts.map +0 -1
- package/dist/esm/presets/xGroupAdk.d.ts.map +0 -1
- package/dist/esm/services/api.d.ts.map +0 -1
- package/dist/esm/styles/common.d.ts.map +0 -1
- package/dist/esm/styles/markdown.d.ts.map +0 -1
- package/dist/esm/types/ChatHook.d.ts.map +0 -1
- package/dist/esm/types/ChatStrategies.d.ts.map +0 -1
- package/dist/esm/types/FileGallery.d.ts.map +0 -1
- package/dist/esm/types/FunctionCallRender.d.ts.map +0 -1
- package/dist/esm/types/XAdkChatbot.d.ts.map +0 -1
- package/dist/esm/types/XAdkProvider.d.ts.map +0 -1
- package/dist/esm/types/XAdkSender.d.ts.map +0 -1
- package/dist/esm/types/XAdkThoughtChain.d.ts.map +0 -1
- package/dist/esm/types/XAiChatbot.d.ts.map +0 -1
- package/dist/esm/types/XAiConversations.d.ts.map +0 -1
- package/dist/esm/types/XAiMessage.d.ts.map +0 -1
- package/dist/esm/types/XAiProvider.d.ts.map +0 -1
- package/dist/esm/types/XAiSender.d.ts.map +0 -1
- package/dist/esm/types/common.d.ts.map +0 -1
- package/dist/esm/types/index.d.ts.map +0 -1
- package/dist/esm/types/node.d.ts.map +0 -1
- package/dist/esm/utils/chat.d.ts.map +0 -1
- package/dist/esm/utils/file.d.ts.map +0 -1
- package/dist/esm/utils/index.d.ts.map +0 -1
- package/dist/esm/utils/parseAgentMessage.d.ts.map +0 -1
- package/dist/esm/utils/providerManager.d.ts.map +0 -1
- package/dist/esm/utils/request.d.ts.map +0 -1
- package/dist/esm/utils/request.example.d.ts.map +0 -1
- package/dist/esm/utils/umdEntry.d.ts.map +0 -1
- package/dist/esm/utils/workflowNode.d.ts.map +0 -1
|
@@ -4,7 +4,7 @@ import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
|
|
|
4
4
|
import _createForOfIteratorHelper from "@babel/runtime/helpers/esm/createForOfIteratorHelper";
|
|
5
5
|
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
|
|
6
6
|
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
7
|
-
import React, { useState, useRef, useCallback } from "react";
|
|
7
|
+
import React, { useState, useRef, useCallback, forwardRef, useImperativeHandle } from "react";
|
|
8
8
|
import { Popconfirm, message, Tooltip, Input, Modal } from "antd";
|
|
9
9
|
import { ClearOutlined, LoadingOutlined, ArrowUpOutlined, PaperClipOutlined } from "@ant-design/icons";
|
|
10
10
|
import { useStyles } from "./styles";
|
|
@@ -12,11 +12,13 @@ import FileGallery from "../FileGallery";
|
|
|
12
12
|
import { getExt } from "../../utils/file";
|
|
13
13
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
14
14
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
15
|
-
var XAdkSender = function
|
|
15
|
+
var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
16
16
|
var _ref$clearBtnShow = _ref.clearBtnShow,
|
|
17
17
|
clearBtnShow = _ref$clearBtnShow === void 0 ? true : _ref$clearBtnShow,
|
|
18
18
|
_ref$allowUpload = _ref.allowUpload,
|
|
19
19
|
allowUpload = _ref$allowUpload === void 0 ? false : _ref$allowUpload,
|
|
20
|
+
_ref$draggable = _ref.draggable,
|
|
21
|
+
draggable = _ref$draggable === void 0 ? true : _ref$draggable,
|
|
20
22
|
_ref$loading = _ref.loading,
|
|
21
23
|
loading = _ref$loading === void 0 ? false : _ref$loading,
|
|
22
24
|
_ref$disabled = _ref.disabled,
|
|
@@ -200,6 +202,15 @@ var XAdkSender = function XAdkSender(_ref) {
|
|
|
200
202
|
}
|
|
201
203
|
}, [files, maxFiles, maxFileSize, allowedFileTypes]);
|
|
202
204
|
|
|
205
|
+
// 暴露 addFiles 方法供外层(如 DefaultLayout 拖拽上传)调用
|
|
206
|
+
useImperativeHandle(ref, function () {
|
|
207
|
+
return {
|
|
208
|
+
addFiles: function addFiles(rawFiles) {
|
|
209
|
+
handleFileSelect(rawFiles);
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
}, [handleFileSelect]);
|
|
213
|
+
|
|
203
214
|
// 上传文件
|
|
204
215
|
var uploadFiles = /*#__PURE__*/function () {
|
|
205
216
|
var _ref5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(fileList) {
|
|
@@ -547,9 +558,9 @@ var XAdkSender = function XAdkSender(_ref) {
|
|
|
547
558
|
return /*#__PURE__*/_jsxs("div", {
|
|
548
559
|
ref: containerRef,
|
|
549
560
|
className: containerClass,
|
|
550
|
-
onDragOver: allowUpload ? handleDragOver : undefined,
|
|
551
|
-
onDragLeave: allowUpload ? handleDragLeave : undefined,
|
|
552
|
-
onDrop: allowUpload ? handleDrop : undefined,
|
|
561
|
+
onDragOver: allowUpload && draggable ? handleDragOver : undefined,
|
|
562
|
+
onDragLeave: allowUpload && draggable ? handleDragLeave : undefined,
|
|
563
|
+
onDrop: allowUpload && draggable ? handleDrop : undefined,
|
|
553
564
|
children: [renderSlot(header, false), allowUpload && files.length > 0 && renderFileList(), allowUpload && /*#__PURE__*/_jsx("input", {
|
|
554
565
|
ref: fileInputRef,
|
|
555
566
|
type: "file",
|
|
@@ -598,6 +609,7 @@ var XAdkSender = function XAdkSender(_ref) {
|
|
|
598
609
|
}))]
|
|
599
610
|
})]
|
|
600
611
|
});
|
|
601
|
-
};
|
|
612
|
+
});
|
|
613
|
+
XAdkSender.displayName = 'XAdkSender';
|
|
602
614
|
export default XAdkSender;
|
|
603
615
|
//# sourceMappingURL=index.js.map
|
|
@@ -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","Infinity","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","normalizeUploadResponse","response","_response$data","_ref2","data","Array","isArray","checkFileType","file","length","ext","some","type","includes","endsWith","startsWith","split","slice","checkFileSize","maxSize","size","isDuplicateFile","f","name","builtInValidators","_file","_ref3","concat","_ref4","allValidators","_toConsumableArray","validateFile","_iterator","_createForOfIteratorHelper","_step","s","n","done","validator","error","valid","err","e","handleFileSelect","selectedFiles","fileArray","from","validFiles","forEach","validation","push","id","uid","progress","status","prev","next","uploadFiles","_ref5","_asyncToGenerator","_regeneratorRuntime","mark","_callee","fileList","_iterator2","_step2","_loop","wrap","_callee$","_context2","localFile","_loop$","_context","map","_objectSpread","onProgress","percent","onSuccess","responseData","fileId","tempUrl","fileUrl","url","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","fileName","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 UploadFileResult,\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 = Infinity,\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 const normalizeUploadResponse = (response: any): UploadFileResult => {\n const data = response?.data ?? response;\n return (Array.isArray(data) ? data[0] : data) ?? {};\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 const responseData = normalizeUploadResponse(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 fileId: responseData.fileId || responseData.id,\n tempUrl:\n responseData.tempUrl ||\n responseData.fileUrl ||\n responseData.url,\n }\n : f,\n ),\n );\n\n onUploadSuccess?.({\n ...localFile,\n status: \"success\",\n response,\n fileId: responseData.fileId || responseData.id,\n tempUrl:\n responseData.tempUrl || responseData.fileUrl || responseData.url,\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)\n .map((file) => {\n const responseData = normalizeUploadResponse(file.response);\n\n return {\n fileName: responseData.fileName || file.name,\n fileId: responseData.fileId || responseData.id || \"\",\n tempUrl:\n responseData.tempUrl || responseData.fileUrl || responseData.url || \"\",\n type: responseData.fileType || responseData.type || getExt(file),\n size: responseData.fileSize || responseData.size || file.size,\n mimeType: responseData.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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"}
|
|
1
|
+
{"version":3,"names":["React","useState","useRef","useCallback","forwardRef","useImperativeHandle","Popconfirm","message","Tooltip","Input","Modal","ClearOutlined","LoadingOutlined","ArrowUpOutlined","PaperClipOutlined","useStyles","FileGallery","getExt","jsx","_jsx","jsxs","_jsxs","XAdkSender","_ref","ref","_ref$clearBtnShow","clearBtnShow","_ref$allowUpload","allowUpload","_ref$draggable","draggable","_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","Infinity","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","normalizeUploadResponse","response","_response$data","_ref2","data","Array","isArray","checkFileType","file","length","ext","some","type","includes","endsWith","startsWith","split","slice","checkFileSize","maxSize","size","isDuplicateFile","f","name","builtInValidators","_file","_ref3","concat","_ref4","allValidators","_toConsumableArray","validateFile","_iterator","_createForOfIteratorHelper","_step","s","n","done","validator","error","valid","err","e","handleFileSelect","selectedFiles","fileArray","from","validFiles","forEach","validation","push","id","uid","progress","status","prev","next","uploadFiles","addFiles","rawFiles","_ref5","_asyncToGenerator","_regeneratorRuntime","mark","_callee","fileList","_iterator2","_step2","_loop","wrap","_callee$","_context2","localFile","_loop$","_context","map","_objectSpread","onProgress","percent","onSuccess","responseData","fileId","tempUrl","fileUrl","url","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","fileName","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","onDragOver","onDragLeave","onDrop","multiple","accept","join","mainArea","senderWrap","inputAndButtons","textAreaWrapper","TextArea","textArea","onKeyDown","placeholder","autoSize","minRows","maxRows","border","boxShadow","outline","tip","displayName"],"sources":["../../../../src/components/XAdkSender/index.tsx"],"sourcesContent":["import React, { useState, useRef, useCallback, forwardRef, useImperativeHandle } 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 XAdkSenderHandle,\n ServerFile,\n LocalFile,\n ActionsComponents,\n FileValidator,\n UploadFileResult,\n} from \"@/types\";\nimport { useStyles } from \"./styles\";\nimport FileGallery from \"../FileGallery\";\nimport { getExt } from \"@/utils/file\";\n\nconst XAdkSender = forwardRef<XAdkSenderHandle, XAdkSenderProps>(({\n clearBtnShow = true,\n allowUpload = false,\n draggable = true,\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 = Infinity,\n suffix,\n header,\n prefix,\n footer,\n}, ref) => {\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 const normalizeUploadResponse = (response: any): UploadFileResult => {\n const data = response?.data ?? response;\n return (Array.isArray(data) ? data[0] : data) ?? {};\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 // 暴露 addFiles 方法供外层(如 DefaultLayout 拖拽上传)调用\n useImperativeHandle(ref, () => ({\n addFiles: (rawFiles: File[]) => {\n handleFileSelect(rawFiles);\n },\n }), [handleFileSelect]);\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 const responseData = normalizeUploadResponse(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 fileId: responseData.fileId || responseData.id,\n tempUrl:\n responseData.tempUrl ||\n responseData.fileUrl ||\n responseData.url,\n }\n : f,\n ),\n );\n\n onUploadSuccess?.({\n ...localFile,\n status: \"success\",\n response,\n fileId: responseData.fileId || responseData.id,\n tempUrl:\n responseData.tempUrl || responseData.fileUrl || responseData.url,\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)\n .map((file) => {\n const responseData = normalizeUploadResponse(file.response);\n\n return {\n fileName: responseData.fileName || file.name,\n fileId: responseData.fileId || responseData.id || \"\",\n tempUrl:\n responseData.tempUrl || responseData.fileUrl || responseData.url || \"\",\n type: responseData.fileType || responseData.type || getExt(file),\n size: responseData.fileSize || responseData.size || file.size,\n mimeType: responseData.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 && draggable ? handleDragOver : undefined}\n onDragLeave={allowUpload && draggable ? handleDragLeave : undefined}\n onDrop={allowUpload && draggable ? 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\nXAdkSender.displayName = 'XAdkSender';\n\nexport default XAdkSender;\n"],"mappings":"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"}
|
|
@@ -111,6 +111,12 @@ export interface XAdkProviderConfig {
|
|
|
111
111
|
*/
|
|
112
112
|
showFirstSession?: boolean;
|
|
113
113
|
allowUpload?: boolean;
|
|
114
|
+
/**
|
|
115
|
+
* 是否启用拖拽上传(需 allowUpload 为 true 时生效)
|
|
116
|
+
* 拖拽区域为整个聊天区域(不含侧边栏)
|
|
117
|
+
* @default true
|
|
118
|
+
*/
|
|
119
|
+
draggable?: boolean;
|
|
114
120
|
appNo?: string;
|
|
115
121
|
chatProps?: ChatConfig;
|
|
116
122
|
debug?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["EventCode"],"sources":["../../../src/types/XAdkProvider.ts"],"sourcesContent":["import { ReactNode } from \"react\";\nimport {\n IMessage,\n Success,\n Event,\n Error,\n SendContent,\n ThemeType,\n FileItem,\n UploadRequestFn,\n} from \"@/types\";\nimport type { ChatPresetInput, ChatStrategies } from \"./ChatStrategies\";\n\nexport interface DebugOptions {\n url: string;\n sessionId?: string;\n config: any;\n token: string;\n type?: \"agentDebug\" | \"appDebug\";\n /**\n * 是否启用 Hook\n * 当使用自定义 chatData 时,应设置为 false 以避免内部 Hook 初始化\n * @default true\n */\n enabled?: boolean;\n strategies?: ChatStrategies;\n onError?: (error: Error) => void;\n onSuccess?: (data: Success) => void;\n onStream?: (data: Event) => void;\n onMessage?: (content: string, data: IMessage) => void;\n}\n\n/**\n * 事件状态码枚举\n * @enum {string}\n * @version 1.0.0\n */\nexport enum EventCode {\n /** 切换会话 */\n SESSION_SWITCH = \"SESSION_SWITCH\",\n /** 开启新会话 */\n SESSION_CREATE = \"SESSION_CREATE\",\n}\n\nexport type handleEvent = {\n code: EventCode;\n message: string;\n data?: any;\n};\n/**\n * renderFooter insert 参数说明\n */\nexport interface FooterRenderArgs {\n message: IMessage;\n isLastBotMsg: boolean;\n isLastMsg: boolean;\n}\n\n/**\n * Provider 可通过 ref 暴露的方法句柄\n */\nexport interface XAdkProviderHandle {\n startChat: (content: SendContent) => void;\n stopChat: () => void;\n reChat: () => void;\n clearChat: () => void;\n deleteSession: (id: string) => void;\n updateSession: (id: string, title: string) => void;\n getAppInfo: () => any;\n getMessages: () => IMessage[];\n getSessions: () => any[];\n setMessages: (msgs: IMessage[]) => void;\n setCurrentSession: (id: string) => void;\n /**\n * 设置自定义业务参数 (stateDelta)\n * 设置后每次发送消息时会自动携带该参数至后端\n * 传入 undefined 可清除已设置的参数\n *\n * @example\n * providerRef.current.setStateDelta({ userId: '123', bizType: 'order' });\n * // 之后发送消息,请求体会携带 stateDelta: { userId: '123', bizType: 'order' }\n *\n * @example\n * // 清除自定义参数\n * providerRef.current.setStateDelta(undefined);\n */\n setStateDelta: (delta: Record<string, any> | undefined) => void;\n}\n\n/**\n * config.chatProps 中的配置\n */\nexport interface ChatConfig {\n /**\n * 是否展示清空按钮\n * @type {boolean}\n * @default false\n */\n clearBtnShow?: boolean;\n /**\n * 是否展示输入框\n * @type {boolean}\n * @default true\n */\n inputShow?: boolean;\n /**\n * 打字机效果速度(单位:毫秒)\n * @type {number}\n * @default 60\n * @version 1.0.0\n */\n textSpeed?: number;\n}\n\n/**\n * Provider config 整体配置结构\n */\nexport interface XAdkProviderConfig {\n session?: {\n showSessionList?: boolean;\n };\n /**\n * 初始化后是否默认展示第一条会话内容\n * @type {boolean}\n * @default false\n */\n showFirstSession?: boolean;\n allowUpload?: boolean;\n appNo?: string;\n chatProps?: ChatConfig;\n debug?: boolean;\n /**\n * 是否展示点赞/点踩按钮\n * @default true\n */\n showFeedback?: boolean;\n /**\n * 点击对话中附件卡片的回调(非图片、非音视频文件)\n */\n onFileClick?: (file: FileItem) => void;\n /**\n * 自定义文件上传函数\n */\n uploadRequest?: UploadRequestFn;\n /**\n * 预设策略。默认 xgroup-adk,用于兼容众安信科现有 ADK 协议。\n * 传入 base 可获得更中立的组件默认行为。\n */\n preset?: ChatPresetInput;\n /**\n * 覆盖或补充当前 preset 的局部策略。\n */\n strategies?: ChatStrategies;\n}\n\n/**\n * XAdkProvider Props\n */\nexport interface XAdkProviderProps {\n /**\n * AI 服务基础地址\n */\n url?: string;\n /**\n * 认证 token\n */\n token: string;\n /**\n * 组件功能配置\n */\n config?: XAdkProviderConfig;\n /**\n * Provider 级预设策略,优先级高于 config.preset。\n */\n preset?: ChatPresetInput;\n /**\n * Provider 级策略覆盖,优先级高于 config.strategies。\n */\n strategies?: ChatStrategies;\n /**\n * Provider 唯一标识\n */\n providerId?: string;\n /**\n * 消息成功回调\n */\n onSuccess?: (success: any) => void;\n /**\n * 流式消息回调\n */\n onStream?: (data: Event) => void;\n /**\n * 错误回调\n */\n onError?: (err: any) => void;\n /**\n * 每条消息回调\n */\n onMessage?: (content: string, data: IMessage) => void;\n /**\n * 事件回调\n */\n onEvent?: (event: handleEvent) => void;\n /**\n * React 子元素 - 支持 Compound Components\n */\n children?: ReactNode;\n}\n\n// XAiSDKProps 继承 XAdkProviderProps\nexport interface XAdkSDKProps extends XAdkProviderProps {\n /**\n * 主题类型\n * @type {ThemeType}\n * @default 'default'\n * @version 1.0.0\n */\n theme?: ThemeType;\n\n /**\n * 组件属性配置\n * @type {object}\n * @default undefined\n * @version 1.0.0\n */\n componentProps?: {\n /**\n * 组件ID\n * @type {string}\n * @default undefined\n * @version 1.0.0\n */\n id?: string;\n /** 支持任意 CSS 属性 */\n [key: string]: any;\n };\n}\n"],"mappings":"AAgCA;AACA;AACA;AACA;AACA;AACA,WAAYA,SAAS,0BAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAAA,OAATA,SAAS;AAAA;;AAYrB;AACA;AACA;;AAOA;AACA;AACA;;AA6BA;AACA;AACA;;AAuBA;AACA;AACA;;
|
|
1
|
+
{"version":3,"names":["EventCode"],"sources":["../../../src/types/XAdkProvider.ts"],"sourcesContent":["import { ReactNode } from \"react\";\nimport {\n IMessage,\n Success,\n Event,\n Error,\n SendContent,\n ThemeType,\n FileItem,\n UploadRequestFn,\n} from \"@/types\";\nimport type { ChatPresetInput, ChatStrategies } from \"./ChatStrategies\";\n\nexport interface DebugOptions {\n url: string;\n sessionId?: string;\n config: any;\n token: string;\n type?: \"agentDebug\" | \"appDebug\";\n /**\n * 是否启用 Hook\n * 当使用自定义 chatData 时,应设置为 false 以避免内部 Hook 初始化\n * @default true\n */\n enabled?: boolean;\n strategies?: ChatStrategies;\n onError?: (error: Error) => void;\n onSuccess?: (data: Success) => void;\n onStream?: (data: Event) => void;\n onMessage?: (content: string, data: IMessage) => void;\n}\n\n/**\n * 事件状态码枚举\n * @enum {string}\n * @version 1.0.0\n */\nexport enum EventCode {\n /** 切换会话 */\n SESSION_SWITCH = \"SESSION_SWITCH\",\n /** 开启新会话 */\n SESSION_CREATE = \"SESSION_CREATE\",\n}\n\nexport type handleEvent = {\n code: EventCode;\n message: string;\n data?: any;\n};\n/**\n * renderFooter insert 参数说明\n */\nexport interface FooterRenderArgs {\n message: IMessage;\n isLastBotMsg: boolean;\n isLastMsg: boolean;\n}\n\n/**\n * Provider 可通过 ref 暴露的方法句柄\n */\nexport interface XAdkProviderHandle {\n startChat: (content: SendContent) => void;\n stopChat: () => void;\n reChat: () => void;\n clearChat: () => void;\n deleteSession: (id: string) => void;\n updateSession: (id: string, title: string) => void;\n getAppInfo: () => any;\n getMessages: () => IMessage[];\n getSessions: () => any[];\n setMessages: (msgs: IMessage[]) => void;\n setCurrentSession: (id: string) => void;\n /**\n * 设置自定义业务参数 (stateDelta)\n * 设置后每次发送消息时会自动携带该参数至后端\n * 传入 undefined 可清除已设置的参数\n *\n * @example\n * providerRef.current.setStateDelta({ userId: '123', bizType: 'order' });\n * // 之后发送消息,请求体会携带 stateDelta: { userId: '123', bizType: 'order' }\n *\n * @example\n * // 清除自定义参数\n * providerRef.current.setStateDelta(undefined);\n */\n setStateDelta: (delta: Record<string, any> | undefined) => void;\n}\n\n/**\n * config.chatProps 中的配置\n */\nexport interface ChatConfig {\n /**\n * 是否展示清空按钮\n * @type {boolean}\n * @default false\n */\n clearBtnShow?: boolean;\n /**\n * 是否展示输入框\n * @type {boolean}\n * @default true\n */\n inputShow?: boolean;\n /**\n * 打字机效果速度(单位:毫秒)\n * @type {number}\n * @default 60\n * @version 1.0.0\n */\n textSpeed?: number;\n}\n\n/**\n * Provider config 整体配置结构\n */\nexport interface XAdkProviderConfig {\n session?: {\n showSessionList?: boolean;\n };\n /**\n * 初始化后是否默认展示第一条会话内容\n * @type {boolean}\n * @default false\n */\n showFirstSession?: boolean;\n allowUpload?: boolean;\n /**\n * 是否启用拖拽上传(需 allowUpload 为 true 时生效)\n * 拖拽区域为整个聊天区域(不含侧边栏)\n * @default true\n */\n draggable?: boolean;\n appNo?: string;\n chatProps?: ChatConfig;\n debug?: boolean;\n /**\n * 是否展示点赞/点踩按钮\n * @default true\n */\n showFeedback?: boolean;\n /**\n * 点击对话中附件卡片的回调(非图片、非音视频文件)\n */\n onFileClick?: (file: FileItem) => void;\n /**\n * 自定义文件上传函数\n */\n uploadRequest?: UploadRequestFn;\n /**\n * 预设策略。默认 xgroup-adk,用于兼容众安信科现有 ADK 协议。\n * 传入 base 可获得更中立的组件默认行为。\n */\n preset?: ChatPresetInput;\n /**\n * 覆盖或补充当前 preset 的局部策略。\n */\n strategies?: ChatStrategies;\n}\n\n/**\n * XAdkProvider Props\n */\nexport interface XAdkProviderProps {\n /**\n * AI 服务基础地址\n */\n url?: string;\n /**\n * 认证 token\n */\n token: string;\n /**\n * 组件功能配置\n */\n config?: XAdkProviderConfig;\n /**\n * Provider 级预设策略,优先级高于 config.preset。\n */\n preset?: ChatPresetInput;\n /**\n * Provider 级策略覆盖,优先级高于 config.strategies。\n */\n strategies?: ChatStrategies;\n /**\n * Provider 唯一标识\n */\n providerId?: string;\n /**\n * 消息成功回调\n */\n onSuccess?: (success: any) => void;\n /**\n * 流式消息回调\n */\n onStream?: (data: Event) => void;\n /**\n * 错误回调\n */\n onError?: (err: any) => void;\n /**\n * 每条消息回调\n */\n onMessage?: (content: string, data: IMessage) => void;\n /**\n * 事件回调\n */\n onEvent?: (event: handleEvent) => void;\n /**\n * React 子元素 - 支持 Compound Components\n */\n children?: ReactNode;\n}\n\n// XAiSDKProps 继承 XAdkProviderProps\nexport interface XAdkSDKProps extends XAdkProviderProps {\n /**\n * 主题类型\n * @type {ThemeType}\n * @default 'default'\n * @version 1.0.0\n */\n theme?: ThemeType;\n\n /**\n * 组件属性配置\n * @type {object}\n * @default undefined\n * @version 1.0.0\n */\n componentProps?: {\n /**\n * 组件ID\n * @type {string}\n * @default undefined\n * @version 1.0.0\n */\n id?: string;\n /** 支持任意 CSS 属性 */\n [key: string]: any;\n };\n}\n"],"mappings":"AAgCA;AACA;AACA;AACA;AACA;AACA,WAAYA,SAAS,0BAATA,SAAS;EAATA,SAAS;EAATA,SAAS;EAAA,OAATA,SAAS;AAAA;;AAYrB;AACA;AACA;;AAOA;AACA;AACA;;AA6BA;AACA;AACA;;AAuBA;AACA;AACA;;AA6CA;AACA;AACA;;AAoDA"}
|
|
@@ -72,6 +72,8 @@ export interface UploaderCoreProps {
|
|
|
72
72
|
export interface SenderUIProps {
|
|
73
73
|
clearBtnShow?: boolean;
|
|
74
74
|
allowUpload?: boolean;
|
|
75
|
+
/** 是否启用 Sender 自身的拖拽上传,设为 false 时由外层(如 DefaultLayout)管理拖拽 */
|
|
76
|
+
draggable?: boolean;
|
|
75
77
|
loading?: boolean;
|
|
76
78
|
disabled?: boolean;
|
|
77
79
|
onClear?: () => void;
|
|
@@ -91,4 +93,7 @@ export interface SenderUIProps {
|
|
|
91
93
|
footer?: React.ReactNode | false | SlotRenderFunction;
|
|
92
94
|
}
|
|
93
95
|
export type XAdkSenderProps = SenderUIProps & UploaderCoreProps;
|
|
96
|
+
export interface XAdkSenderHandle {
|
|
97
|
+
addFiles: (files: File[]) => void;
|
|
98
|
+
}
|
|
94
99
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["../../../src/types/XAdkSender.ts"],"sourcesContent":["// types/XAdkSender.ts\nimport React from \"react\";\n\nexport interface UploadFileResult {\n fileName?: string;\n fileId?: string | number;\n tempUrl?: string;\n url?: string;\n fileUrl?: string;\n fileType?: string;\n fileSize?: number;\n mimeType?: string;\n [key: string]: any;\n}\n\nexport interface UploadSuccessResponse {\n data?: UploadFileResult | UploadFileResult[];\n [key: string]: any;\n}\n\ninterface uploadRequestProps {\n (options: {\n file: File;\n onProgress?: (e: { percent: number }) => void;\n onSuccess?: (\n response: UploadFileResult | UploadFileResult[] | UploadSuccessResponse,\n ) => void;\n onError?: (error: Error) => void;\n }): Promise<void> | void;\n}\n\nexport type UploadRequestFn = uploadRequestProps;\n\nexport interface ServerFile {\n fileName: string;\n fileId: string | number;\n tempUrl: string;\n type: string;\n size?: number;\n mimeType: string;\n raw?: UploadFileResult;\n}\n\nexport interface LocalFile {\n id: string;\n uid: string;\n name: string;\n file: File;\n size: number;\n type: string;\n progress: number;\n status: \"pending\" | \"uploading\" | \"success\" | \"error\";\n // 服务器返回字段\n fileId?: string | number;\n tempUrl?: string;\n response?: any;\n errorMessage?: string; // 上传错误信息\n}\n\nexport type FileValidator = (\n file: File,\n context: { files: LocalFile[] },\n) => string | null;\n\nexport interface ActionsComponents {\n SendButton: React.ComponentType<any>;\n 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\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 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\nexport interface XAdkSenderHandle {\n addFiles: (files: File[]) => void;\n}\n"],"mappings":""}
|
|
@@ -51,12 +51,13 @@ var XAiWebSDK = /*#__PURE__*/function () {
|
|
|
51
51
|
_createClass(XAiWebSDK, [{
|
|
52
52
|
key: "mount",
|
|
53
53
|
value: function mount() {
|
|
54
|
-
var _config$session$showS, _config$session, _config$allowUpload, _config$chatProps$cle, _config$chatProps;
|
|
54
|
+
var _config$session$showS, _config$session, _config$allowUpload, _config$draggable, _config$chatProps$cle, _config$chatProps;
|
|
55
55
|
// 提取配置
|
|
56
56
|
var _this$props$config = this.props.config,
|
|
57
57
|
config = _this$props$config === void 0 ? {} : _this$props$config;
|
|
58
58
|
var showSessionList = (_config$session$showS = (_config$session = config.session) === null || _config$session === void 0 ? void 0 : _config$session.showSessionList) !== null && _config$session$showS !== void 0 ? _config$session$showS : false;
|
|
59
59
|
var allowUpload = (_config$allowUpload = config.allowUpload) !== null && _config$allowUpload !== void 0 ? _config$allowUpload : false;
|
|
60
|
+
var draggable = (_config$draggable = config.draggable) !== null && _config$draggable !== void 0 ? _config$draggable : true;
|
|
60
61
|
var clearBtnShow = (_config$chatProps$cle = (_config$chatProps = config.chatProps) === null || _config$chatProps === void 0 ? void 0 : _config$chatProps.clearBtnShow) !== null && _config$chatProps$cle !== void 0 ? _config$chatProps$cle : true;
|
|
61
62
|
if (ReactDOM.createRoot) {
|
|
62
63
|
this.root = ReactDOM.createRoot(this.container);
|
|
@@ -71,6 +72,7 @@ var XAiWebSDK = /*#__PURE__*/function () {
|
|
|
71
72
|
children: /*#__PURE__*/_jsx(XAdkProvider.DefaultLayout, {
|
|
72
73
|
showSessionList: showSessionList,
|
|
73
74
|
allowUpload: allowUpload,
|
|
75
|
+
draggable: draggable,
|
|
74
76
|
clearBtnShow: clearBtnShow,
|
|
75
77
|
showFnCallDetail: true
|
|
76
78
|
})
|
|
@@ -90,6 +92,7 @@ var XAiWebSDK = /*#__PURE__*/function () {
|
|
|
90
92
|
children: /*#__PURE__*/_jsx(XAdkProvider.DefaultLayout, {
|
|
91
93
|
showSessionList: showSessionList,
|
|
92
94
|
allowUpload: allowUpload,
|
|
95
|
+
draggable: draggable,
|
|
93
96
|
clearBtnShow: clearBtnShow,
|
|
94
97
|
showFnCallDetail: true
|
|
95
98
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createRef","ReactDOM","XAdkProvider","jsx","_jsx","XAiWebSDK","container","props","_classCallCheck","_defineProperty","onError","onSuccess","onMessage","mount","_createClass","key","value","_config$session$showS","_config$session","_config$allowUpload","_config$chatProps$cle","_config$chatProps","_this$props$config","config","showSessionList","session","allowUpload","clearBtnShow","chatProps","createRoot","root","render","style","width","height","children","_objectSpread","ref","providerRef","DefaultLayout","showFnCallDetail","unmount","getData","_this$providerRef$cur","_this$providerRef$cur2","_this$providerRef$cur3","appInfo","current","getAppInfo","messages","getMessages","sessions","getSessions","_this$providerRef$cur4","_this$providerRef$cur5","_this$providerRef$cur6","setMessages","msgs","_this$providerRef$cur7","startChat","content","_this$providerRef$cur8","stopChat","_this$providerRef$cur9","reChat","_this$providerRef$cur10","clearChat","_this$providerRef$cur11","setCurrentSession","sessionId","_this$providerRef$cur12","deleteSession","_this$providerRef$cur13","updateSession","title","_this$providerRef$cur14","setStateDelta","delta","_this$providerRef$cur15","initChatbot","_props$componentProps","componentProps","id","existingContainer","document","getElementById","createElement","_props$componentProps2","styleProps","_objectWithoutProperties","_excluded","Object","assign","parentNode","body","appendChild","create","window"],"sources":["../../../src/utils/umdEntry.tsx"],"sourcesContent":["import { createRef } from \"react\";\nimport ReactDOM from \"react-dom/client\";\nimport { XAdkSDKProps, XAdkProviderHandle, IMessage } from \"@/types\";\nimport XAdkProvider from \"@/components/XAdkProvider\";\nimport { SendContent } from \"@/types\";\n\n/**\n * XAiWebSDK - UMD 入口类\n *\n * 用于通过 <script> 标签引入 SDK 的场景\n *\n * @example\n * ```html\n * <script src=\"chat-sdk.min.js\"></script>\n * <script>\n * const sdk = XAiWebSDK.initChatbot({\n * url: 'https://api.example.com',\n * token: 'your-token',\n * config: {\n * appNo: 'your-app-no',\n * session: {\n * showSessionList: true\n * }\n * }\n * });\n * </script>\n * ```\n */\nclass XAiWebSDK {\n container: HTMLElement;\n\n props: XAdkSDKProps;\n\n root: any;\n\n providerRef = createRef<XAdkProviderHandle>();\n\n // ———— hook ————\n onError?: (error: any) => void;\n\n onSuccess?: (appInfo: any) => void;\n\n onMessage?: (content: string, data: IMessage) => void;\n\n constructor(container: HTMLElement, props: XAdkSDKProps) {\n this.container = container;\n this.props = props;\n this.onError = props.onError;\n this.onSuccess = props.onSuccess;\n this.onMessage = props.onMessage;\n this.mount();\n }\n\n mount() {\n // 提取配置\n const { config = {} } = this.props;\n const showSessionList = config.session?.showSessionList ?? false;\n const allowUpload = config.allowUpload ?? false;\n const clearBtnShow = config.chatProps?.clearBtnShow ?? true;\n\n if (ReactDOM.createRoot) {\n this.root = ReactDOM.createRoot(this.container);\n this.root.render(\n <div style={{ width: \"100%\", height: \"100%\" }}>\n <XAdkProvider ref={this.providerRef} {...this.props}>\n {/* 使用 DefaultLayout 作为默认布局 */}\n <XAdkProvider.DefaultLayout\n showSessionList={showSessionList}\n allowUpload={allowUpload}\n clearBtnShow={clearBtnShow}\n showFnCallDetail={true}\n />\n </XAdkProvider>\n </div>,\n );\n } else {\n // 兼容 React 17\n // @ts-ignore\n ReactDOM.render(\n <div style={{ width: \"100%\", height: \"100%\" }}>\n <XAdkProvider ref={this.providerRef} {...this.props}>\n <XAdkProvider.DefaultLayout\n showSessionList={showSessionList}\n allowUpload={allowUpload}\n clearBtnShow={clearBtnShow}\n showFnCallDetail={true}\n />\n </XAdkProvider>\n </div>,\n this.container,\n );\n }\n }\n\n unmount() {\n if (this.root && this.root.unmount) {\n this.root.unmount();\n }\n }\n\n /**\n * 初始化聊天机器人(推荐方式)\n *\n * @param props - SDK 配置参数\n * @returns XAiWebSDK 实例\n *\n * @example\n * ```javascript\n * const sdk = XAiWebSDK.initChatbot({\n * url: 'https://api.example.com',\n * token: 'your-token',\n * config: {\n * appNo: 'your-app-no',\n * session: {\n * showSessionList: true // 显示会话列表\n * },\n * allowUpload: true, // 允许文件上传\n * chatProps: {\n * clearBtnShow: false // 隐藏清空按钮\n * }\n * },\n * componentProps: {\n * id: 'my-chatbot', // 容器 ID\n * width: '100%',\n * height: '600px'\n * }\n * });\n * ```\n */\n static initChatbot(props: XAdkSDKProps): XAiWebSDK {\n let container: HTMLElement;\n\n // 检查是否有指定的 componentProps.id\n if (props.componentProps?.id) {\n const existingContainer = document.getElementById(\n props.componentProps.id,\n );\n if (existingContainer) {\n container = existingContainer;\n } else {\n // 如果指定的 ID 不存在,创建新元素\n container = document.createElement(\"div\");\n container.id = props.componentProps.id;\n }\n } else {\n // 没有指定 ID,创建默认容器\n container = document.createElement(\"div\");\n container.id = \"xai-chatbot-container\";\n }\n\n // 设置容器样式 - 将除了 id 以外的所有属性都应用到容器\n if (props.componentProps) {\n const { id, ...styleProps } = props.componentProps;\n Object.assign(container.style, styleProps);\n }\n\n // 如果容器不在 DOM 中,添加到 body\n if (!container.parentNode) {\n document.body.appendChild(container);\n }\n\n return new XAiWebSDK(container, props);\n }\n\n /**\n * 兼容旧版本的静态方法\n * @deprecated 使用 initChatbot 替代\n */\n static create(props: XAdkSDKProps): XAiWebSDK {\n return this.initChatbot(props);\n }\n\n // ————对外暴露的方法————\n\n /**\n * 获取当前数据(聚合方法)\n * @returns 应用信息、消息列表、会话列表\n */\n getData() {\n return {\n appInfo: this.providerRef.current?.getAppInfo(),\n messages: this.providerRef.current?.getMessages(),\n sessions: this.providerRef.current?.getSessions(),\n };\n }\n\n /**\n * 获取应用信息\n * @returns 应用信息\n */\n getAppInfo() {\n return this.providerRef.current?.getAppInfo();\n }\n\n /**\n * 获取当前会话的消息列表\n * @returns 消息列表\n */\n getMessages() {\n return this.providerRef.current?.getMessages();\n }\n\n /**\n * 获取会话列表\n * @returns 会话列表\n */\n getSessions() {\n return this.providerRef.current?.getSessions();\n }\n\n /**\n * 设置消息列表\n * @param msgs - 要设置的消息数组\n */\n setMessages(msgs: IMessage[]) {\n this.providerRef.current?.setMessages(msgs);\n }\n\n /**\n * 发送消息\n * @param content - 消息内容\n *\n * @example\n * ```javascript\n * sdk.startChat({ text: 'Hello!' });\n * ```\n */\n startChat(content: SendContent) {\n this.providerRef.current?.startChat(content);\n }\n\n /**\n * 停止当前消息生成\n */\n stopChat() {\n this.providerRef.current?.stopChat();\n }\n\n /**\n * 重新生成最后一条回复\n */\n reChat() {\n this.providerRef.current?.reChat();\n }\n\n /**\n * 清空当前会话\n */\n clearChat() {\n this.providerRef.current?.clearChat();\n }\n\n /**\n * 切换到指定会话\n * @param sessionId - 会话 ID\n */\n setCurrentSession(sessionId: string) {\n this.providerRef.current?.setCurrentSession(sessionId);\n }\n\n /**\n * 删除指定会话\n * @param sessionId - 会话 ID\n */\n deleteSession(sessionId: string) {\n this.providerRef.current?.deleteSession(sessionId);\n }\n\n /**\n * 更新会话标题\n * @param sessionId - 会话 ID\n * @param title - 新标题\n */\n updateSession(sessionId: string, title: string) {\n this.providerRef.current?.updateSession(sessionId, title);\n }\n\n /**\n * 设置自定义业务参数 (stateDelta)\n * 设置后每次发送消息时会自动携带至后端\n * @param delta - 自定义参数,传入 undefined 可清除\n */\n setStateDelta(delta: Record<string, any> | undefined) {\n this.providerRef.current?.setStateDelta(delta);\n }\n}\n\n// 兼容 window 方式,也支持 new\n// @ts-ignore\nwindow.XAiWebSDK = XAiWebSDK;\n\n// 支持 ESModule/UMD 直接 import\nexport default XAiWebSDK;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["createRef","ReactDOM","XAdkProvider","jsx","_jsx","XAiWebSDK","container","props","_classCallCheck","_defineProperty","onError","onSuccess","onMessage","mount","_createClass","key","value","_config$session$showS","_config$session","_config$allowUpload","_config$draggable","_config$chatProps$cle","_config$chatProps","_this$props$config","config","showSessionList","session","allowUpload","draggable","clearBtnShow","chatProps","createRoot","root","render","style","width","height","children","_objectSpread","ref","providerRef","DefaultLayout","showFnCallDetail","unmount","getData","_this$providerRef$cur","_this$providerRef$cur2","_this$providerRef$cur3","appInfo","current","getAppInfo","messages","getMessages","sessions","getSessions","_this$providerRef$cur4","_this$providerRef$cur5","_this$providerRef$cur6","setMessages","msgs","_this$providerRef$cur7","startChat","content","_this$providerRef$cur8","stopChat","_this$providerRef$cur9","reChat","_this$providerRef$cur10","clearChat","_this$providerRef$cur11","setCurrentSession","sessionId","_this$providerRef$cur12","deleteSession","_this$providerRef$cur13","updateSession","title","_this$providerRef$cur14","setStateDelta","delta","_this$providerRef$cur15","initChatbot","_props$componentProps","componentProps","id","existingContainer","document","getElementById","createElement","_props$componentProps2","styleProps","_objectWithoutProperties","_excluded","Object","assign","parentNode","body","appendChild","create","window"],"sources":["../../../src/utils/umdEntry.tsx"],"sourcesContent":["import { createRef } from \"react\";\nimport ReactDOM from \"react-dom/client\";\nimport { XAdkSDKProps, XAdkProviderHandle, IMessage } from \"@/types\";\nimport XAdkProvider from \"@/components/XAdkProvider\";\nimport { SendContent } from \"@/types\";\n\n/**\n * XAiWebSDK - UMD 入口类\n *\n * 用于通过 <script> 标签引入 SDK 的场景\n *\n * @example\n * ```html\n * <script src=\"chat-sdk.min.js\"></script>\n * <script>\n * const sdk = XAiWebSDK.initChatbot({\n * url: 'https://api.example.com',\n * token: 'your-token',\n * config: {\n * appNo: 'your-app-no',\n * session: {\n * showSessionList: true\n * }\n * }\n * });\n * </script>\n * ```\n */\nclass XAiWebSDK {\n container: HTMLElement;\n\n props: XAdkSDKProps;\n\n root: any;\n\n providerRef = createRef<XAdkProviderHandle>();\n\n // ———— hook ————\n onError?: (error: any) => void;\n\n onSuccess?: (appInfo: any) => void;\n\n onMessage?: (content: string, data: IMessage) => void;\n\n constructor(container: HTMLElement, props: XAdkSDKProps) {\n this.container = container;\n this.props = props;\n this.onError = props.onError;\n this.onSuccess = props.onSuccess;\n this.onMessage = props.onMessage;\n this.mount();\n }\n\n mount() {\n // 提取配置\n const { config = {} } = this.props;\n const showSessionList = config.session?.showSessionList ?? false;\n const allowUpload = config.allowUpload ?? false;\n const draggable = config.draggable ?? true;\n const clearBtnShow = config.chatProps?.clearBtnShow ?? true;\n\n if (ReactDOM.createRoot) {\n this.root = ReactDOM.createRoot(this.container);\n this.root.render(\n <div style={{ width: \"100%\", height: \"100%\" }}>\n <XAdkProvider ref={this.providerRef} {...this.props}>\n {/* 使用 DefaultLayout 作为默认布局 */}\n <XAdkProvider.DefaultLayout\n showSessionList={showSessionList}\n allowUpload={allowUpload}\n draggable={draggable}\n clearBtnShow={clearBtnShow}\n showFnCallDetail={true}\n />\n </XAdkProvider>\n </div>,\n );\n } else {\n // 兼容 React 17\n // @ts-ignore\n ReactDOM.render(\n <div style={{ width: \"100%\", height: \"100%\" }}>\n <XAdkProvider ref={this.providerRef} {...this.props}>\n <XAdkProvider.DefaultLayout\n showSessionList={showSessionList}\n allowUpload={allowUpload}\n draggable={draggable}\n clearBtnShow={clearBtnShow}\n showFnCallDetail={true}\n />\n </XAdkProvider>\n </div>,\n this.container,\n );\n }\n }\n\n unmount() {\n if (this.root && this.root.unmount) {\n this.root.unmount();\n }\n }\n\n /**\n * 初始化聊天机器人(推荐方式)\n *\n * @param props - SDK 配置参数\n * @returns XAiWebSDK 实例\n *\n * @example\n * ```javascript\n * const sdk = XAiWebSDK.initChatbot({\n * url: 'https://api.example.com',\n * token: 'your-token',\n * config: {\n * appNo: 'your-app-no',\n * session: {\n * showSessionList: true // 显示会话列表\n * },\n * allowUpload: true, // 允许文件上传\n * chatProps: {\n * clearBtnShow: false // 隐藏清空按钮\n * }\n * },\n * componentProps: {\n * id: 'my-chatbot', // 容器 ID\n * width: '100%',\n * height: '600px'\n * }\n * });\n * ```\n */\n static initChatbot(props: XAdkSDKProps): XAiWebSDK {\n let container: HTMLElement;\n\n // 检查是否有指定的 componentProps.id\n if (props.componentProps?.id) {\n const existingContainer = document.getElementById(\n props.componentProps.id,\n );\n if (existingContainer) {\n container = existingContainer;\n } else {\n // 如果指定的 ID 不存在,创建新元素\n container = document.createElement(\"div\");\n container.id = props.componentProps.id;\n }\n } else {\n // 没有指定 ID,创建默认容器\n container = document.createElement(\"div\");\n container.id = \"xai-chatbot-container\";\n }\n\n // 设置容器样式 - 将除了 id 以外的所有属性都应用到容器\n if (props.componentProps) {\n const { id, ...styleProps } = props.componentProps;\n Object.assign(container.style, styleProps);\n }\n\n // 如果容器不在 DOM 中,添加到 body\n if (!container.parentNode) {\n document.body.appendChild(container);\n }\n\n return new XAiWebSDK(container, props);\n }\n\n /**\n * 兼容旧版本的静态方法\n * @deprecated 使用 initChatbot 替代\n */\n static create(props: XAdkSDKProps): XAiWebSDK {\n return this.initChatbot(props);\n }\n\n // ————对外暴露的方法————\n\n /**\n * 获取当前数据(聚合方法)\n * @returns 应用信息、消息列表、会话列表\n */\n getData() {\n return {\n appInfo: this.providerRef.current?.getAppInfo(),\n messages: this.providerRef.current?.getMessages(),\n sessions: this.providerRef.current?.getSessions(),\n };\n }\n\n /**\n * 获取应用信息\n * @returns 应用信息\n */\n getAppInfo() {\n return this.providerRef.current?.getAppInfo();\n }\n\n /**\n * 获取当前会话的消息列表\n * @returns 消息列表\n */\n getMessages() {\n return this.providerRef.current?.getMessages();\n }\n\n /**\n * 获取会话列表\n * @returns 会话列表\n */\n getSessions() {\n return this.providerRef.current?.getSessions();\n }\n\n /**\n * 设置消息列表\n * @param msgs - 要设置的消息数组\n */\n setMessages(msgs: IMessage[]) {\n this.providerRef.current?.setMessages(msgs);\n }\n\n /**\n * 发送消息\n * @param content - 消息内容\n *\n * @example\n * ```javascript\n * sdk.startChat({ text: 'Hello!' });\n * ```\n */\n startChat(content: SendContent) {\n this.providerRef.current?.startChat(content);\n }\n\n /**\n * 停止当前消息生成\n */\n stopChat() {\n this.providerRef.current?.stopChat();\n }\n\n /**\n * 重新生成最后一条回复\n */\n reChat() {\n this.providerRef.current?.reChat();\n }\n\n /**\n * 清空当前会话\n */\n clearChat() {\n this.providerRef.current?.clearChat();\n }\n\n /**\n * 切换到指定会话\n * @param sessionId - 会话 ID\n */\n setCurrentSession(sessionId: string) {\n this.providerRef.current?.setCurrentSession(sessionId);\n }\n\n /**\n * 删除指定会话\n * @param sessionId - 会话 ID\n */\n deleteSession(sessionId: string) {\n this.providerRef.current?.deleteSession(sessionId);\n }\n\n /**\n * 更新会话标题\n * @param sessionId - 会话 ID\n * @param title - 新标题\n */\n updateSession(sessionId: string, title: string) {\n this.providerRef.current?.updateSession(sessionId, title);\n }\n\n /**\n * 设置自定义业务参数 (stateDelta)\n * 设置后每次发送消息时会自动携带至后端\n * @param delta - 自定义参数,传入 undefined 可清除\n */\n setStateDelta(delta: Record<string, any> | undefined) {\n this.providerRef.current?.setStateDelta(delta);\n }\n}\n\n// 兼容 window 方式,也支持 new\n// @ts-ignore\nwindow.XAiWebSDK = XAiWebSDK;\n\n// 支持 ESModule/UMD 直接 import\nexport default XAiWebSDK;\n"],"mappings":";;;;;;AAAA,SAASA,SAAS,QAAQ,OAAO;AACjC,OAAOC,QAAQ,MAAM,kBAAkB;AAEvC,OAAOC,YAAY;AAAkC,SAAAC,GAAA,IAAAC,IAAA;AAGrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AArBA,IAsBMC,SAAS;EAgBb,SAAAA,UAAYC,SAAsB,EAAEC,KAAmB,EAAE;IAAAC,eAAA,OAAAH,SAAA;IAAAI,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA,mCAT3CT,SAAS,CAAqB,CAAC;IAE7C;IAAAS,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAQE,IAAI,CAACH,SAAS,GAAGA,SAAS;IAC1B,IAAI,CAACC,KAAK,GAAGA,KAAK;IAClB,IAAI,CAACG,OAAO,GAAGH,KAAK,CAACG,OAAO;IAC5B,IAAI,CAACC,SAAS,GAAGJ,KAAK,CAACI,SAAS;IAChC,IAAI,CAACC,SAAS,GAAGL,KAAK,CAACK,SAAS;IAChC,IAAI,CAACC,KAAK,CAAC,CAAC;EACd;EAACC,YAAA,CAAAT,SAAA;IAAAU,GAAA;IAAAC,KAAA,EAED,SAAAH,MAAA,EAAQ;MAAA,IAAAI,qBAAA,EAAAC,eAAA,EAAAC,mBAAA,EAAAC,iBAAA,EAAAC,qBAAA,EAAAC,iBAAA;MACN;MACA,IAAAC,kBAAA,GAAwB,IAAI,CAAChB,KAAK,CAA1BiB,MAAM;QAANA,MAAM,GAAAD,kBAAA,cAAG,CAAC,CAAC,GAAAA,kBAAA;MACnB,IAAME,eAAe,IAAAR,qBAAA,IAAAC,eAAA,GAAGM,MAAM,CAACE,OAAO,cAAAR,eAAA,uBAAdA,eAAA,CAAgBO,eAAe,cAAAR,qBAAA,cAAAA,qBAAA,GAAI,KAAK;MAChE,IAAMU,WAAW,IAAAR,mBAAA,GAAGK,MAAM,CAACG,WAAW,cAAAR,mBAAA,cAAAA,mBAAA,GAAI,KAAK;MAC/C,IAAMS,SAAS,IAAAR,iBAAA,GAAGI,MAAM,CAACI,SAAS,cAAAR,iBAAA,cAAAA,iBAAA,GAAI,IAAI;MAC1C,IAAMS,YAAY,IAAAR,qBAAA,IAAAC,iBAAA,GAAGE,MAAM,CAACM,SAAS,cAAAR,iBAAA,uBAAhBA,iBAAA,CAAkBO,YAAY,cAAAR,qBAAA,cAAAA,qBAAA,GAAI,IAAI;MAE3D,IAAIpB,QAAQ,CAAC8B,UAAU,EAAE;QACvB,IAAI,CAACC,IAAI,GAAG/B,QAAQ,CAAC8B,UAAU,CAAC,IAAI,CAACzB,SAAS,CAAC;QAC/C,IAAI,CAAC0B,IAAI,CAACC,MAAM,eACd7B,IAAA;UAAK8B,KAAK,EAAE;YAAEC,KAAK,EAAE,MAAM;YAAEC,MAAM,EAAE;UAAO,CAAE;UAAAC,QAAA,eAC5CjC,IAAA,CAACF,YAAY,EAAAoC,aAAA,CAAAA,aAAA;YAACC,GAAG,EAAE,IAAI,CAACC;UAAY,GAAK,IAAI,CAACjC,KAAK;YAAA8B,QAAA,eAEjDjC,IAAA,CAACF,YAAY,CAACuC,aAAa;cACzBhB,eAAe,EAAEA,eAAgB;cACjCE,WAAW,EAAEA,WAAY;cACzBC,SAAS,EAAEA,SAAU;cACrBC,YAAY,EAAEA,YAAa;cAC3Ba,gBAAgB,EAAE;YAAK,CACxB;UAAC,EACU;QAAC,CACZ,CACP,CAAC;MACH,CAAC,MAAM;QACL;QACA;QACAzC,QAAQ,CAACgC,MAAM,eACb7B,IAAA;UAAK8B,KAAK,EAAE;YAAEC,KAAK,EAAE,MAAM;YAAEC,MAAM,EAAE;UAAO,CAAE;UAAAC,QAAA,eAC5CjC,IAAA,CAACF,YAAY,EAAAoC,aAAA,CAAAA,aAAA;YAACC,GAAG,EAAE,IAAI,CAACC;UAAY,GAAK,IAAI,CAACjC,KAAK;YAAA8B,QAAA,eACjDjC,IAAA,CAACF,YAAY,CAACuC,aAAa;cACzBhB,eAAe,EAAEA,eAAgB;cACjCE,WAAW,EAAEA,WAAY;cACzBC,SAAS,EAAEA,SAAU;cACrBC,YAAY,EAAEA,YAAa;cAC3Ba,gBAAgB,EAAE;YAAK,CACxB;UAAC,EACU;QAAC,CACZ,CAAC,EACN,IAAI,CAACpC,SACP,CAAC;MACH;IACF;EAAC;IAAAS,GAAA;IAAAC,KAAA,EAED,SAAA2B,QAAA,EAAU;MACR,IAAI,IAAI,CAACX,IAAI,IAAI,IAAI,CAACA,IAAI,CAACW,OAAO,EAAE;QAClC,IAAI,CAACX,IAAI,CAACW,OAAO,CAAC,CAAC;MACrB;IACF;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EA5BE;IAAA5B,GAAA;IAAAC,KAAA;IAwEA;;IAEA;AACF;AACA;AACA;IACE,SAAA4B,QAAA,EAAU;MAAA,IAAAC,qBAAA,EAAAC,sBAAA,EAAAC,sBAAA;MACR,OAAO;QACLC,OAAO,GAAAH,qBAAA,GAAE,IAAI,CAACL,WAAW,CAACS,OAAO,cAAAJ,qBAAA,uBAAxBA,qBAAA,CAA0BK,UAAU,CAAC,CAAC;QAC/CC,QAAQ,GAAAL,sBAAA,GAAE,IAAI,CAACN,WAAW,CAACS,OAAO,cAAAH,sBAAA,uBAAxBA,sBAAA,CAA0BM,WAAW,CAAC,CAAC;QACjDC,QAAQ,GAAAN,sBAAA,GAAE,IAAI,CAACP,WAAW,CAACS,OAAO,cAAAF,sBAAA,uBAAxBA,sBAAA,CAA0BO,WAAW,CAAC;MAClD,CAAC;IACH;;IAEA;AACF;AACA;AACA;EAHE;IAAAvC,GAAA;IAAAC,KAAA,EAIA,SAAAkC,WAAA,EAAa;MAAA,IAAAK,sBAAA;MACX,QAAAA,sBAAA,GAAO,IAAI,CAACf,WAAW,CAACS,OAAO,cAAAM,sBAAA,uBAAxBA,sBAAA,CAA0BL,UAAU,CAAC,CAAC;IAC/C;;IAEA;AACF;AACA;AACA;EAHE;IAAAnC,GAAA;IAAAC,KAAA,EAIA,SAAAoC,YAAA,EAAc;MAAA,IAAAI,sBAAA;MACZ,QAAAA,sBAAA,GAAO,IAAI,CAAChB,WAAW,CAACS,OAAO,cAAAO,sBAAA,uBAAxBA,sBAAA,CAA0BJ,WAAW,CAAC,CAAC;IAChD;;IAEA;AACF;AACA;AACA;EAHE;IAAArC,GAAA;IAAAC,KAAA,EAIA,SAAAsC,YAAA,EAAc;MAAA,IAAAG,sBAAA;MACZ,QAAAA,sBAAA,GAAO,IAAI,CAACjB,WAAW,CAACS,OAAO,cAAAQ,sBAAA,uBAAxBA,sBAAA,CAA0BH,WAAW,CAAC,CAAC;IAChD;;IAEA;AACF;AACA;AACA;EAHE;IAAAvC,GAAA;IAAAC,KAAA,EAIA,SAAA0C,YAAYC,IAAgB,EAAE;MAAA,IAAAC,sBAAA;MAC5B,CAAAA,sBAAA,OAAI,CAACpB,WAAW,CAACS,OAAO,cAAAW,sBAAA,eAAxBA,sBAAA,CAA0BF,WAAW,CAACC,IAAI,CAAC;IAC7C;;IAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EARE;IAAA5C,GAAA;IAAAC,KAAA,EASA,SAAA6C,UAAUC,OAAoB,EAAE;MAAA,IAAAC,sBAAA;MAC9B,CAAAA,sBAAA,OAAI,CAACvB,WAAW,CAACS,OAAO,cAAAc,sBAAA,eAAxBA,sBAAA,CAA0BF,SAAS,CAACC,OAAO,CAAC;IAC9C;;IAEA;AACF;AACA;EAFE;IAAA/C,GAAA;IAAAC,KAAA,EAGA,SAAAgD,SAAA,EAAW;MAAA,IAAAC,sBAAA;MACT,CAAAA,sBAAA,OAAI,CAACzB,WAAW,CAACS,OAAO,cAAAgB,sBAAA,eAAxBA,sBAAA,CAA0BD,QAAQ,CAAC,CAAC;IACtC;;IAEA;AACF;AACA;EAFE;IAAAjD,GAAA;IAAAC,KAAA,EAGA,SAAAkD,OAAA,EAAS;MAAA,IAAAC,uBAAA;MACP,CAAAA,uBAAA,OAAI,CAAC3B,WAAW,CAACS,OAAO,cAAAkB,uBAAA,eAAxBA,uBAAA,CAA0BD,MAAM,CAAC,CAAC;IACpC;;IAEA;AACF;AACA;EAFE;IAAAnD,GAAA;IAAAC,KAAA,EAGA,SAAAoD,UAAA,EAAY;MAAA,IAAAC,uBAAA;MACV,CAAAA,uBAAA,OAAI,CAAC7B,WAAW,CAACS,OAAO,cAAAoB,uBAAA,eAAxBA,uBAAA,CAA0BD,SAAS,CAAC,CAAC;IACvC;;IAEA;AACF;AACA;AACA;EAHE;IAAArD,GAAA;IAAAC,KAAA,EAIA,SAAAsD,kBAAkBC,SAAiB,EAAE;MAAA,IAAAC,uBAAA;MACnC,CAAAA,uBAAA,OAAI,CAAChC,WAAW,CAACS,OAAO,cAAAuB,uBAAA,eAAxBA,uBAAA,CAA0BF,iBAAiB,CAACC,SAAS,CAAC;IACxD;;IAEA;AACF;AACA;AACA;EAHE;IAAAxD,GAAA;IAAAC,KAAA,EAIA,SAAAyD,cAAcF,SAAiB,EAAE;MAAA,IAAAG,uBAAA;MAC/B,CAAAA,uBAAA,OAAI,CAAClC,WAAW,CAACS,OAAO,cAAAyB,uBAAA,eAAxBA,uBAAA,CAA0BD,aAAa,CAACF,SAAS,CAAC;IACpD;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAAxD,GAAA;IAAAC,KAAA,EAKA,SAAA2D,cAAcJ,SAAiB,EAAEK,KAAa,EAAE;MAAA,IAAAC,uBAAA;MAC9C,CAAAA,uBAAA,OAAI,CAACrC,WAAW,CAACS,OAAO,cAAA4B,uBAAA,eAAxBA,uBAAA,CAA0BF,aAAa,CAACJ,SAAS,EAAEK,KAAK,CAAC;IAC3D;;IAEA;AACF;AACA;AACA;AACA;EAJE;IAAA7D,GAAA;IAAAC,KAAA,EAKA,SAAA8D,cAAcC,KAAsC,EAAE;MAAA,IAAAC,uBAAA;MACpD,CAAAA,uBAAA,OAAI,CAACxC,WAAW,CAACS,OAAO,cAAA+B,uBAAA,eAAxBA,uBAAA,CAA0BF,aAAa,CAACC,KAAK,CAAC;IAChD;EAAC;IAAAhE,GAAA;IAAAC,KAAA,EA3JD,SAAAiE,YAAmB1E,KAAmB,EAAa;MAAA,IAAA2E,qBAAA;MACjD,IAAI5E,SAAsB;;MAE1B;MACA,KAAA4E,qBAAA,GAAI3E,KAAK,CAAC4E,cAAc,cAAAD,qBAAA,eAApBA,qBAAA,CAAsBE,EAAE,EAAE;QAC5B,IAAMC,iBAAiB,GAAGC,QAAQ,CAACC,cAAc,CAC/ChF,KAAK,CAAC4E,cAAc,CAACC,EACvB,CAAC;QACD,IAAIC,iBAAiB,EAAE;UACrB/E,SAAS,GAAG+E,iBAAiB;QAC/B,CAAC,MAAM;UACL;UACA/E,SAAS,GAAGgF,QAAQ,CAACE,aAAa,CAAC,KAAK,CAAC;UACzClF,SAAS,CAAC8E,EAAE,GAAG7E,KAAK,CAAC4E,cAAc,CAACC,EAAE;QACxC;MACF,CAAC,MAAM;QACL;QACA9E,SAAS,GAAGgF,QAAQ,CAACE,aAAa,CAAC,KAAK,CAAC;QACzClF,SAAS,CAAC8E,EAAE,GAAG,uBAAuB;MACxC;;MAEA;MACA,IAAI7E,KAAK,CAAC4E,cAAc,EAAE;QACxB,IAAAM,sBAAA,GAA8BlF,KAAK,CAAC4E,cAAc;UAA1CC,EAAE,GAAAK,sBAAA,CAAFL,EAAE;UAAKM,UAAU,GAAAC,wBAAA,CAAAF,sBAAA,EAAAG,SAAA;QACzBC,MAAM,CAACC,MAAM,CAACxF,SAAS,CAAC4B,KAAK,EAAEwD,UAAU,CAAC;MAC5C;;MAEA;MACA,IAAI,CAACpF,SAAS,CAACyF,UAAU,EAAE;QACzBT,QAAQ,CAACU,IAAI,CAACC,WAAW,CAAC3F,SAAS,CAAC;MACtC;MAEA,OAAO,IAAID,SAAS,CAACC,SAAS,EAAEC,KAAK,CAAC;IACxC;;IAEA;AACF;AACA;AACA;EAHE;IAAAQ,GAAA;IAAAC,KAAA,EAIA,SAAAkF,OAAc3F,KAAmB,EAAa;MAC5C,OAAO,IAAI,CAAC0E,WAAW,CAAC1E,KAAK,CAAC;IAChC;EAAC;EAAA,OAAAF,SAAA;AAAA,KAqHH;AACA;AACA8F,MAAM,CAAC9F,SAAS,GAAGA,SAAS;;AAE5B;AACA,eAAeA,SAAS"}
|