@ai-group/chat-sdk 3.8.0-alpha.2 → 3.8.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +42 -2
- package/dist/cjs/components/XAdkSender/index.js +16 -0
- package/dist/cjs/components/XAdkSender/index.js.map +2 -2
- package/dist/cjs/types/XAdkSender.d.ts +12 -0
- package/dist/cjs/types/XAdkSender.js.map +1 -1
- package/dist/esm/components/XAdkSender/index.js +14 -0
- package/dist/esm/components/XAdkSender/index.js.map +1 -1
- package/dist/esm/types/XAdkSender.d.ts +12 -0
- package/dist/esm/types/XAdkSender.js.map +1 -1
- package/dist/umd/chat-sdk.min.js +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useState","useRef","useCallback","forwardRef","useImperativeHandle","useMemo","useEffect","Popconfirm","message","Tooltip","Input","Modal","ClearOutlined","LoadingOutlined","ArrowUpOutlined","useStyles","FileGallery","InputSuggestionList","InputTags","InlineTagInput","getExt","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","XAdkSender","_ref","ref","_ref$clearBtnShow","clearBtnShow","_ref$draggable","draggable","onFileSelect","_ref$loading","loading","_ref$disabled","disabled","controlledValue","value","_ref$defaultValue","defaultValue","_ref$uploadRequest","uploadRequest","onClear","clearConfirm","onChange","onSubmit","onStop","onFilesChange","onUploadSuccess","onUploadError","_ref$maxFileSize","maxFileSize","_ref$placeholder","placeholder","_ref$validators","validators","customValidators","_ref$allowedFileTypes","allowedFileTypes","_ref$maxFiles","maxFiles","Infinity","sendButtonRender","suffix","header","prefix","footer","footerLeft","_ref$quickKeys","quickKeys","_ref$inlineTags","inlineTags","renderMention","renderTag","controlledMentions","mentions","controlledTags","tags","defaultMentions","_ref$defaultTags","defaultTags","defaultInputParts","onMentionsChange","onTagsChange","onQuickKeyTrigger","_ref$submitFormat","submitFormat","formatMention","formatTag","transformSubmitData","styles","isControlled","undefined","_useState","_useState2","_slicedToArray","internalValue","setInternalValue","setValue","newValue","resolvedControlledMentions","initialMentions","isMentionsControlled","_useState3","_useState4","internalMentions","setInternalMentions","setMentions","newMentions","_useState5","_useState6","files","setFiles","_useState7","_useState8","isDragOver","setIsDragOver","containerRef","textareaRef","inlineInputRef","_useState9","_useState10","activeQuickKey","setActiveQuickKey","_useState11","_useState12","quickKeyKeyword","setQuickKeyKeyword","_useState13","_useState14","quickKeyTriggerIdx","setQuickKeyTriggerIdx","_useState15","_useState16","quickKeyActiveIndex","setQuickKeyActiveIndex","closeQuickKeyList","generateId","Date","now","toString","Math","random","substr","normalizeUploadResponse","response","_response$data","_ref2","data","Array","isArray","escapeXml","text","replace","escapeMarkdownLabel","getMentionSubmitValue","mention","_ref3","_ref4","_ref5","_ref6","_ref7","_ref8","_ref9","_mention$value","_mention$data","_mention$data2","_mention$data3","String","uri","name","targetId","displayName","label","defaultFormatMention","format","index","concat","type","id","href","includes","encodeURIComponent","serializeMention","_ref10","_formatMention","getSubmitParts","_inlineInputRef$curre","parts","current","getParts","length","textParts","mentionParts","map","_toConsumableArray","serializeParts","reduce","content","part","tagIndex","result","join","createSubmitData","formattedFiles","rawText","standardData","_objectSpread","payload","checkFileType","file","ext","some","endsWith","startsWith","split","slice","isDuplicateFile","f","size","builtInValidators","_file","_ref11","maxSize","_ref12","allValidators","validateFile","_iterator","_createForOfIteratorHelper","_step","s","n","done","validator","error","valid","err","e","handleFileSelect","selectedFiles","fileArray","from","validFiles","forEach","validation","push","uid","progress","status","prev","next","uploadFiles","handleExistingFiles","_iterator2","_step2","_loop","selected","fileId","fileName","File","mimeType","tempUrl","raw","fileType","fileSize","_ret","addFiles","rawFiles","filter","insertMention","_inlineInputRef$curre2","insertTag","_inlineInputRef$curre3","focus","_inlineInputRef$curre4","_textareaRef$current","_ref13","_asyncToGenerator","_regeneratorRuntime","mark","_callee","fileList","_iterator3","_step3","_loop2","wrap","_callee$","_context2","localFile","_loop2$","_context","onProgress","percent","onSuccess","responseData","fileUrl","url","onError","errorMessage","t0","console","Error","stop","delegateYield","t1","finish","_x","apply","arguments","handleRemoveFile","handleDragOver","preventDefault","stopPropagation","handleDragLeave","handleDrop","dataTransfer","handleRemoveMention","item","activeQuickKeyConfig","find","qk","key","activeQuickKeyOptionsLength","options","getNextQuickKeyIndex","step","detectQuickKey","cursorPos","quickKeyChars","textBeforeCursor","found","i","char","test","keyword","triggerChar","handleQuickKeySelect","option","_ref14","_ref15","_option$value","_ref16","_option$targetId","_option$displayName","_option$onSelect","_activeQuickKeyConfig","_inlineInputRef$curre7","_textareaRef$current2","mentionType","tagType","newMention","skillNo","pluginNo","trigger","icon","onSelect","call","action","_inlineInputRef$curre5","deleteTextRange","start","end","_inlineInputRef$curre6","handleInputChange","target","selectionStart","handleInlineInputChange","_inlineInputRef$curre8","getCursorOffset","handleQuickKeyByText","lastChar","isQuickListControlKey","handleKeyUp","handleInlineKeyUp","_inlineInputRef$curre9","_inlineInputRef$curre10","getText","handleSubmit","trim","warning","successFiles","uploadingFiles","confirm","title","okText","cancelText","onOk","formatFilesForServer","onCancel","info","handleKeyDown","nativeEvent","isComposing","keyCode","quickKeyOptions","min","shiftKey","renderFileList","className","contextFiles","children","removable","onRemove","containerClass","container","uploading","controlsDisabled","inputDisabled","hasContent","hasFiles","hasMentions","canSend","SendButton","props","onSend","iconButton","sendButton","onClick","spin","ClearButton","_clearConfirm$title","_clearConfirm$okText","_clearConfirm$cancelT","onConfirm","placement","clearButton","actionsComponents","renderSlot","slot","oriNode","components","headerNode","fileListNode","defaultSuffix","buttonGroup","defaultActionBar","actionBar","actionBarLeft","actionBarRight","onBlur","event","nextFocusedNode","relatedTarget","currentTarget","contains","onDragOver","onDragLeave","onDrop","mainArea","senderWrap","contextBar","contextHeader","inputAndButtons","onKeyDown","onKeyUp","textAreaWrapper","TextArea","textArea","autoSize","minRows","maxRows","style","border","boxShadow","outline","padding","quickListWrapper","config","activeIndex","onClose","visible","tip"],"sources":["../../../../src/components/XAdkSender/index.tsx"],"sourcesContent":["import React, {\n useState,\n useRef,\n useCallback,\n forwardRef,\n useImperativeHandle,\n useMemo,\n useEffect,\n} from \"react\";\nimport { Popconfirm, message, Tooltip, Input, Modal } from \"antd\";\nimport {\n ClearOutlined,\n LoadingOutlined,\n ArrowUpOutlined,\n} from \"@ant-design/icons\";\nimport {\n XAdkSenderProps,\n XAdkSenderHandle,\n ServerFile,\n LocalFile,\n ActionsComponents,\n FileValidator,\n UploadFileResult,\n MentionTag,\n XAdkSenderSubmitData,\n XAdkSenderSubmitFormat,\n XAdkSenderSubmitPart,\n} from \"@/types\";\nimport { useStyles } from \"./styles\";\nimport FileGallery from \"../FileGallery\";\nimport InputSuggestionList from \"./InputSuggestionList\";\nimport InputTags from \"./InputTags\";\nimport InlineTagInput, { InlineTagInputRef } from \"./InlineTagInput\";\nimport { getExt } from \"@/utils/file\";\n\nconst XAdkSender = forwardRef<XAdkSenderHandle, XAdkSenderProps>(\n (\n {\n clearBtnShow = true,\n draggable = false,\n onFileSelect,\n loading = false,\n disabled = false,\n value: controlledValue,\n defaultValue = \"\",\n uploadRequest = () => {},\n onClear,\n clearConfirm,\n onChange,\n onSubmit,\n onStop,\n onFilesChange,\n onUploadSuccess,\n onUploadError,\n maxFileSize = 10,\n placeholder = \"\",\n validators: customValidators = [],\n allowedFileTypes = [],\n maxFiles = Infinity,\n sendButtonRender,\n suffix,\n header,\n prefix,\n footer,\n footerLeft,\n quickKeys = [],\n inlineTags = false,\n renderMention,\n renderTag,\n mentions: controlledMentions,\n tags: controlledTags,\n defaultMentions,\n defaultTags = [],\n defaultInputParts,\n onMentionsChange,\n onTagsChange,\n onQuickKeyTrigger,\n submitFormat = \"text\",\n formatMention,\n formatTag,\n transformSubmitData,\n },\n ref,\n ) => {\n const styles = useStyles();\n const isControlled = controlledValue !== undefined;\n const [internalValue, setInternalValue] = useState<string>(defaultValue);\n const value = isControlled ? controlledValue : internalValue;\n const setValue = (newValue: string) => {\n if (!isControlled) {\n setInternalValue(newValue);\n }\n onChange?.(newValue);\n };\n\n // mentions 支持受控/非受控两种模式;inlineTags 打开时会和输入内容混排。\n const resolvedControlledMentions = controlledMentions ?? controlledTags;\n const initialMentions = defaultMentions ?? defaultTags;\n const isMentionsControlled = resolvedControlledMentions !== undefined;\n const [internalMentions, setInternalMentions] =\n useState<MentionTag[]>(initialMentions);\n const mentions = isMentionsControlled\n ? resolvedControlledMentions!\n : internalMentions;\n const setMentions = (newMentions: MentionTag[]) => {\n if (!isMentionsControlled) {\n setInternalMentions(newMentions);\n }\n onMentionsChange?.(newMentions);\n onTagsChange?.(newMentions);\n };\n\n const [files, setFiles] = useState<LocalFile[]>([]);\n const [isDragOver, setIsDragOver] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n const textareaRef = useRef<any>(null);\n const inlineInputRef = useRef<InlineTagInputRef>(null);\n\n // 快捷键弹层状态:记录触发字符、关键词,以及触发字符在纯文本中的位置。\n // SDK 不内置搜索框;业务方可在 onQuickKeyTrigger 中根据 keyword 自行更新 quickKeys.options。\n const [activeQuickKey, setActiveQuickKey] = useState<string | null>(null);\n const [quickKeyKeyword, setQuickKeyKeyword] = useState(\"\");\n const [quickKeyTriggerIdx, setQuickKeyTriggerIdx] = useState(-1);\n const [quickKeyActiveIndex, setQuickKeyActiveIndex] = useState(0);\n\n const closeQuickKeyList = useCallback(() => {\n setActiveQuickKey(null);\n setQuickKeyKeyword(\"\");\n setQuickKeyTriggerIdx(-1);\n setQuickKeyActiveIndex(0);\n }, []);\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 const escapeXml = (text: string) =>\n text\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n\n const escapeMarkdownLabel = (text: string) =>\n text.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\]/g, \"\\\\]\");\n\n const getMentionSubmitValue = (mention: MentionTag) =>\n String(\n mention.value ??\n mention.uri ??\n mention.data?.uri ??\n mention.data?.value ??\n mention.data?.name ??\n mention.targetId ??\n mention.displayName ??\n mention.label ??\n \"\",\n );\n\n const defaultFormatMention = (\n mention: MentionTag,\n format: Exclude<XAdkSenderSubmitFormat, \"structured\">,\n index: number,\n ) => {\n const value = getMentionSubmitValue(mention);\n if (format === \"xml\") {\n return `<mention type=\"${escapeXml(mention.type)}\" id=\"${escapeXml(mention.id)}\" label=\"${escapeXml(mention.label)}\" value=\"${escapeXml(value)}\" />`;\n }\n\n if (format === \"markdown\") {\n const href =\n mention.uri ||\n (value.includes(\"://\")\n ? value\n : `xadk-mention://${encodeURIComponent(mention.type)}/${encodeURIComponent(mention.id)}`);\n return `[@${escapeMarkdownLabel(mention.displayName || mention.label)}](${href})`;\n }\n\n return `@${mention.displayName || value || `mention-${index + 1}`}`;\n };\n\n const serializeMention = (\n mention: MentionTag,\n format: Exclude<XAdkSenderSubmitFormat, \"structured\">,\n index: number,\n ) =>\n formatMention?.(mention, { format, index }) ??\n formatTag?.(mention, { format, index }) ??\n defaultFormatMention(mention, format, index);\n\n const getSubmitParts = useCallback((): XAdkSenderSubmitPart[] => {\n if (inlineTags) {\n const parts = inlineInputRef.current?.getParts() || [];\n if (parts.length > 0) return parts;\n }\n\n const textParts: XAdkSenderSubmitPart[] = value\n ? [{ type: \"text\", text: value }]\n : [];\n const mentionParts = mentions.map((mention) => ({\n type: \"mention\" as const,\n mention,\n }));\n return [...mentionParts, ...textParts];\n }, [inlineTags, mentions, value]);\n\n const serializeParts = (\n parts: XAdkSenderSubmitPart[],\n format: XAdkSenderSubmitFormat,\n ) => {\n if (format === \"structured\") {\n return parts.reduce(\n (content, part) => content + (part.type === \"text\" ? part.text : \"\"),\n \"\",\n );\n }\n\n let tagIndex = 0;\n return parts\n .map((part) => {\n if (part.type === \"text\") return part.text;\n const result = serializeMention(part.mention, format, tagIndex);\n tagIndex += 1;\n return result;\n })\n .join(\"\");\n };\n\n const createSubmitData = (\n formattedFiles: ServerFile[],\n ): XAdkSenderSubmitData => {\n const parts = getSubmitParts();\n const rawText = parts.reduce(\n (content, part) => content + (part.type === \"text\" ? part.text : \"\"),\n \"\",\n );\n const standardData: Omit<XAdkSenderSubmitData, \"payload\"> = {\n text: serializeParts(parts, submitFormat),\n rawText,\n format: submitFormat,\n parts,\n files: formattedFiles,\n mentions,\n tags: mentions,\n };\n\n return {\n ...standardData,\n payload: transformSubmitData?.(standardData),\n };\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 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 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 (_file, { files }) => {\n if (files.length >= maxFiles) {\n return `最多只能上传 ${maxFiles} 个文件`;\n }\n return null;\n },\n (file) => {\n const maxSize = maxFileSize * 1024 * 1024;\n if (file.size > maxSize) {\n return `文件大小不能超过 ${maxFileSize}MB`;\n }\n return null;\n },\n (file) => {\n if (!checkFileType(file)) {\n return \"不支持的文件类型\";\n }\n return null;\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 const handleExistingFiles = useCallback(\n (selectedFiles: ServerFile[]) => {\n if (!selectedFiles.length) return;\n setFiles((prev) => {\n const next = [...prev];\n for (const selected of selectedFiles) {\n if (!selected.fileId || !selected.fileName) continue;\n if (next.some((file) => String(file.fileId) === String(selected.fileId))) continue;\n if (next.length >= maxFiles) {\n message.error(`最多只能上传 ${maxFiles} 个文件`);\n break;\n }\n const id = generateId();\n const file = new File([], selected.fileName, { type: selected.mimeType });\n next.push({\n id,\n uid: id,\n name: selected.fileName,\n file,\n size: selected.size || 0,\n type: selected.mimeType,\n progress: 100,\n status: \"success\",\n fileId: selected.fileId,\n tempUrl: selected.tempUrl,\n response: {\n ...selected.raw,\n fileName: selected.fileName,\n fileId: selected.fileId,\n tempUrl: selected.tempUrl,\n fileType: selected.type,\n fileSize: selected.size,\n mimeType: selected.mimeType,\n },\n });\n }\n if (next.length !== prev.length) onFilesChange?.(next);\n return next;\n });\n },\n [maxFiles, onFilesChange],\n );\n\n // 暴露给业务工具栏调用的命令式能力;外部 Popover 选择标签时可插入到当前光标位置。\n useImperativeHandle(\n ref,\n () => ({\n addFiles: (rawFiles: Array<File | ServerFile>) => {\n handleFileSelect(rawFiles.filter((file): file is File => file instanceof File));\n handleExistingFiles(rawFiles.filter((file): file is ServerFile => !(file instanceof File)));\n },\n insertMention: (mention: MentionTag) => {\n if (inlineTags) {\n inlineInputRef.current?.insertMention(mention);\n return;\n }\n setMentions([...mentions, mention]);\n },\n insertTag: (mention: MentionTag) => {\n if (inlineTags) {\n inlineInputRef.current?.insertMention(mention);\n return;\n }\n setMentions([...mentions, mention]);\n },\n focus: () => {\n inlineTags\n ? inlineInputRef.current?.focus()\n : textareaRef.current?.focus();\n },\n }),\n [handleFileSelect, handleExistingFiles, inlineTags, setMentions, mentions],\n );\n\n // 上传文件\n const uploadFiles = async (fileList: LocalFile[]) => {\n for (const localFile of fileList) {\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 ||\n responseData.fileUrl ||\n 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 onFilesChange?.(next);\n return next;\n });\n };\n\n // 处理拖拽事件\n const handleDragOver = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (draggable) {\n setIsDragOver(true);\n }\n },\n [draggable],\n );\n\n const handleDragLeave = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (draggable) {\n setIsDragOver(false);\n }\n },\n [draggable],\n );\n\n const handleDrop = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragOver(false);\n\n if (\n draggable &&\n e.dataTransfer.files &&\n e.dataTransfer.files.length > 0\n ) {\n // 内核不再自行处理文件,交给外层(DefaultLayout/业务)通过 onFileSelect 决定\n onFileSelect?.(Array.from(e.dataTransfer.files));\n }\n },\n [draggable, onFileSelect],\n );\n\n // 删除标签\n const handleRemoveMention = useCallback(\n (id: string) => {\n setMentions(mentions.filter((item) => item.id !== id));\n },\n [mentions, setMentions],\n );\n\n // 查找当前活跃的快捷键配置\n const activeQuickKeyConfig = useMemo(() => {\n if (!activeQuickKey) return null;\n return quickKeys.find((qk) => qk.key === activeQuickKey) || null;\n }, [activeQuickKey, quickKeys]);\n\n const activeQuickKeyOptionsLength =\n activeQuickKeyConfig?.options.length || 0;\n\n useEffect(() => {\n setQuickKeyActiveIndex(0);\n }, [activeQuickKey]);\n\n useEffect(() => {\n if (activeQuickKeyOptionsLength <= 0) {\n setQuickKeyActiveIndex(0);\n return;\n }\n\n // 业务方可能在 onQuickKeyTrigger 中动态更新 options;\n // 这里只做越界归一化,不重置有效索引,避免键盘高亮移动后又跳回第一项。\n setQuickKeyActiveIndex(\n (prev) =>\n ((prev % activeQuickKeyOptionsLength) + activeQuickKeyOptionsLength) %\n activeQuickKeyOptionsLength,\n );\n }, [activeQuickKeyOptionsLength]);\n\n const getNextQuickKeyIndex = useCallback(\n (current: number, step: number) => {\n if (activeQuickKeyOptionsLength <= 0) return 0;\n return (\n (current + step + activeQuickKeyOptionsLength) %\n activeQuickKeyOptionsLength\n );\n },\n [activeQuickKeyOptionsLength],\n );\n\n // 从当前光标前的连续文本片段中查找最近的快捷键,例如 abc@doc 会触发 @。\n const detectQuickKey = useCallback(\n (text: string, cursorPos: number) => {\n const quickKeyChars = quickKeys.map((qk) => qk.key);\n if (quickKeyChars.length === 0) return;\n\n const textBeforeCursor = text.slice(0, cursorPos);\n let found = false;\n for (let i = textBeforeCursor.length - 1; i >= 0; i--) {\n const char = textBeforeCursor[i];\n if (/\\s/.test(char)) break;\n if (quickKeyChars.includes(char)) {\n const keyword = textBeforeCursor.slice(i + 1);\n setActiveQuickKey(char);\n setQuickKeyKeyword(keyword);\n setQuickKeyTriggerIdx(i);\n setQuickKeyActiveIndex(0);\n onQuickKeyTrigger?.(char, keyword);\n found = true;\n break;\n }\n }\n\n if (!found && activeQuickKey) {\n const triggerChar = text[quickKeyTriggerIdx];\n const keyword = text.slice(quickKeyTriggerIdx + 1, cursorPos);\n if (\n quickKeyTriggerIdx < 0 ||\n !triggerChar ||\n !quickKeyChars.includes(triggerChar) ||\n /\\s/.test(keyword)\n ) {\n setActiveQuickKey(null);\n setQuickKeyKeyword(\"\");\n setQuickKeyTriggerIdx(-1);\n setQuickKeyActiveIndex(0);\n } else {\n setQuickKeyKeyword(keyword);\n }\n }\n },\n [activeQuickKey, onQuickKeyTrigger, quickKeyTriggerIdx, quickKeys],\n );\n\n // 选择快捷项后转成结构化 Mention;inline 模式会替换掉触发字符和关键词。\n const handleQuickKeySelect = useCallback(\n (option: any) => {\n const mentionType =\n activeQuickKeyConfig?.mentionType ||\n activeQuickKeyConfig?.tagType ||\n activeQuickKey ||\n \"unknown\";\n const newMention: MentionTag = {\n id: generateId(),\n label: option.label,\n type: mentionType,\n value: option.value ?? option.uri ?? option.name ?? option.label,\n uri: option.uri,\n targetId: option.targetId ?? option.skillNo ?? option.pluginNo,\n displayName: option.displayName ?? option.label,\n trigger: activeQuickKey || undefined,\n icon: option.icon,\n data: option,\n };\n option.onSelect?.(option);\n activeQuickKeyConfig?.onSelect?.(option);\n\n if (option.action === \"command\") {\n if (inlineTags) {\n inlineInputRef.current?.deleteTextRange({\n start: quickKeyTriggerIdx,\n end: quickKeyTriggerIdx + 1 + quickKeyKeyword.length,\n });\n } else if (quickKeyTriggerIdx >= 0) {\n setValue(\n value.slice(0, quickKeyTriggerIdx) +\n value.slice(quickKeyTriggerIdx + 1 + quickKeyKeyword.length),\n );\n }\n } else if (inlineTags) {\n inlineInputRef.current?.insertMention(newMention, {\n start: quickKeyTriggerIdx,\n end: quickKeyTriggerIdx + 1 + quickKeyKeyword.length,\n });\n } else {\n setMentions([...mentions, newMention]);\n\n // 从输入框中删除快捷键字符和关键词\n if (quickKeyTriggerIdx >= 0) {\n const newValue =\n value.slice(0, quickKeyTriggerIdx) +\n value.slice(quickKeyTriggerIdx + 1 + quickKeyKeyword.length);\n setValue(newValue);\n }\n }\n\n setActiveQuickKey(null);\n setQuickKeyKeyword(\"\");\n setQuickKeyTriggerIdx(-1);\n setQuickKeyActiveIndex(0);\n inlineTags\n ? inlineInputRef.current?.focus()\n : textareaRef.current?.focus();\n },\n [\n activeQuickKey,\n activeQuickKeyConfig,\n inlineTags,\n mentions,\n setMentions,\n value,\n quickKeyTriggerIdx,\n quickKeyKeyword,\n setValue,\n ],\n );\n\n // 处理输入框变化(含快捷键检测)\n const handleInputChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const newValue = e.target.value;\n setValue(newValue);\n\n // 检测快捷键触发\n detectQuickKey(newValue, e.target.selectionStart || 0);\n };\n\n const handleInlineInputChange = (newValue: string) => {\n setValue(newValue);\n // contenteditable 的 selection 不一定和 React state 同步,需实时读取内部光标 offset。\n detectQuickKey(\n newValue,\n inlineInputRef.current?.getCursorOffset() || newValue.length,\n );\n };\n\n const handleQuickKeyByText = (text: string, cursorPos: number) => {\n const quickKeyChars = quickKeys.map((qk) => qk.key);\n if (quickKeyChars.length === 0) return;\n\n const textBeforeCursor = text.slice(0, cursorPos);\n\n // 检测刚输入的字符是否是快捷键\n const lastChar = textBeforeCursor[cursorPos - 1];\n if (lastChar && quickKeyChars.includes(lastChar)) {\n // 上下键导航后会触发 keyup,此时光标前仍是同一个快捷键字符;\n // 如果重复重置 activeIndex,视觉上会“移动一下又回到第一项”。\n if (\n activeQuickKey === lastChar &&\n quickKeyTriggerIdx === cursorPos - 1\n ) {\n return;\n }\n setActiveQuickKey(lastChar);\n setQuickKeyKeyword(\"\");\n setQuickKeyTriggerIdx(cursorPos - 1);\n setQuickKeyActiveIndex(0);\n onQuickKeyTrigger?.(lastChar, \"\");\n }\n };\n\n // onChange 负责更新搜索词;onKeyUp 兜底捕获刚输入的快捷键字符。\n const isQuickListControlKey = (key: string) =>\n key === \"ArrowDown\" ||\n key === \"ArrowUp\" ||\n key === \"Enter\" ||\n key === \"Escape\";\n\n const handleKeyUp = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (activeQuickKey && isQuickListControlKey(e.key)) return;\n const target = e.target as HTMLTextAreaElement;\n handleQuickKeyByText(target.value || \"\", target.selectionStart || 0);\n };\n\n const handleInlineKeyUp = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (activeQuickKey && isQuickListControlKey(e.key)) return;\n // inline 输入区不是 textarea,不能读 event.target.value,只能从 ref 取纯文本。\n const text = inlineInputRef.current?.getText() || \"\";\n const cursorPos =\n inlineInputRef.current?.getCursorOffset() || text.length;\n handleQuickKeyByText(text, cursorPos);\n };\n\n // 处理提交\n const handleSubmit = () => {\n // 生成期间允许继续编辑下一条消息,但停止按钮仍代表当前唯一可执行动作。\n if (loading) return;\n if (!value.trim() && files.length === 0 && mentions.length === 0) {\n message.warning(\"请输入消息或选择文件\");\n return;\n }\n\n const successFiles = files.filter((file) => file.status === \"success\");\n const uploadingFiles = files.filter(\n (file) => file.status === \"uploading\",\n );\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(createSubmitData(formattedFiles));\n }\n\n setValue(\"\");\n setMentions([]);\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(createSubmitData(formattedFiles));\n }\n\n setValue(\"\");\n setMentions([]);\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 ||\n responseData.fileUrl ||\n responseData.url ||\n \"\",\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 handleKeyDown = (e: React.KeyboardEvent<HTMLElement>) => {\n // 输入法候选阶段的 Enter 用于确认候选词,不能触发快捷项选择或消息发送。\n if (e.nativeEvent.isComposing || e.keyCode === 229) return;\n\n const quickKeyOptions = activeQuickKeyConfig?.options || [];\n\n if (activeQuickKey && quickKeyOptions.length > 0) {\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n setQuickKeyActiveIndex((prev) => getNextQuickKeyIndex(prev, 1));\n return;\n }\n\n if (e.key === \"ArrowUp\") {\n e.preventDefault();\n setQuickKeyActiveIndex((prev) => getNextQuickKeyIndex(prev, -1));\n return;\n }\n\n if (e.key === \"Enter\") {\n e.preventDefault();\n handleQuickKeySelect(\n quickKeyOptions[\n Math.min(quickKeyActiveIndex, quickKeyOptions.length - 1)\n ],\n );\n return;\n }\n\n if (e.key === \"Escape\") {\n e.preventDefault();\n setActiveQuickKey(null);\n setQuickKeyKeyword(\"\");\n setQuickKeyTriggerIdx(-1);\n setQuickKeyActiveIndex(0);\n return;\n }\n }\n\n if (e.key === \"Enter\" && !e.shiftKey && !activeQuickKey) {\n e.preventDefault();\n handleSubmit();\n }\n };\n\n // 渲染文件列表\n const renderFileList = () => {\n if (files.length === 0) return null;\n\n return (\n <div className={styles.contextFiles}>\n {files.map((file) => (\n <FileGallery\n key={file.id}\n file={file}\n size=\"small\"\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 controlsDisabled = disabled || uploading || loading;\n const inputDisabled = disabled || uploading;\n const hasContent = value.trim().length > 0;\n const hasFiles = files.some((f) => f.status === \"success\");\n const hasMentions = mentions.length > 0;\n const canSend = hasContent || hasFiles || hasMentions;\n\n // 定义按钮组件\n const SendButton = (props: any) => {\n if (sendButtonRender) {\n return (\n <>\n {sendButtonRender({\n loading,\n disabled: uploading || disabled,\n canSend,\n onSend: handleSubmit,\n onStop,\n })}\n </>\n );\n }\n return (\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 spin /> : <ArrowUpOutlined />}\n </button>\n </Tooltip>\n );\n };\n\n const ClearButton = (props: any) => (\n <Popconfirm\n title={clearConfirm?.title ?? \"确定要清空聊天记录吗?\"}\n onConfirm={onClear}\n placement=\"top\"\n okText={clearConfirm?.okText ?? \"确定\"}\n cancelText={clearConfirm?.cancelText ?? \"取消\"}\n disabled={controlsDisabled}\n >\n <button\n className={`${styles.iconButton} ${styles.clearButton}`}\n disabled={controlsDisabled}\n aria-label=\"清空聊天记录\"\n {...props}\n >\n <ClearOutlined />\n </button>\n </Popconfirm>\n );\n\n const actionsComponents: ActionsComponents = {\n SendButton,\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 const headerNode = renderSlot(header, false);\n const fileListNode = files.length > 0 ? renderFileList() : null;\n\n // 默认后缀仅保留发送/停止按钮;上传与清空统一放到底部 actionBar,方便业务扩展左侧按钮组。\n const defaultSuffix = (\n <div className={styles.buttonGroup}>\n {sendButtonRender ? (\n sendButtonRender({\n loading,\n disabled: uploading || disabled,\n canSend,\n onSend: handleSubmit,\n onStop,\n })\n ) : (\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 >\n {loading ? <LoadingOutlined spin /> : <ArrowUpOutlined />}\n </button>\n </Tooltip>\n )}\n </div>\n );\n\n const defaultActionBar = (\n <div className={styles.actionBar}>\n <div className={styles.actionBarLeft}>\n {renderSlot(footerLeft, false)}\n </div>\n <div className={styles.actionBarRight}>\n {clearBtnShow && <ClearButton />}\n {renderSlot(suffix, defaultSuffix)}\n </div>\n </div>\n );\n\n return (\n <div\n ref={containerRef}\n className={containerClass}\n onBlur={(event) => {\n const nextFocusedNode = event.relatedTarget as Node | null;\n if (\n nextFocusedNode &&\n event.currentTarget.contains(nextFocusedNode)\n ) {\n return;\n }\n closeQuickKeyList();\n }}\n onDragOver={draggable ? handleDragOver : undefined}\n onDragLeave={draggable ? handleDragLeave : undefined}\n onDrop={draggable ? handleDrop : undefined}\n >\n <div className={styles.mainArea}>\n <div className={styles.senderWrap}>\n {(headerNode || fileListNode) && (\n <div className={styles.contextBar}>\n {/* 头部插槽与附件共享上下文行,便于知识库、文件等输入上下文统一展示。 */}\n {headerNode && (\n <div className={styles.contextHeader}>{headerNode}</div>\n )}\n {fileListNode}\n </div>\n )}\n\n {/* textarea 模式下保留历史标签展示;inlineTags 模式标签直接混排在输入区内 */}\n {!inlineTags && (\n <InputTags mentions={mentions} onRemove={handleRemoveMention} />\n )}\n\n <div className={styles.inputAndButtons}>\n {/* 前缀插槽 */}\n {renderSlot(prefix, false)}\n\n {inlineTags ? (\n <InlineTagInput\n ref={inlineInputRef}\n value={value}\n mentions={mentions}\n defaultInputParts={defaultInputParts}\n placeholder={placeholder}\n disabled={inputDisabled}\n onChange={handleInlineInputChange}\n onMentionsChange={setMentions}\n onKeyDown={handleKeyDown as any}\n onKeyUp={handleInlineKeyUp}\n renderMention={renderMention ?? renderTag}\n />\n ) : (\n <div className={styles.textAreaWrapper}>\n <Input.TextArea\n ref={textareaRef}\n className={styles.textArea}\n value={value}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n onKeyUp={handleKeyUp}\n placeholder={placeholder}\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 </div>\n\n {/* 快捷键弹出列表 */}\n {activeQuickKey && activeQuickKeyConfig && (\n <div className={styles.quickListWrapper}>\n <InputSuggestionList\n config={activeQuickKeyConfig}\n activeIndex={quickKeyActiveIndex}\n onSelect={handleQuickKeySelect}\n onClose={closeQuickKeyList}\n visible={true}\n />\n </div>\n )}\n\n {/* 底部操作行:左侧上传/业务按钮,右侧清空/发送按钮 */}\n {footer === false\n ? defaultActionBar\n : renderSlot(footer, defaultActionBar)}\n </div>\n </div>\n\n {/* 提示文案 */}\n {!footer && (\n <div className={styles.tip}>\n 内容由AI生成,无法确保真实准确,仅供参考\n </div>\n )}\n </div>\n );\n },\n);\n\nXAdkSender.displayName = \"XAdkSender\";\nexport default XAdkSender;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["React","useState","useRef","useCallback","forwardRef","useImperativeHandle","useMemo","useEffect","Popconfirm","message","Tooltip","Input","Modal","ClearOutlined","LoadingOutlined","ArrowUpOutlined","useStyles","FileGallery","InputSuggestionList","InputTags","InlineTagInput","getExt","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","XAdkSender","_ref","ref","_ref$clearBtnShow","clearBtnShow","_ref$draggable","draggable","onFileSelect","_ref$pasteable","pasteable","onFilePaste","_ref$loading","loading","_ref$disabled","disabled","controlledValue","value","_ref$defaultValue","defaultValue","_ref$uploadRequest","uploadRequest","onClear","clearConfirm","onChange","onSubmit","onStop","onFilesChange","onUploadSuccess","onUploadError","_ref$maxFileSize","maxFileSize","_ref$placeholder","placeholder","_ref$validators","validators","customValidators","_ref$allowedFileTypes","allowedFileTypes","_ref$maxFiles","maxFiles","Infinity","sendButtonRender","suffix","header","prefix","footer","footerLeft","_ref$quickKeys","quickKeys","_ref$inlineTags","inlineTags","renderMention","renderTag","controlledMentions","mentions","controlledTags","tags","defaultMentions","_ref$defaultTags","defaultTags","defaultInputParts","onMentionsChange","onTagsChange","onQuickKeyTrigger","_ref$submitFormat","submitFormat","formatMention","formatTag","transformSubmitData","styles","isControlled","undefined","_useState","_useState2","_slicedToArray","internalValue","setInternalValue","setValue","newValue","resolvedControlledMentions","initialMentions","isMentionsControlled","_useState3","_useState4","internalMentions","setInternalMentions","setMentions","newMentions","_useState5","_useState6","files","setFiles","_useState7","_useState8","isDragOver","setIsDragOver","containerRef","textareaRef","inlineInputRef","_useState9","_useState10","activeQuickKey","setActiveQuickKey","_useState11","_useState12","quickKeyKeyword","setQuickKeyKeyword","_useState13","_useState14","quickKeyTriggerIdx","setQuickKeyTriggerIdx","_useState15","_useState16","quickKeyActiveIndex","setQuickKeyActiveIndex","closeQuickKeyList","generateId","Date","now","toString","Math","random","substr","normalizeUploadResponse","response","_response$data","_ref2","data","Array","isArray","escapeXml","text","replace","escapeMarkdownLabel","getMentionSubmitValue","mention","_ref3","_ref4","_ref5","_ref6","_ref7","_ref8","_ref9","_mention$value","_mention$data","_mention$data2","_mention$data3","String","uri","name","targetId","displayName","label","defaultFormatMention","format","index","concat","type","id","href","includes","encodeURIComponent","serializeMention","_ref10","_formatMention","getSubmitParts","_inlineInputRef$curre","parts","current","getParts","length","textParts","mentionParts","map","_toConsumableArray","serializeParts","reduce","content","part","tagIndex","result","join","createSubmitData","formattedFiles","rawText","standardData","_objectSpread","payload","checkFileType","file","ext","some","endsWith","startsWith","split","slice","isDuplicateFile","f","size","builtInValidators","_file","_ref11","maxSize","_ref12","allValidators","validateFile","_iterator","_createForOfIteratorHelper","_step","s","n","done","validator","error","valid","err","e","handleFileSelect","selectedFiles","fileArray","from","validFiles","forEach","validation","push","uid","progress","status","prev","next","uploadFiles","handleExistingFiles","_iterator2","_step2","_loop","selected","fileId","fileName","File","mimeType","tempUrl","raw","fileType","fileSize","_ret","addFiles","rawFiles","filter","insertMention","_inlineInputRef$curre2","insertTag","_inlineInputRef$curre3","focus","_inlineInputRef$curre4","_textareaRef$current","_ref13","_asyncToGenerator","_regeneratorRuntime","mark","_callee","fileList","_iterator3","_step3","_loop2","wrap","_callee$","_context2","localFile","_loop2$","_context","onProgress","percent","onSuccess","responseData","fileUrl","url","onError","errorMessage","t0","console","Error","stop","delegateYield","t1","finish","_x","apply","arguments","handleRemoveFile","handleDragOver","preventDefault","stopPropagation","handleDragLeave","handleDrop","dataTransfer","handlePaste","_e$clipboardData","clipboardData","handleRemoveMention","item","activeQuickKeyConfig","find","qk","key","activeQuickKeyOptionsLength","options","getNextQuickKeyIndex","step","detectQuickKey","cursorPos","quickKeyChars","textBeforeCursor","found","i","char","test","keyword","triggerChar","handleQuickKeySelect","option","_ref14","_ref15","_option$value","_ref16","_option$targetId","_option$displayName","_option$onSelect","_activeQuickKeyConfig","_inlineInputRef$curre7","_textareaRef$current2","mentionType","tagType","newMention","skillNo","pluginNo","trigger","icon","onSelect","call","action","_inlineInputRef$curre5","deleteTextRange","start","end","_inlineInputRef$curre6","handleInputChange","target","selectionStart","handleInlineInputChange","_inlineInputRef$curre8","getCursorOffset","handleQuickKeyByText","lastChar","isQuickListControlKey","handleKeyUp","handleInlineKeyUp","_inlineInputRef$curre9","_inlineInputRef$curre10","getText","handleSubmit","trim","warning","successFiles","uploadingFiles","confirm","title","okText","cancelText","onOk","formatFilesForServer","onCancel","info","handleKeyDown","nativeEvent","isComposing","keyCode","quickKeyOptions","min","shiftKey","renderFileList","className","contextFiles","children","removable","onRemove","containerClass","container","uploading","controlsDisabled","inputDisabled","hasContent","hasFiles","hasMentions","canSend","SendButton","props","onSend","iconButton","sendButton","onClick","spin","ClearButton","_clearConfirm$title","_clearConfirm$okText","_clearConfirm$cancelT","onConfirm","placement","clearButton","actionsComponents","renderSlot","slot","oriNode","components","headerNode","fileListNode","defaultSuffix","buttonGroup","defaultActionBar","actionBar","actionBarLeft","actionBarRight","onBlur","event","nextFocusedNode","relatedTarget","currentTarget","contains","onDragOver","onDragLeave","onDrop","onPaste","mainArea","senderWrap","contextBar","contextHeader","inputAndButtons","onKeyDown","onKeyUp","textAreaWrapper","TextArea","textArea","autoSize","minRows","maxRows","style","border","boxShadow","outline","padding","quickListWrapper","config","activeIndex","onClose","visible","tip"],"sources":["../../../../src/components/XAdkSender/index.tsx"],"sourcesContent":["import React, {\n useState,\n useRef,\n useCallback,\n forwardRef,\n useImperativeHandle,\n useMemo,\n useEffect,\n} from \"react\";\nimport { Popconfirm, message, Tooltip, Input, Modal } from \"antd\";\nimport {\n ClearOutlined,\n LoadingOutlined,\n ArrowUpOutlined,\n} from \"@ant-design/icons\";\nimport {\n XAdkSenderProps,\n XAdkSenderHandle,\n ServerFile,\n LocalFile,\n ActionsComponents,\n FileValidator,\n UploadFileResult,\n MentionTag,\n XAdkSenderSubmitData,\n XAdkSenderSubmitFormat,\n XAdkSenderSubmitPart,\n} from \"@/types\";\nimport { useStyles } from \"./styles\";\nimport FileGallery from \"../FileGallery\";\nimport InputSuggestionList from \"./InputSuggestionList\";\nimport InputTags from \"./InputTags\";\nimport InlineTagInput, { InlineTagInputRef } from \"./InlineTagInput\";\nimport { getExt } from \"@/utils/file\";\n\nconst XAdkSender = forwardRef<XAdkSenderHandle, XAdkSenderProps>(\n (\n {\n clearBtnShow = true,\n draggable = false,\n onFileSelect,\n pasteable = true,\n onFilePaste,\n loading = false,\n disabled = false,\n value: controlledValue,\n defaultValue = \"\",\n uploadRequest = () => {},\n onClear,\n clearConfirm,\n onChange,\n onSubmit,\n onStop,\n onFilesChange,\n onUploadSuccess,\n onUploadError,\n maxFileSize = 10,\n placeholder = \"\",\n validators: customValidators = [],\n allowedFileTypes = [],\n maxFiles = Infinity,\n sendButtonRender,\n suffix,\n header,\n prefix,\n footer,\n footerLeft,\n quickKeys = [],\n inlineTags = false,\n renderMention,\n renderTag,\n mentions: controlledMentions,\n tags: controlledTags,\n defaultMentions,\n defaultTags = [],\n defaultInputParts,\n onMentionsChange,\n onTagsChange,\n onQuickKeyTrigger,\n submitFormat = \"text\",\n formatMention,\n formatTag,\n transformSubmitData,\n },\n ref,\n ) => {\n const styles = useStyles();\n const isControlled = controlledValue !== undefined;\n const [internalValue, setInternalValue] = useState<string>(defaultValue);\n const value = isControlled ? controlledValue : internalValue;\n const setValue = (newValue: string) => {\n if (!isControlled) {\n setInternalValue(newValue);\n }\n onChange?.(newValue);\n };\n\n // mentions 支持受控/非受控两种模式;inlineTags 打开时会和输入内容混排。\n const resolvedControlledMentions = controlledMentions ?? controlledTags;\n const initialMentions = defaultMentions ?? defaultTags;\n const isMentionsControlled = resolvedControlledMentions !== undefined;\n const [internalMentions, setInternalMentions] =\n useState<MentionTag[]>(initialMentions);\n const mentions = isMentionsControlled\n ? resolvedControlledMentions!\n : internalMentions;\n const setMentions = (newMentions: MentionTag[]) => {\n if (!isMentionsControlled) {\n setInternalMentions(newMentions);\n }\n onMentionsChange?.(newMentions);\n onTagsChange?.(newMentions);\n };\n\n const [files, setFiles] = useState<LocalFile[]>([]);\n const [isDragOver, setIsDragOver] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n const textareaRef = useRef<any>(null);\n const inlineInputRef = useRef<InlineTagInputRef>(null);\n\n // 快捷键弹层状态:记录触发字符、关键词,以及触发字符在纯文本中的位置。\n // SDK 不内置搜索框;业务方可在 onQuickKeyTrigger 中根据 keyword 自行更新 quickKeys.options。\n const [activeQuickKey, setActiveQuickKey] = useState<string | null>(null);\n const [quickKeyKeyword, setQuickKeyKeyword] = useState(\"\");\n const [quickKeyTriggerIdx, setQuickKeyTriggerIdx] = useState(-1);\n const [quickKeyActiveIndex, setQuickKeyActiveIndex] = useState(0);\n\n const closeQuickKeyList = useCallback(() => {\n setActiveQuickKey(null);\n setQuickKeyKeyword(\"\");\n setQuickKeyTriggerIdx(-1);\n setQuickKeyActiveIndex(0);\n }, []);\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 const escapeXml = (text: string) =>\n text\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n\n const escapeMarkdownLabel = (text: string) =>\n text.replace(/\\\\/g, \"\\\\\\\\\").replace(/\\]/g, \"\\\\]\");\n\n const getMentionSubmitValue = (mention: MentionTag) =>\n String(\n mention.value ??\n mention.uri ??\n mention.data?.uri ??\n mention.data?.value ??\n mention.data?.name ??\n mention.targetId ??\n mention.displayName ??\n mention.label ??\n \"\",\n );\n\n const defaultFormatMention = (\n mention: MentionTag,\n format: Exclude<XAdkSenderSubmitFormat, \"structured\">,\n index: number,\n ) => {\n const value = getMentionSubmitValue(mention);\n if (format === \"xml\") {\n return `<mention type=\"${escapeXml(mention.type)}\" id=\"${escapeXml(mention.id)}\" label=\"${escapeXml(mention.label)}\" value=\"${escapeXml(value)}\" />`;\n }\n\n if (format === \"markdown\") {\n const href =\n mention.uri ||\n (value.includes(\"://\")\n ? value\n : `xadk-mention://${encodeURIComponent(mention.type)}/${encodeURIComponent(mention.id)}`);\n return `[@${escapeMarkdownLabel(mention.displayName || mention.label)}](${href})`;\n }\n\n return `@${mention.displayName || value || `mention-${index + 1}`}`;\n };\n\n const serializeMention = (\n mention: MentionTag,\n format: Exclude<XAdkSenderSubmitFormat, \"structured\">,\n index: number,\n ) =>\n formatMention?.(mention, { format, index }) ??\n formatTag?.(mention, { format, index }) ??\n defaultFormatMention(mention, format, index);\n\n const getSubmitParts = useCallback((): XAdkSenderSubmitPart[] => {\n if (inlineTags) {\n const parts = inlineInputRef.current?.getParts() || [];\n if (parts.length > 0) return parts;\n }\n\n const textParts: XAdkSenderSubmitPart[] = value\n ? [{ type: \"text\", text: value }]\n : [];\n const mentionParts = mentions.map((mention) => ({\n type: \"mention\" as const,\n mention,\n }));\n return [...mentionParts, ...textParts];\n }, [inlineTags, mentions, value]);\n\n const serializeParts = (\n parts: XAdkSenderSubmitPart[],\n format: XAdkSenderSubmitFormat,\n ) => {\n if (format === \"structured\") {\n return parts.reduce(\n (content, part) => content + (part.type === \"text\" ? part.text : \"\"),\n \"\",\n );\n }\n\n let tagIndex = 0;\n return parts\n .map((part) => {\n if (part.type === \"text\") return part.text;\n const result = serializeMention(part.mention, format, tagIndex);\n tagIndex += 1;\n return result;\n })\n .join(\"\");\n };\n\n const createSubmitData = (\n formattedFiles: ServerFile[],\n ): XAdkSenderSubmitData => {\n const parts = getSubmitParts();\n const rawText = parts.reduce(\n (content, part) => content + (part.type === \"text\" ? part.text : \"\"),\n \"\",\n );\n const standardData: Omit<XAdkSenderSubmitData, \"payload\"> = {\n text: serializeParts(parts, submitFormat),\n rawText,\n format: submitFormat,\n parts,\n files: formattedFiles,\n mentions,\n tags: mentions,\n };\n\n return {\n ...standardData,\n payload: transformSubmitData?.(standardData),\n };\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 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 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 (_file, { files }) => {\n if (files.length >= maxFiles) {\n return `最多只能上传 ${maxFiles} 个文件`;\n }\n return null;\n },\n (file) => {\n const maxSize = maxFileSize * 1024 * 1024;\n if (file.size > maxSize) {\n return `文件大小不能超过 ${maxFileSize}MB`;\n }\n return null;\n },\n (file) => {\n if (!checkFileType(file)) {\n return \"不支持的文件类型\";\n }\n return null;\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 const handleExistingFiles = useCallback(\n (selectedFiles: ServerFile[]) => {\n if (!selectedFiles.length) return;\n setFiles((prev) => {\n const next = [...prev];\n for (const selected of selectedFiles) {\n if (!selected.fileId || !selected.fileName) continue;\n if (next.some((file) => String(file.fileId) === String(selected.fileId))) continue;\n if (next.length >= maxFiles) {\n message.error(`最多只能上传 ${maxFiles} 个文件`);\n break;\n }\n const id = generateId();\n const file = new File([], selected.fileName, { type: selected.mimeType });\n next.push({\n id,\n uid: id,\n name: selected.fileName,\n file,\n size: selected.size || 0,\n type: selected.mimeType,\n progress: 100,\n status: \"success\",\n fileId: selected.fileId,\n tempUrl: selected.tempUrl,\n response: {\n ...selected.raw,\n fileName: selected.fileName,\n fileId: selected.fileId,\n tempUrl: selected.tempUrl,\n fileType: selected.type,\n fileSize: selected.size,\n mimeType: selected.mimeType,\n },\n });\n }\n if (next.length !== prev.length) onFilesChange?.(next);\n return next;\n });\n },\n [maxFiles, onFilesChange],\n );\n\n // 暴露给业务工具栏调用的命令式能力;外部 Popover 选择标签时可插入到当前光标位置。\n useImperativeHandle(\n ref,\n () => ({\n addFiles: (rawFiles: Array<File | ServerFile>) => {\n handleFileSelect(rawFiles.filter((file): file is File => file instanceof File));\n handleExistingFiles(rawFiles.filter((file): file is ServerFile => !(file instanceof File)));\n },\n insertMention: (mention: MentionTag) => {\n if (inlineTags) {\n inlineInputRef.current?.insertMention(mention);\n return;\n }\n setMentions([...mentions, mention]);\n },\n insertTag: (mention: MentionTag) => {\n if (inlineTags) {\n inlineInputRef.current?.insertMention(mention);\n return;\n }\n setMentions([...mentions, mention]);\n },\n focus: () => {\n inlineTags\n ? inlineInputRef.current?.focus()\n : textareaRef.current?.focus();\n },\n }),\n [handleFileSelect, handleExistingFiles, inlineTags, setMentions, mentions],\n );\n\n // 上传文件\n const uploadFiles = async (fileList: LocalFile[]) => {\n for (const localFile of fileList) {\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 ||\n responseData.fileUrl ||\n 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 onFilesChange?.(next);\n return next;\n });\n };\n\n // 处理拖拽事件\n const handleDragOver = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (draggable) {\n setIsDragOver(true);\n }\n },\n [draggable],\n );\n\n const handleDragLeave = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (draggable) {\n setIsDragOver(false);\n }\n },\n [draggable],\n );\n\n const handleDrop = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragOver(false);\n\n if (\n draggable &&\n e.dataTransfer.files &&\n e.dataTransfer.files.length > 0\n ) {\n // 内核不再自行处理文件,交给外层(DefaultLayout/业务)通过 onFileSelect 决定\n onFileSelect?.(Array.from(e.dataTransfer.files));\n }\n },\n [draggable, onFileSelect],\n );\n\n // 粘贴文件(含截图):仅在剪贴板含文件时拦截默认行为,纯文本粘贴不受影响。\n const handlePaste = useCallback(\n (e: React.ClipboardEvent) => {\n if (!pasteable) return;\n const files = e.clipboardData?.files;\n if (!files || files.length === 0) return;\n e.preventDefault();\n onFilePaste?.(Array.from(files));\n },\n [pasteable, onFilePaste],\n );\n\n // 删除标签\n const handleRemoveMention = useCallback(\n (id: string) => {\n setMentions(mentions.filter((item) => item.id !== id));\n },\n [mentions, setMentions],\n );\n\n // 查找当前活跃的快捷键配置\n const activeQuickKeyConfig = useMemo(() => {\n if (!activeQuickKey) return null;\n return quickKeys.find((qk) => qk.key === activeQuickKey) || null;\n }, [activeQuickKey, quickKeys]);\n\n const activeQuickKeyOptionsLength =\n activeQuickKeyConfig?.options.length || 0;\n\n useEffect(() => {\n setQuickKeyActiveIndex(0);\n }, [activeQuickKey]);\n\n useEffect(() => {\n if (activeQuickKeyOptionsLength <= 0) {\n setQuickKeyActiveIndex(0);\n return;\n }\n\n // 业务方可能在 onQuickKeyTrigger 中动态更新 options;\n // 这里只做越界归一化,不重置有效索引,避免键盘高亮移动后又跳回第一项。\n setQuickKeyActiveIndex(\n (prev) =>\n ((prev % activeQuickKeyOptionsLength) + activeQuickKeyOptionsLength) %\n activeQuickKeyOptionsLength,\n );\n }, [activeQuickKeyOptionsLength]);\n\n const getNextQuickKeyIndex = useCallback(\n (current: number, step: number) => {\n if (activeQuickKeyOptionsLength <= 0) return 0;\n return (\n (current + step + activeQuickKeyOptionsLength) %\n activeQuickKeyOptionsLength\n );\n },\n [activeQuickKeyOptionsLength],\n );\n\n // 从当前光标前的连续文本片段中查找最近的快捷键,例如 abc@doc 会触发 @。\n const detectQuickKey = useCallback(\n (text: string, cursorPos: number) => {\n const quickKeyChars = quickKeys.map((qk) => qk.key);\n if (quickKeyChars.length === 0) return;\n\n const textBeforeCursor = text.slice(0, cursorPos);\n let found = false;\n for (let i = textBeforeCursor.length - 1; i >= 0; i--) {\n const char = textBeforeCursor[i];\n if (/\\s/.test(char)) break;\n if (quickKeyChars.includes(char)) {\n const keyword = textBeforeCursor.slice(i + 1);\n setActiveQuickKey(char);\n setQuickKeyKeyword(keyword);\n setQuickKeyTriggerIdx(i);\n setQuickKeyActiveIndex(0);\n onQuickKeyTrigger?.(char, keyword);\n found = true;\n break;\n }\n }\n\n if (!found && activeQuickKey) {\n const triggerChar = text[quickKeyTriggerIdx];\n const keyword = text.slice(quickKeyTriggerIdx + 1, cursorPos);\n if (\n quickKeyTriggerIdx < 0 ||\n !triggerChar ||\n !quickKeyChars.includes(triggerChar) ||\n /\\s/.test(keyword)\n ) {\n setActiveQuickKey(null);\n setQuickKeyKeyword(\"\");\n setQuickKeyTriggerIdx(-1);\n setQuickKeyActiveIndex(0);\n } else {\n setQuickKeyKeyword(keyword);\n }\n }\n },\n [activeQuickKey, onQuickKeyTrigger, quickKeyTriggerIdx, quickKeys],\n );\n\n // 选择快捷项后转成结构化 Mention;inline 模式会替换掉触发字符和关键词。\n const handleQuickKeySelect = useCallback(\n (option: any) => {\n const mentionType =\n activeQuickKeyConfig?.mentionType ||\n activeQuickKeyConfig?.tagType ||\n activeQuickKey ||\n \"unknown\";\n const newMention: MentionTag = {\n id: generateId(),\n label: option.label,\n type: mentionType,\n value: option.value ?? option.uri ?? option.name ?? option.label,\n uri: option.uri,\n targetId: option.targetId ?? option.skillNo ?? option.pluginNo,\n displayName: option.displayName ?? option.label,\n trigger: activeQuickKey || undefined,\n icon: option.icon,\n data: option,\n };\n option.onSelect?.(option);\n activeQuickKeyConfig?.onSelect?.(option);\n\n if (option.action === \"command\") {\n if (inlineTags) {\n inlineInputRef.current?.deleteTextRange({\n start: quickKeyTriggerIdx,\n end: quickKeyTriggerIdx + 1 + quickKeyKeyword.length,\n });\n } else if (quickKeyTriggerIdx >= 0) {\n setValue(\n value.slice(0, quickKeyTriggerIdx) +\n value.slice(quickKeyTriggerIdx + 1 + quickKeyKeyword.length),\n );\n }\n } else if (inlineTags) {\n inlineInputRef.current?.insertMention(newMention, {\n start: quickKeyTriggerIdx,\n end: quickKeyTriggerIdx + 1 + quickKeyKeyword.length,\n });\n } else {\n setMentions([...mentions, newMention]);\n\n // 从输入框中删除快捷键字符和关键词\n if (quickKeyTriggerIdx >= 0) {\n const newValue =\n value.slice(0, quickKeyTriggerIdx) +\n value.slice(quickKeyTriggerIdx + 1 + quickKeyKeyword.length);\n setValue(newValue);\n }\n }\n\n setActiveQuickKey(null);\n setQuickKeyKeyword(\"\");\n setQuickKeyTriggerIdx(-1);\n setQuickKeyActiveIndex(0);\n inlineTags\n ? inlineInputRef.current?.focus()\n : textareaRef.current?.focus();\n },\n [\n activeQuickKey,\n activeQuickKeyConfig,\n inlineTags,\n mentions,\n setMentions,\n value,\n quickKeyTriggerIdx,\n quickKeyKeyword,\n setValue,\n ],\n );\n\n // 处理输入框变化(含快捷键检测)\n const handleInputChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const newValue = e.target.value;\n setValue(newValue);\n\n // 检测快捷键触发\n detectQuickKey(newValue, e.target.selectionStart || 0);\n };\n\n const handleInlineInputChange = (newValue: string) => {\n setValue(newValue);\n // contenteditable 的 selection 不一定和 React state 同步,需实时读取内部光标 offset。\n detectQuickKey(\n newValue,\n inlineInputRef.current?.getCursorOffset() || newValue.length,\n );\n };\n\n const handleQuickKeyByText = (text: string, cursorPos: number) => {\n const quickKeyChars = quickKeys.map((qk) => qk.key);\n if (quickKeyChars.length === 0) return;\n\n const textBeforeCursor = text.slice(0, cursorPos);\n\n // 检测刚输入的字符是否是快捷键\n const lastChar = textBeforeCursor[cursorPos - 1];\n if (lastChar && quickKeyChars.includes(lastChar)) {\n // 上下键导航后会触发 keyup,此时光标前仍是同一个快捷键字符;\n // 如果重复重置 activeIndex,视觉上会“移动一下又回到第一项”。\n if (\n activeQuickKey === lastChar &&\n quickKeyTriggerIdx === cursorPos - 1\n ) {\n return;\n }\n setActiveQuickKey(lastChar);\n setQuickKeyKeyword(\"\");\n setQuickKeyTriggerIdx(cursorPos - 1);\n setQuickKeyActiveIndex(0);\n onQuickKeyTrigger?.(lastChar, \"\");\n }\n };\n\n // onChange 负责更新搜索词;onKeyUp 兜底捕获刚输入的快捷键字符。\n const isQuickListControlKey = (key: string) =>\n key === \"ArrowDown\" ||\n key === \"ArrowUp\" ||\n key === \"Enter\" ||\n key === \"Escape\";\n\n const handleKeyUp = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (activeQuickKey && isQuickListControlKey(e.key)) return;\n const target = e.target as HTMLTextAreaElement;\n handleQuickKeyByText(target.value || \"\", target.selectionStart || 0);\n };\n\n const handleInlineKeyUp = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (activeQuickKey && isQuickListControlKey(e.key)) return;\n // inline 输入区不是 textarea,不能读 event.target.value,只能从 ref 取纯文本。\n const text = inlineInputRef.current?.getText() || \"\";\n const cursorPos =\n inlineInputRef.current?.getCursorOffset() || text.length;\n handleQuickKeyByText(text, cursorPos);\n };\n\n // 处理提交\n const handleSubmit = () => {\n // 生成期间允许继续编辑下一条消息,但停止按钮仍代表当前唯一可执行动作。\n if (loading) return;\n if (!value.trim() && files.length === 0 && mentions.length === 0) {\n message.warning(\"请输入消息或选择文件\");\n return;\n }\n\n const successFiles = files.filter((file) => file.status === \"success\");\n const uploadingFiles = files.filter(\n (file) => file.status === \"uploading\",\n );\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(createSubmitData(formattedFiles));\n }\n\n setValue(\"\");\n setMentions([]);\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(createSubmitData(formattedFiles));\n }\n\n setValue(\"\");\n setMentions([]);\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 ||\n responseData.fileUrl ||\n responseData.url ||\n \"\",\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 handleKeyDown = (e: React.KeyboardEvent<HTMLElement>) => {\n // 输入法候选阶段的 Enter 用于确认候选词,不能触发快捷项选择或消息发送。\n if (e.nativeEvent.isComposing || e.keyCode === 229) return;\n\n const quickKeyOptions = activeQuickKeyConfig?.options || [];\n\n if (activeQuickKey && quickKeyOptions.length > 0) {\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n setQuickKeyActiveIndex((prev) => getNextQuickKeyIndex(prev, 1));\n return;\n }\n\n if (e.key === \"ArrowUp\") {\n e.preventDefault();\n setQuickKeyActiveIndex((prev) => getNextQuickKeyIndex(prev, -1));\n return;\n }\n\n if (e.key === \"Enter\") {\n e.preventDefault();\n handleQuickKeySelect(\n quickKeyOptions[\n Math.min(quickKeyActiveIndex, quickKeyOptions.length - 1)\n ],\n );\n return;\n }\n\n if (e.key === \"Escape\") {\n e.preventDefault();\n setActiveQuickKey(null);\n setQuickKeyKeyword(\"\");\n setQuickKeyTriggerIdx(-1);\n setQuickKeyActiveIndex(0);\n return;\n }\n }\n\n if (e.key === \"Enter\" && !e.shiftKey && !activeQuickKey) {\n e.preventDefault();\n handleSubmit();\n }\n };\n\n // 渲染文件列表\n const renderFileList = () => {\n if (files.length === 0) return null;\n\n return (\n <div className={styles.contextFiles}>\n {files.map((file) => (\n <FileGallery\n key={file.id}\n file={file}\n size=\"small\"\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 controlsDisabled = disabled || uploading || loading;\n const inputDisabled = disabled || uploading;\n const hasContent = value.trim().length > 0;\n const hasFiles = files.some((f) => f.status === \"success\");\n const hasMentions = mentions.length > 0;\n const canSend = hasContent || hasFiles || hasMentions;\n\n // 定义按钮组件\n const SendButton = (props: any) => {\n if (sendButtonRender) {\n return (\n <>\n {sendButtonRender({\n loading,\n disabled: uploading || disabled,\n canSend,\n onSend: handleSubmit,\n onStop,\n })}\n </>\n );\n }\n return (\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 spin /> : <ArrowUpOutlined />}\n </button>\n </Tooltip>\n );\n };\n\n const ClearButton = (props: any) => (\n <Popconfirm\n title={clearConfirm?.title ?? \"确定要清空聊天记录吗?\"}\n onConfirm={onClear}\n placement=\"top\"\n okText={clearConfirm?.okText ?? \"确定\"}\n cancelText={clearConfirm?.cancelText ?? \"取消\"}\n disabled={controlsDisabled}\n >\n <button\n className={`${styles.iconButton} ${styles.clearButton}`}\n disabled={controlsDisabled}\n aria-label=\"清空聊天记录\"\n {...props}\n >\n <ClearOutlined />\n </button>\n </Popconfirm>\n );\n\n const actionsComponents: ActionsComponents = {\n SendButton,\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 const headerNode = renderSlot(header, false);\n const fileListNode = files.length > 0 ? renderFileList() : null;\n\n // 默认后缀仅保留发送/停止按钮;上传与清空统一放到底部 actionBar,方便业务扩展左侧按钮组。\n const defaultSuffix = (\n <div className={styles.buttonGroup}>\n {sendButtonRender ? (\n sendButtonRender({\n loading,\n disabled: uploading || disabled,\n canSend,\n onSend: handleSubmit,\n onStop,\n })\n ) : (\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 >\n {loading ? <LoadingOutlined spin /> : <ArrowUpOutlined />}\n </button>\n </Tooltip>\n )}\n </div>\n );\n\n const defaultActionBar = (\n <div className={styles.actionBar}>\n <div className={styles.actionBarLeft}>\n {renderSlot(footerLeft, false)}\n </div>\n <div className={styles.actionBarRight}>\n {clearBtnShow && <ClearButton />}\n {renderSlot(suffix, defaultSuffix)}\n </div>\n </div>\n );\n\n return (\n <div\n ref={containerRef}\n className={containerClass}\n onBlur={(event) => {\n const nextFocusedNode = event.relatedTarget as Node | null;\n if (\n nextFocusedNode &&\n event.currentTarget.contains(nextFocusedNode)\n ) {\n return;\n }\n closeQuickKeyList();\n }}\n onDragOver={draggable ? handleDragOver : undefined}\n onDragLeave={draggable ? handleDragLeave : undefined}\n onDrop={draggable ? handleDrop : undefined}\n onPaste={pasteable ? handlePaste : undefined}\n >\n <div className={styles.mainArea}>\n <div className={styles.senderWrap}>\n {(headerNode || fileListNode) && (\n <div className={styles.contextBar}>\n {/* 头部插槽与附件共享上下文行,便于知识库、文件等输入上下文统一展示。 */}\n {headerNode && (\n <div className={styles.contextHeader}>{headerNode}</div>\n )}\n {fileListNode}\n </div>\n )}\n\n {/* textarea 模式下保留历史标签展示;inlineTags 模式标签直接混排在输入区内 */}\n {!inlineTags && (\n <InputTags mentions={mentions} onRemove={handleRemoveMention} />\n )}\n\n <div className={styles.inputAndButtons}>\n {/* 前缀插槽 */}\n {renderSlot(prefix, false)}\n\n {inlineTags ? (\n <InlineTagInput\n ref={inlineInputRef}\n value={value}\n mentions={mentions}\n defaultInputParts={defaultInputParts}\n placeholder={placeholder}\n disabled={inputDisabled}\n onChange={handleInlineInputChange}\n onMentionsChange={setMentions}\n onKeyDown={handleKeyDown as any}\n onKeyUp={handleInlineKeyUp}\n renderMention={renderMention ?? renderTag}\n />\n ) : (\n <div className={styles.textAreaWrapper}>\n <Input.TextArea\n ref={textareaRef}\n className={styles.textArea}\n value={value}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n onKeyUp={handleKeyUp}\n placeholder={placeholder}\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 </div>\n\n {/* 快捷键弹出列表 */}\n {activeQuickKey && activeQuickKeyConfig && (\n <div className={styles.quickListWrapper}>\n <InputSuggestionList\n config={activeQuickKeyConfig}\n activeIndex={quickKeyActiveIndex}\n onSelect={handleQuickKeySelect}\n onClose={closeQuickKeyList}\n visible={true}\n />\n </div>\n )}\n\n {/* 底部操作行:左侧上传/业务按钮,右侧清空/发送按钮 */}\n {footer === false\n ? defaultActionBar\n : renderSlot(footer, defaultActionBar)}\n </div>\n </div>\n\n {/* 提示文案 */}\n {!footer && (\n <div className={styles.tip}>\n 内容由AI生成,无法确保真实准确,仅供参考\n </div>\n )}\n </div>\n );\n },\n);\n\nXAdkSender.displayName = \"XAdkSender\";\nexport default XAdkSender;\n"],"mappings":"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"}
|
|
@@ -178,6 +178,18 @@ export interface SenderUIProps {
|
|
|
178
178
|
* 业务/外层在此回调中决定如何处理文件(通常调用 senderRef.addFiles 注入)。
|
|
179
179
|
*/
|
|
180
180
|
onFileSelect?: (files: File[]) => void;
|
|
181
|
+
/**
|
|
182
|
+
* 是否启用 Sender 自身的粘贴上传。
|
|
183
|
+
* 粘贴产生的文件通过 onFilePaste 回调交给业务/外层处理;
|
|
184
|
+
* 默认 true,粘贴是常用能力,开箱即用。设为 false 可完全关闭。
|
|
185
|
+
*/
|
|
186
|
+
pasteable?: boolean;
|
|
187
|
+
/**
|
|
188
|
+
* 粘贴文件回调:当 pasteable 为 true 且用户向输入区粘贴文件(含截图)时触发。
|
|
189
|
+
* 业务/外层在此回调中决定如何处理文件(通常调用 senderRef.addFiles 注入)。
|
|
190
|
+
* 注意:纯文本粘贴不会触发本回调,输入框照常接收文本。
|
|
191
|
+
*/
|
|
192
|
+
onFilePaste?: (files: File[]) => void;
|
|
181
193
|
loading?: boolean;
|
|
182
194
|
disabled?: boolean;
|
|
183
195
|
placeholder?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["../../../src/types/XAdkSender.ts"],"sourcesContent":["// types/XAdkSender.ts\nimport React from \"react\";\n\n// ===================== 快捷键/Mention 相关类型 =====================\n\n/** 快捷键触发的列表项 */\nexport interface QuickListOption {\n id: string;\n label: string;\n description?: string;\n icon?: React.ReactNode;\n /** 选中后的行为。insert 会写入 Mention;command 仅执行回调。默认 insert。 */\n action?: \"insert\" | \"command\";\n /** 选中当前选项时执行,可用于 command 类型的业务动作。 */\n onSelect?: (option: QuickListOption) => void;\n /** 分组名(用于聚合列表,子分组通过下划线分割) */\n group?: string;\n [key: string]: any;\n}\n\n/** 快捷键配置 */\nexport interface QuickKeyConfig {\n /** 触发字符,如 '@', '#', '$' */\n key: string;\n /** 选中后写入 MentionTag.type 的语义类型,不传时回退为 key */\n mentionType?: string;\n /** @deprecated 请使用 mentionType。 */\n tagType?: string;\n /** 列表标题 */\n title?: string;\n /** 列表数据 */\n options: QuickListOption[];\n /** 自定义列表项渲染 */\n renderItem?: (option: QuickListOption) => React.ReactNode;\n /** 选中回调 */\n onSelect?: (option: QuickListOption) => void;\n}\n\n/** 输入框内的资源引用。SDK 只理解通用 Mention,业务语义可放入 data 或可选语义字段。 */\nexport interface MentionTag {\n id: string;\n label: string;\n /** Mention 类型,如 'knowledge', 'skill', 'plugin', 'agent' */\n type: string;\n /** 资源 URI,如 skill://skillNo、kb://kb/knNo/dir/docs/2024 */\n uri?: string;\n /** 业务资源 ID,如 skillNo、knowledgeNo */\n targetId?: string;\n /** 展示名;不传时回退 label */\n displayName?: string;\n /** 提交为纯文本/Markdown/XML 时使用的业务值,不传时回退 uri/targetId/label */\n value?: string;\n /** 触发字符,如 '@', '#', '$',用于业务方区分来源 */\n trigger?: string;\n color?: string;\n icon?: React.ReactNode;\n /** 业务扩展上下文,例如知识库目录 scope */\n scope?: any;\n /** 原始数据 */\n data?: any;\n}\n\n/** @deprecated 请使用 MentionTag。 */\nexport type InputTag = MentionTag;\n\nexport interface InlineTagRenderInfo {\n onRemove: () => void;\n}\n\nexport type XAdkSenderSubmitFormat = \"text\" | \"structured\" | \"markdown\" | \"xml\";\n\nexport type XAdkSenderSubmitPart =\n | { type: \"text\"; text: string }\n | { type: \"mention\"; mention: MentionTag };\n\n/** @deprecated 旧 tag part,仅用于兼容 defaultInputParts 历史传入。 */\nexport type XAdkSenderLegacyTagPart = { type: \"tag\"; tag: MentionTag };\n\n/** 输入框文本/Mention 有序片段,表示用户正在编辑的输入内容 */\nexport type XAdkSenderInputPart =\n | XAdkSenderSubmitPart\n | XAdkSenderLegacyTagPart;\n\nexport interface XAdkSenderFormatMentionContext {\n format: Exclude<XAdkSenderSubmitFormat, \"structured\">;\n index: number;\n}\n\n/** @deprecated 请使用 XAdkSenderFormatMentionContext。 */\nexport type XAdkSenderFormatTagContext = XAdkSenderFormatMentionContext;\n\nexport interface XAdkSenderSubmitData<TPayload = unknown> {\n /** 根据 submitFormat 生成的最终内容,默认是纯文本 */\n text: string;\n /** 去掉标签后的用户原始输入文本 */\n rawText: string;\n /** 当前提交格式 */\n format: XAdkSenderSubmitFormat;\n /** 文本与 Mention 的有序片段,inlineTags 模式下可还原资源引用在输入框中的位置 */\n parts: XAdkSenderSubmitPart[];\n files: ServerFile[];\n /** 当前 Mention 列表 */\n mentions?: MentionTag[];\n /** @deprecated 请使用 mentions。 */\n tags?: MentionTag[];\n /** 业务方通过 transformSubmitData 派生出的自定义提交结构 */\n payload?: TPayload;\n}\n\n// ===================== 上传相关类型 =====================\n\nexport interface UploadFileResult {\n fileName?: string;\n fileId?: string | number;\n tempUrl?: string;\n url?: string;\n fileUrl?: string;\n fileType?: string;\n fileSize?: number;\n mimeType?: string;\n [key: string]: any;\n}\n\nexport interface UploadSuccessResponse {\n data?: UploadFileResult | UploadFileResult[];\n [key: string]: any;\n}\n\ninterface uploadRequestProps {\n (options: {\n file: File;\n onProgress?: (e: { percent: number }) => void;\n onSuccess?: (\n response: UploadFileResult | UploadFileResult[] | UploadSuccessResponse,\n ) => void;\n onError?: (error: Error) => void;\n }): Promise<void> | void;\n}\n\nexport type UploadRequestFn = uploadRequestProps;\n\nexport interface ServerFile {\n fileName: string;\n fileId: string | number;\n tempUrl: string;\n type: string;\n size?: number;\n mimeType: string;\n raw?: UploadFileResult;\n}\n\nexport interface LocalFile {\n id: string;\n uid: string;\n name: string;\n file: File;\n size: number;\n type: string;\n progress: number;\n status: \"pending\" | \"uploading\" | \"success\" | \"error\";\n // 服务器返回字段\n fileId?: string | number;\n tempUrl?: string;\n response?: any;\n errorMessage?: string; // 上传错误信息\n}\n\nexport type FileValidator = (\n file: File,\n context: { files: LocalFile[] },\n) => string | null;\n\nexport interface ActionsComponents {\n SendButton: React.ComponentType<any>;\n ClearButton: React.ComponentType<any>;\n}\n\nexport type SlotRenderFunction = (\n oriNode: React.ReactNode,\n info: { components: ActionsComponents },\n) => React.ReactNode | false;\n\n// 上传相关\nexport interface UploaderCoreProps {\n uploadRequest?: uploadRequestProps;\n\n maxFileSize?: number;\n allowedFileTypes?: string[];\n maxFiles?: number;\n\n validators?: FileValidator[];\n\n // 数据层回调\n onFilesChange?: (files: LocalFile[]) => void;\n onUploadSuccess?: (file: LocalFile) => void;\n onUploadError?: (file: LocalFile, error: Error) => void;\n}\n\n// UI 相关\nexport interface SenderUIProps {\n clearBtnShow?: boolean;\n /**\n * 是否启用 Sender 自身的拖拽上传。\n * 拖拽产生的文件通过 onFileSelect 回调交给业务/外层处理;\n * 默认 false,由外层(如 DefaultLayout)管理拖拽时无需开启。\n */\n draggable?: boolean;\n /**\n * 拖拽文件回调:当 draggable 为 true 且用户向输入区拖拽文件时触发。\n * 业务/外层在此回调中决定如何处理文件(通常调用 senderRef.addFiles 注入)。\n */\n onFileSelect?: (files: File[]) => void;\n loading?: boolean;\n disabled?: boolean; // 只读状态\n placeholder?: string;\n /** 受控:输入框的值 */\n value?: string;\n /** 非受控:输入框默认值 */\n defaultValue?: string;\n onClear?: () => void;\n /** 清除按钮的二次确认文案;未传时沿用 SDK 默认文案。 */\n clearConfirm?: {\n title?: React.ReactNode;\n okText?: React.ReactNode;\n cancelText?: React.ReactNode;\n };\n onChange?: (value: string) => void;\n onSubmit?: (data: XAdkSenderSubmitData) => void;\n onStop?: () => void;\n\n /** 自定义发送按钮渲染 */\n sendButtonRender?: (info: {\n loading: boolean;\n disabled: boolean;\n /** 当前是否可以发送(文本非空或有已上传的文件) */\n canSend: boolean;\n onSend: () => void;\n onStop?: () => void;\n }) => React.ReactNode;\n\n // UI插槽功能\n /** 后缀内容,默认展示操作按钮,设为 false 时不显示 */\n suffix?: React.ReactNode | false | SlotRenderFunction;\n /** 输入主体内部的头部内容 */\n header?: React.ReactNode | false | SlotRenderFunction;\n /** 前缀内容 */\n prefix?: React.ReactNode | false | SlotRenderFunction;\n /** 底部内容 */\n footer?: React.ReactNode | false | SlotRenderFunction;\n /** 底部左侧拓展区域,不传时 footer 保持原有居中布局 */\n footerLeft?: React.ReactNode | false | SlotRenderFunction;\n\n // 快捷键/Mention 功能\n /** 快捷键配置列表 */\n quickKeys?: QuickKeyConfig[];\n /** 是否把 Mention 以内联 token 形式展示在输入区内;默认 false 保持历史 textarea 行为 */\n inlineTags?: boolean;\n /** 自定义内联 Mention 渲染 */\n renderMention?: (\n mention: MentionTag,\n info: InlineTagRenderInfo,\n ) => React.ReactNode;\n /** @deprecated 请使用 renderMention。 */\n renderTag?: (\n mention: MentionTag,\n info: InlineTagRenderInfo,\n ) => React.ReactNode;\n /** 受控:Mention 列表 */\n mentions?: MentionTag[];\n /** @deprecated 请使用 mentions。 */\n tags?: MentionTag[];\n /** 非受控:默认 Mention 列表 */\n defaultMentions?: MentionTag[];\n /** @deprecated 请使用 defaultMentions。 */\n defaultTags?: MentionTag[];\n /** 非受控:默认输入内容片段,用于初始化内联 Mention 输入区 */\n defaultInputParts?: XAdkSenderInputPart[];\n /** Mention 变化回调 */\n onMentionsChange?: (mentions: MentionTag[]) => void;\n /** @deprecated 请使用 onMentionsChange。 */\n onTagsChange?: (mentions: MentionTag[]) => void;\n /** 快捷键触发回调(业务方可在此处理搜索等逻辑) */\n onQuickKeyTrigger?: (key: string, keyword: string) => void;\n /**\n * 提交内容格式:\n * - text: 默认,输出文字 + Mention 文本(如 @生图技能)\n * - structured: 保留 parts/mentions/files 结构化数据,text 为 rawText\n * - markdown/xml: 输出对应标记文本\n */\n submitFormat?: XAdkSenderSubmitFormat;\n /** 自定义 Mention 在 text/markdown/xml 格式中的序列化结果 */\n formatMention?: (\n mention: MentionTag,\n context: XAdkSenderFormatMentionContext,\n ) => string;\n /** @deprecated 请使用 formatMention。 */\n formatTag?: (\n mention: MentionTag,\n context: XAdkSenderFormatMentionContext,\n ) => string;\n /**\n * 基于 SDK 标准提交结构派生业务 payload。\n * SDK 不理解 knowledge/skill/agent 等业务字段,只负责把 payload 原样放入 onSubmit 数据中。\n */\n transformSubmitData?: (\n data: Omit<XAdkSenderSubmitData, \"payload\">,\n ) => unknown;\n}\n\nexport type XAdkSenderProps = SenderUIProps & UploaderCoreProps;\n\nexport interface XAdkSenderHandle {\n /** 添加本地文件或已上传文件;后者直接进入附件列表,不重复上传。 */\n addFiles: (files: Array<File | ServerFile>) => void;\n /** 向当前光标位置插入一个内联 Mention;未启用 inlineTags 时会退化为追加 Mention。 */\n insertMention: (mention: MentionTag) => void;\n /** @deprecated 请使用 insertMention。 */\n insertTag: (mention: MentionTag) => void;\n /** 聚焦输入区 */\n focus: () => void;\n}\n"],"mappings":""}
|
|
1
|
+
{"version":3,"names":[],"sources":["../../../src/types/XAdkSender.ts"],"sourcesContent":["// types/XAdkSender.ts\nimport React from \"react\";\n\n// ===================== 快捷键/Mention 相关类型 =====================\n\n/** 快捷键触发的列表项 */\nexport interface QuickListOption {\n id: string;\n label: string;\n description?: string;\n icon?: React.ReactNode;\n /** 选中后的行为。insert 会写入 Mention;command 仅执行回调。默认 insert。 */\n action?: \"insert\" | \"command\";\n /** 选中当前选项时执行,可用于 command 类型的业务动作。 */\n onSelect?: (option: QuickListOption) => void;\n /** 分组名(用于聚合列表,子分组通过下划线分割) */\n group?: string;\n [key: string]: any;\n}\n\n/** 快捷键配置 */\nexport interface QuickKeyConfig {\n /** 触发字符,如 '@', '#', '$' */\n key: string;\n /** 选中后写入 MentionTag.type 的语义类型,不传时回退为 key */\n mentionType?: string;\n /** @deprecated 请使用 mentionType。 */\n tagType?: string;\n /** 列表标题 */\n title?: string;\n /** 列表数据 */\n options: QuickListOption[];\n /** 自定义列表项渲染 */\n renderItem?: (option: QuickListOption) => React.ReactNode;\n /** 选中回调 */\n onSelect?: (option: QuickListOption) => void;\n}\n\n/** 输入框内的资源引用。SDK 只理解通用 Mention,业务语义可放入 data 或可选语义字段。 */\nexport interface MentionTag {\n id: string;\n label: string;\n /** Mention 类型,如 'knowledge', 'skill', 'plugin', 'agent' */\n type: string;\n /** 资源 URI,如 skill://skillNo、kb://kb/knNo/dir/docs/2024 */\n uri?: string;\n /** 业务资源 ID,如 skillNo、knowledgeNo */\n targetId?: string;\n /** 展示名;不传时回退 label */\n displayName?: string;\n /** 提交为纯文本/Markdown/XML 时使用的业务值,不传时回退 uri/targetId/label */\n value?: string;\n /** 触发字符,如 '@', '#', '$',用于业务方区分来源 */\n trigger?: string;\n color?: string;\n icon?: React.ReactNode;\n /** 业务扩展上下文,例如知识库目录 scope */\n scope?: any;\n /** 原始数据 */\n data?: any;\n}\n\n/** @deprecated 请使用 MentionTag。 */\nexport type InputTag = MentionTag;\n\nexport interface InlineTagRenderInfo {\n onRemove: () => void;\n}\n\nexport type XAdkSenderSubmitFormat = \"text\" | \"structured\" | \"markdown\" | \"xml\";\n\nexport type XAdkSenderSubmitPart =\n | { type: \"text\"; text: string }\n | { type: \"mention\"; mention: MentionTag };\n\n/** @deprecated 旧 tag part,仅用于兼容 defaultInputParts 历史传入。 */\nexport type XAdkSenderLegacyTagPart = { type: \"tag\"; tag: MentionTag };\n\n/** 输入框文本/Mention 有序片段,表示用户正在编辑的输入内容 */\nexport type XAdkSenderInputPart =\n | XAdkSenderSubmitPart\n | XAdkSenderLegacyTagPart;\n\nexport interface XAdkSenderFormatMentionContext {\n format: Exclude<XAdkSenderSubmitFormat, \"structured\">;\n index: number;\n}\n\n/** @deprecated 请使用 XAdkSenderFormatMentionContext。 */\nexport type XAdkSenderFormatTagContext = XAdkSenderFormatMentionContext;\n\nexport interface XAdkSenderSubmitData<TPayload = unknown> {\n /** 根据 submitFormat 生成的最终内容,默认是纯文本 */\n text: string;\n /** 去掉标签后的用户原始输入文本 */\n rawText: string;\n /** 当前提交格式 */\n format: XAdkSenderSubmitFormat;\n /** 文本与 Mention 的有序片段,inlineTags 模式下可还原资源引用在输入框中的位置 */\n parts: XAdkSenderSubmitPart[];\n files: ServerFile[];\n /** 当前 Mention 列表 */\n mentions?: MentionTag[];\n /** @deprecated 请使用 mentions。 */\n tags?: MentionTag[];\n /** 业务方通过 transformSubmitData 派生出的自定义提交结构 */\n payload?: TPayload;\n}\n\n// ===================== 上传相关类型 =====================\n\nexport interface UploadFileResult {\n fileName?: string;\n fileId?: string | number;\n tempUrl?: string;\n url?: string;\n fileUrl?: string;\n fileType?: string;\n fileSize?: number;\n mimeType?: string;\n [key: string]: any;\n}\n\nexport interface UploadSuccessResponse {\n data?: UploadFileResult | UploadFileResult[];\n [key: string]: any;\n}\n\ninterface uploadRequestProps {\n (options: {\n file: File;\n onProgress?: (e: { percent: number }) => void;\n onSuccess?: (\n response: UploadFileResult | UploadFileResult[] | UploadSuccessResponse,\n ) => void;\n onError?: (error: Error) => void;\n }): Promise<void> | void;\n}\n\nexport type UploadRequestFn = uploadRequestProps;\n\nexport interface ServerFile {\n fileName: string;\n fileId: string | number;\n tempUrl: string;\n type: string;\n size?: number;\n mimeType: string;\n raw?: UploadFileResult;\n}\n\nexport interface LocalFile {\n id: string;\n uid: string;\n name: string;\n file: File;\n size: number;\n type: string;\n progress: number;\n status: \"pending\" | \"uploading\" | \"success\" | \"error\";\n // 服务器返回字段\n fileId?: string | number;\n tempUrl?: string;\n response?: any;\n errorMessage?: string; // 上传错误信息\n}\n\nexport type FileValidator = (\n file: File,\n context: { files: LocalFile[] },\n) => string | null;\n\nexport interface ActionsComponents {\n SendButton: React.ComponentType<any>;\n ClearButton: React.ComponentType<any>;\n}\n\nexport type SlotRenderFunction = (\n oriNode: React.ReactNode,\n info: { components: ActionsComponents },\n) => React.ReactNode | false;\n\n// 上传相关\nexport interface UploaderCoreProps {\n uploadRequest?: uploadRequestProps;\n\n maxFileSize?: number;\n allowedFileTypes?: string[];\n maxFiles?: number;\n\n validators?: FileValidator[];\n\n // 数据层回调\n onFilesChange?: (files: LocalFile[]) => void;\n onUploadSuccess?: (file: LocalFile) => void;\n onUploadError?: (file: LocalFile, error: Error) => void;\n}\n\n// UI 相关\nexport interface SenderUIProps {\n clearBtnShow?: boolean;\n /**\n * 是否启用 Sender 自身的拖拽上传。\n * 拖拽产生的文件通过 onFileSelect 回调交给业务/外层处理;\n * 默认 false,由外层(如 DefaultLayout)管理拖拽时无需开启。\n */\n draggable?: boolean;\n /**\n * 拖拽文件回调:当 draggable 为 true 且用户向输入区拖拽文件时触发。\n * 业务/外层在此回调中决定如何处理文件(通常调用 senderRef.addFiles 注入)。\n */\n onFileSelect?: (files: File[]) => void;\n /**\n * 是否启用 Sender 自身的粘贴上传。\n * 粘贴产生的文件通过 onFilePaste 回调交给业务/外层处理;\n * 默认 true,粘贴是常用能力,开箱即用。设为 false 可完全关闭。\n */\n pasteable?: boolean;\n /**\n * 粘贴文件回调:当 pasteable 为 true 且用户向输入区粘贴文件(含截图)时触发。\n * 业务/外层在此回调中决定如何处理文件(通常调用 senderRef.addFiles 注入)。\n * 注意:纯文本粘贴不会触发本回调,输入框照常接收文本。\n */\n onFilePaste?: (files: File[]) => void;\n loading?: boolean;\n disabled?: boolean; // 只读状态\n placeholder?: string;\n /** 受控:输入框的值 */\n value?: string;\n /** 非受控:输入框默认值 */\n defaultValue?: string;\n onClear?: () => void;\n /** 清除按钮的二次确认文案;未传时沿用 SDK 默认文案。 */\n clearConfirm?: {\n title?: React.ReactNode;\n okText?: React.ReactNode;\n cancelText?: React.ReactNode;\n };\n onChange?: (value: string) => void;\n onSubmit?: (data: XAdkSenderSubmitData) => void;\n onStop?: () => void;\n\n /** 自定义发送按钮渲染 */\n sendButtonRender?: (info: {\n loading: boolean;\n disabled: boolean;\n /** 当前是否可以发送(文本非空或有已上传的文件) */\n canSend: boolean;\n onSend: () => void;\n onStop?: () => void;\n }) => React.ReactNode;\n\n // UI插槽功能\n /** 后缀内容,默认展示操作按钮,设为 false 时不显示 */\n suffix?: React.ReactNode | false | SlotRenderFunction;\n /** 输入主体内部的头部内容 */\n header?: React.ReactNode | false | SlotRenderFunction;\n /** 前缀内容 */\n prefix?: React.ReactNode | false | SlotRenderFunction;\n /** 底部内容 */\n footer?: React.ReactNode | false | SlotRenderFunction;\n /** 底部左侧拓展区域,不传时 footer 保持原有居中布局 */\n footerLeft?: React.ReactNode | false | SlotRenderFunction;\n\n // 快捷键/Mention 功能\n /** 快捷键配置列表 */\n quickKeys?: QuickKeyConfig[];\n /** 是否把 Mention 以内联 token 形式展示在输入区内;默认 false 保持历史 textarea 行为 */\n inlineTags?: boolean;\n /** 自定义内联 Mention 渲染 */\n renderMention?: (\n mention: MentionTag,\n info: InlineTagRenderInfo,\n ) => React.ReactNode;\n /** @deprecated 请使用 renderMention。 */\n renderTag?: (\n mention: MentionTag,\n info: InlineTagRenderInfo,\n ) => React.ReactNode;\n /** 受控:Mention 列表 */\n mentions?: MentionTag[];\n /** @deprecated 请使用 mentions。 */\n tags?: MentionTag[];\n /** 非受控:默认 Mention 列表 */\n defaultMentions?: MentionTag[];\n /** @deprecated 请使用 defaultMentions。 */\n defaultTags?: MentionTag[];\n /** 非受控:默认输入内容片段,用于初始化内联 Mention 输入区 */\n defaultInputParts?: XAdkSenderInputPart[];\n /** Mention 变化回调 */\n onMentionsChange?: (mentions: MentionTag[]) => void;\n /** @deprecated 请使用 onMentionsChange。 */\n onTagsChange?: (mentions: MentionTag[]) => void;\n /** 快捷键触发回调(业务方可在此处理搜索等逻辑) */\n onQuickKeyTrigger?: (key: string, keyword: string) => void;\n /**\n * 提交内容格式:\n * - text: 默认,输出文字 + Mention 文本(如 @生图技能)\n * - structured: 保留 parts/mentions/files 结构化数据,text 为 rawText\n * - markdown/xml: 输出对应标记文本\n */\n submitFormat?: XAdkSenderSubmitFormat;\n /** 自定义 Mention 在 text/markdown/xml 格式中的序列化结果 */\n formatMention?: (\n mention: MentionTag,\n context: XAdkSenderFormatMentionContext,\n ) => string;\n /** @deprecated 请使用 formatMention。 */\n formatTag?: (\n mention: MentionTag,\n context: XAdkSenderFormatMentionContext,\n ) => string;\n /**\n * 基于 SDK 标准提交结构派生业务 payload。\n * SDK 不理解 knowledge/skill/agent 等业务字段,只负责把 payload 原样放入 onSubmit 数据中。\n */\n transformSubmitData?: (\n data: Omit<XAdkSenderSubmitData, \"payload\">,\n ) => unknown;\n}\n\nexport type XAdkSenderProps = SenderUIProps & UploaderCoreProps;\n\nexport interface XAdkSenderHandle {\n /** 添加本地文件或已上传文件;后者直接进入附件列表,不重复上传。 */\n addFiles: (files: Array<File | ServerFile>) => void;\n /** 向当前光标位置插入一个内联 Mention;未启用 inlineTags 时会退化为追加 Mention。 */\n insertMention: (mention: MentionTag) => void;\n /** @deprecated 请使用 insertMention。 */\n insertTag: (mention: MentionTag) => void;\n /** 聚焦输入区 */\n focus: () => void;\n}\n"],"mappings":""}
|