@ai-group/chat-sdk 3.7.1-alpha2 → 3.7.1-alpha4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/FileGallery/index.js +59 -40
- package/dist/cjs/components/FileGallery/index.js.map +2 -2
- package/dist/cjs/components/FileGallery/styles.d.ts +7 -0
- package/dist/cjs/components/FileGallery/styles.js +78 -0
- package/dist/cjs/components/FileGallery/styles.js.map +2 -2
- package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.d.ts +7 -1
- package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.js +82 -22
- package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.js.map +2 -2
- package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/styles.d.ts +3 -0
- package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/styles.js +39 -0
- package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/styles.js.map +2 -2
- package/dist/cjs/components/XAdkChatbot/index.js +35 -5
- package/dist/cjs/components/XAdkChatbot/index.js.map +2 -2
- package/dist/cjs/components/XAdkChatbot/styles.js +1 -1
- package/dist/cjs/components/XAdkChatbot/styles.js.map +1 -1
- package/dist/cjs/components/XAdkSender/InlineTagInput.d.ts +11 -5
- package/dist/cjs/components/XAdkSender/InlineTagInput.js +188 -113
- package/dist/cjs/components/XAdkSender/InlineTagInput.js.map +2 -2
- package/dist/cjs/components/XAdkSender/InputTags.d.ts +2 -2
- package/dist/cjs/components/XAdkSender/InputTags.js +8 -8
- package/dist/cjs/components/XAdkSender/InputTags.js.map +2 -2
- package/dist/cjs/components/XAdkSender/index.js +104 -64
- package/dist/cjs/components/XAdkSender/index.js.map +2 -2
- package/dist/cjs/components/XAdkSender/styles.d.ts +4 -0
- package/dist/cjs/components/XAdkSender/styles.js +34 -6
- package/dist/cjs/components/XAdkSender/styles.js.map +2 -2
- package/dist/cjs/index.d.ts +2 -1
- package/dist/cjs/index.js +7 -0
- package/dist/cjs/index.js.map +2 -2
- package/dist/cjs/types/FileGallery.d.ts +3 -0
- package/dist/cjs/types/FileGallery.js.map +1 -1
- package/dist/cjs/types/XAdkChatbot.d.ts +15 -0
- package/dist/cjs/types/XAdkChatbot.js.map +1 -1
- package/dist/cjs/types/XAdkSender.d.ts +74 -23
- package/dist/cjs/types/XAdkSender.js.map +1 -1
- package/dist/cjs/utils/index.d.ts +1 -0
- package/dist/cjs/utils/index.js +3 -1
- package/dist/cjs/utils/index.js.map +2 -2
- package/dist/cjs/utils/markdownResource.d.ts +7 -0
- package/dist/cjs/utils/markdownResource.js +73 -0
- package/dist/cjs/utils/markdownResource.js.map +7 -0
- package/dist/esm/components/FileGallery/index.js +22 -16
- package/dist/esm/components/FileGallery/index.js.map +1 -1
- package/dist/esm/components/FileGallery/styles.d.ts +7 -0
- package/dist/esm/components/FileGallery/styles.js +24 -17
- package/dist/esm/components/FileGallery/styles.js.map +1 -1
- package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.d.ts +7 -1
- package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.js +57 -7
- package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.js.map +1 -1
- package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.d.ts +3 -0
- package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.js +5 -2
- package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.js.map +1 -1
- package/dist/esm/components/XAdkChatbot/index.js +20 -6
- package/dist/esm/components/XAdkChatbot/index.js.map +1 -1
- package/dist/esm/components/XAdkChatbot/styles.js +1 -1
- package/dist/esm/components/XAdkChatbot/styles.js.map +1 -1
- package/dist/esm/components/XAdkSender/InlineTagInput.d.ts +11 -5
- package/dist/esm/components/XAdkSender/InlineTagInput.js +185 -117
- package/dist/esm/components/XAdkSender/InlineTagInput.js.map +1 -1
- package/dist/esm/components/XAdkSender/InputTags.d.ts +2 -2
- package/dist/esm/components/XAdkSender/InputTags.js +9 -9
- package/dist/esm/components/XAdkSender/InputTags.js.map +1 -1
- package/dist/esm/components/XAdkSender/index.js +124 -77
- package/dist/esm/components/XAdkSender/index.js.map +1 -1
- package/dist/esm/components/XAdkSender/styles.d.ts +4 -0
- package/dist/esm/components/XAdkSender/styles.js +29 -25
- package/dist/esm/components/XAdkSender/styles.js.map +1 -1
- package/dist/esm/index.d.ts +2 -1
- package/dist/esm/index.js +2 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/FileGallery.d.ts +3 -0
- package/dist/esm/types/FileGallery.js.map +1 -1
- package/dist/esm/types/XAdkChatbot.d.ts +15 -0
- package/dist/esm/types/XAdkChatbot.js.map +1 -1
- package/dist/esm/types/XAdkSender.d.ts +74 -23
- package/dist/esm/types/XAdkSender.js.map +1 -1
- package/dist/esm/utils/index.d.ts +1 -0
- package/dist/esm/utils/index.js +1 -0
- package/dist/esm/utils/index.js.map +1 -1
- package/dist/esm/utils/markdownResource.d.ts +7 -0
- package/dist/esm/utils/markdownResource.js +33 -0
- package/dist/esm/utils/markdownResource.js.map +1 -0
- package/dist/umd/chat-sdk.min.js +1 -1
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/components/XAdkSender/InlineTagInput.tsx"],
|
|
4
|
-
"sourcesContent": ["import React, {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n} from \"react\";\nimport { createRoot, type Root } from \"react-dom/client\";\nimport type { InlineTagRenderInfo, InputTag, XAdkSenderSubmitPart } from \"@/types\";\nimport { useStyles } from \"./styles\";\n\nexport interface InlineTagInputRef {\n focus: () => void;\n getText: () => string;\n getParts: () => XAdkSenderSubmitPart[];\n getCursorOffset: () => number;\n insertTag: (tag: InputTag, replace?: { start: number; end: number }) => void;\n}\n\nexport interface InlineTagInputProps {\n value: string;\n tags: InputTag[];\n placeholder?: string;\n disabled?: boolean;\n onChange: (value: string) => void;\n onTagsChange: (tags: InputTag[]) => void;\n onKeyDown?: React.KeyboardEventHandler<HTMLDivElement>;\n onKeyUp?: React.KeyboardEventHandler<HTMLDivElement>;\n renderTag?: (tag: InputTag, info: InlineTagRenderInfo) => React.ReactNode;\n}\n\nconst TAG_ATTR = \"data-xadk-inline-tag-id\";\n// contenteditable 无法把光标放进 contenteditable=false 的标签里,需用零宽字符承接“标签后方”的光标。\nconst CARET_TEXT = \"\\u200B\";\n\nconst createTextNode = (text: string) => document.createTextNode(text);\nconst normalizeText = (text: string) =>\n text.replace(/\\u200B/g, \"\").replace(/\\u00a0/g, \" \");\nconst getPlainLength = (text: string) => normalizeText(text).length;\n// DOM 文本里包含零宽光标锚点,快捷键替换和光标定位都要在“用户可见文本 offset”和 DOM raw offset 之间转换。\nconst toRawOffset = (text: string, plainOffset: number) => {\n let current = 0;\n for (let i = 0; i < text.length; i++) {\n if (current >= plainOffset) return i;\n if (text[i] !== CARET_TEXT) current += 1;\n }\n return text.length;\n};\n\nconst InlineTagInput = forwardRef<InlineTagInputRef, InlineTagInputProps>(\n (\n {\n value,\n tags,\n placeholder,\n disabled,\n onChange,\n onTagsChange,\n onKeyDown,\n onKeyUp,\n renderTag,\n },\n ref,\n ) => {\n const styles = useStyles();\n const editorRef = useRef<HTMLDivElement>(null);\n const latestTagsRef = useRef<InputTag[]>(tags);\n const tagRootMapRef = useRef<WeakMap<Element, Root>>(new WeakMap());\n const composingRef = useRef(false);\n const lastInsertedCaretRef = useRef<Text | null>(null);\n\n useEffect(() => {\n latestTagsRef.current = tags;\n }, [tags]);\n\n const getOrderedTags = useCallback(() => {\n const editor = editorRef.current;\n if (!editor) return [];\n const tagMap = new Map(latestTagsRef.current.map((tag) => [tag.id, tag]));\n return Array.from(editor.querySelectorAll(`[${TAG_ATTR}]`))\n .map((node) => tagMap.get((node as HTMLElement).dataset.xadkInlineTagId || \"\"))\n .filter(Boolean) as InputTag[];\n }, []);\n\n // 对外只暴露用户输入的纯文本,内部零宽锚点不进入 value。\n const getPlainText = useCallback(() => {\n const editor = editorRef.current;\n if (!editor) return \"\";\n let text = \"\";\n editor.childNodes.forEach((node) => {\n if (node.nodeType === Node.TEXT_NODE) {\n text += node.textContent || \"\";\n }\n });\n return normalizeText(text);\n }, []);\n\n // 提交时需要保留文本与 tag 的真实顺序;仅靠 value + tags 无法区分 tag 在句首、句中还是句尾。\n const getParts = useCallback((): XAdkSenderSubmitPart[] => {\n const editor = editorRef.current;\n if (!editor) return [];\n const tagMap = new Map(latestTagsRef.current.map((tag) => [tag.id, tag]));\n const parts: XAdkSenderSubmitPart[] = [];\n\n editor.childNodes.forEach((node) => {\n if (node.nodeType === Node.TEXT_NODE) {\n const text = normalizeText(node.textContent || \"\");\n if (text) parts.push({ type: \"text\", text });\n return;\n }\n\n if (node instanceof HTMLElement && node.hasAttribute(TAG_ATTR)) {\n const tagId = node.dataset.xadkInlineTagId || \"\";\n const tag = tagMap.get(tagId);\n if (tag) parts.push({ type: \"tag\", tag });\n }\n });\n\n return parts;\n }, []);\n\n const emitChange = useCallback(() => {\n onChange(getPlainText());\n onTagsChange(getOrderedTags());\n }, [getOrderedTags, getPlainText, onChange, onTagsChange]);\n\n const removeTextRange = useCallback((node: Text, start: number, end: number) => {\n const text = node.textContent || \"\";\n node.textContent = `${text.slice(0, start)}${text.slice(end)}`;\n if (!node.textContent) node.remove();\n }, []);\n\n const removeTagNode = useCallback(\n (node: Element) => {\n const previous = node.previousSibling;\n const next = node.nextSibling;\n\n tagRootMapRef.current.get(node)?.unmount();\n node.remove();\n\n // 标签后会补一个不可见光标锚点;删除标签时同步清理,避免留下冗余节点。\n if (next?.nodeType === Node.TEXT_NODE) {\n const text = next.textContent || \"\";\n const caretLength = text.match(/^\\u200B+/)?.[0].length || 0;\n if (caretLength > 0) {\n removeTextRange(next as Text, 0, caretLength);\n return;\n }\n }\n\n if (previous?.nodeType === Node.TEXT_NODE) {\n const text = previous.textContent || \"\";\n const spaceLength = text.match(/\\s+$/)?.[0].length || 0;\n if (spaceLength > 0) {\n removeTextRange(previous as Text, text.length - spaceLength, text.length);\n }\n }\n },\n [removeTextRange],\n );\n\n const removeTagById = useCallback(\n (id: string) => {\n const editor = editorRef.current;\n const node = Array.from(editor?.querySelectorAll(`[${TAG_ATTR}]`) || []).find(\n (item) => (item as HTMLElement).dataset.xadkInlineTagId === id,\n );\n if (node) {\n removeTagNode(node);\n }\n emitChange();\n editor?.focus();\n },\n [emitChange, removeTagNode],\n );\n\n // 标签节点本身不可编辑;删除入口通过 onRemove 回到组件内部统一维护 DOM 与 tags。\n const buildTagNode = useCallback(\n (tag: InputTag) => {\n const span = document.createElement(\"span\");\n span.setAttribute(\"contenteditable\", \"false\");\n span.setAttribute(TAG_ATTR, tag.id);\n span.dataset.xadkInlineTagId = tag.id;\n span.className = styles.inlineTag;\n\n if (renderTag) {\n const root = createRoot(span);\n tagRootMapRef.current.set(span, root);\n root.render(\n <>{renderTag(tag, { onRemove: () => removeTagById(tag.id) })}</>,\n );\n } else {\n const label = document.createElement(\"span\");\n label.className = \"xadk-inline-tag-label\";\n label.textContent = tag.label;\n const close = document.createElement(\"span\");\n close.className = \"xadk-inline-tag-close\";\n close.innerHTML = \"×\";\n close.onclick = (event) => {\n event.preventDefault();\n event.stopPropagation();\n removeTagById(tag.id);\n };\n span.append(label, close);\n }\n return span;\n },\n [removeTagById, renderTag, styles.inlineTag],\n );\n\n const setCursorAtTextEnd = useCallback((node: Text) => {\n const range = document.createRange();\n const selection = window.getSelection();\n range.setStart(node, node.textContent?.length || 0);\n range.collapse(true);\n selection?.removeAllRanges();\n selection?.addRange(range);\n }, []);\n\n const restoreCursorAfterInsert = useCallback(\n (node: Text) => {\n const editor = editorRef.current;\n if (!editor || !editor.contains(node)) return;\n editor.focus();\n setCursorAtTextEnd(node);\n },\n [setCursorAtTextEnd],\n );\n\n const isTagNode = (node: Node | null): node is HTMLElement =>\n node instanceof HTMLElement && node.hasAttribute(TAG_ATTR);\n\n const isOnlyCaretText = (text: string) => normalizeText(text) === \"\";\n\n // Backspace/Delete 需要跨过零宽锚点识别相邻标签,不能只看光标所在文本节点。\n const getTagBeforeRange = (range: Range) => {\n const container = range.startContainer;\n if (container.nodeType === Node.TEXT_NODE) {\n const text = container.textContent || \"\";\n const beforeCursor = text.slice(0, range.startOffset);\n if (isOnlyCaretText(beforeCursor) && isTagNode(container.previousSibling)) {\n return container.previousSibling;\n }\n }\n\n if (container instanceof HTMLElement) {\n const previous = container.childNodes[range.startOffset - 1];\n if (isTagNode(previous)) return previous;\n if (\n previous?.nodeType === Node.TEXT_NODE &&\n isOnlyCaretText(previous.textContent || \"\") &&\n isTagNode(previous.previousSibling)\n ) {\n return previous.previousSibling;\n }\n }\n\n return null;\n };\n\n const getTagAfterRange = (range: Range) => {\n const container = range.startContainer;\n if (container.nodeType === Node.TEXT_NODE) {\n const text = container.textContent || \"\";\n const afterCursor = text.slice(range.startOffset);\n if (isOnlyCaretText(afterCursor) && isTagNode(container.nextSibling)) {\n return container.nextSibling;\n }\n }\n\n if (container instanceof HTMLElement) {\n const next = container.childNodes[range.startOffset];\n if (isTagNode(next)) return next;\n if (\n next?.nodeType === Node.TEXT_NODE &&\n isOnlyCaretText(next.textContent || \"\") &&\n isTagNode(next.nextSibling)\n ) {\n return next.nextSibling;\n }\n }\n\n return null;\n };\n\n // 读取光标在纯文本中的位置,供快捷键搜索词和 tag 插入位置复用。\n const getOffsetInEditor = useCallback(() => {\n const editor = editorRef.current;\n const selection = window.getSelection();\n if (!editor || !selection || selection.rangeCount === 0) return 0;\n const range = selection.getRangeAt(0);\n let offset = 0;\n let found = false;\n\n const visit = (node: Node) => {\n if (found) return;\n if (node === range.startContainer) {\n if (node.nodeType === Node.TEXT_NODE) {\n offset += getPlainLength(\n (node.textContent || \"\").slice(0, range.startOffset),\n );\n }\n found = true;\n return;\n }\n if (node instanceof HTMLElement && node.hasAttribute(TAG_ATTR)) return;\n if (node.nodeType === Node.TEXT_NODE) {\n offset += getPlainLength(node.textContent || \"\");\n return;\n }\n node.childNodes.forEach(visit);\n };\n\n editor.childNodes.forEach(visit);\n return offset;\n }, []);\n\n const getNodeIndex = (node: Node) => {\n let index = 0;\n let current = node;\n while (current.previousSibling) {\n index += 1;\n current = current.previousSibling;\n }\n return index;\n };\n\n // 删除快捷键触发片段,例如把 “@文档” 替换成一个结构化 tag,并返回删除位置对应的真实 DOM Range。\n // 注意:纯文本 offset 不包含 tag,标签前后可能都是 offset 0;插入 tag 必须依赖真实 Range,不能再反推 offset。\n const replaceTextRange = useCallback((start: number, end: number) => {\n const editor = editorRef.current;\n if (!editor) return null;\n let offset = 0;\n let insertRange: Range | null = null;\n const nodes = Array.from(editor.childNodes);\n nodes.forEach((node) => {\n if (node.nodeType !== Node.TEXT_NODE) return;\n const text = node.textContent || \"\";\n const nodeStart = offset;\n const plainLength = getPlainLength(text);\n const nodeEnd = offset + plainLength;\n offset = nodeEnd;\n if (nodeEnd <= start || nodeStart >= end) return;\n const rawStart = toRawOffset(text, Math.max(0, start - nodeStart));\n const rawEnd = toRawOffset(text, Math.max(0, end - nodeStart));\n const keepLeft = text.slice(0, rawStart);\n const keepRight = text.slice(rawEnd);\n const parent = node.parentNode;\n const nodeIndex = getNodeIndex(node);\n\n node.textContent = `${keepLeft}${keepRight}`;\n if (!insertRange) {\n insertRange = document.createRange();\n if (node.textContent) {\n insertRange.setStart(node, rawStart);\n } else if (parent) {\n insertRange.setStart(parent, nodeIndex);\n }\n insertRange.collapse(true);\n }\n if (!node.textContent) node.remove();\n });\n\n return insertRange;\n }, []);\n\n // 浏览器拆分 Range 后可能留下空文本节点;清理后才能保证后续 tag 继续 append 在队尾。\n const cleanupCaretTextNodes = useCallback(() => {\n const editor = editorRef.current;\n if (!editor) return;\n Array.from(editor.childNodes).forEach((node) => {\n if (node.nodeType !== Node.TEXT_NODE) return;\n const text = node.textContent || \"\";\n if (!text) {\n node.remove();\n return;\n }\n if (text && normalizeText(text) === \"\") {\n node.textContent = CARET_TEXT;\n }\n });\n }, []);\n\n const insertTag = useCallback(\n (tag: InputTag, replace?: { start: number; end: number }) => {\n const editor = editorRef.current;\n if (!editor) return;\n editor.focus();\n latestTagsRef.current = [\n ...latestTagsRef.current.filter((item) => item.id !== tag.id),\n tag,\n ];\n let insertRange: Range | null = null;\n if (replace) {\n insertRange = replaceTextRange(replace.start, replace.end);\n cleanupCaretTextNodes();\n }\n const tagNode = buildTagNode(tag);\n const caretNode = createTextNode(CARET_TEXT);\n const selection = window.getSelection();\n const range =\n insertRange || (selection?.rangeCount ? selection.getRangeAt(0) : null);\n if (range && editor.contains(range.startContainer)) {\n // 用 DocumentFragment 一次性插入,避免连续 insertNode 导致 tag/caret 顺序被浏览器 Range 状态打乱。\n const fragment = document.createDocumentFragment();\n fragment.append(tagNode, caretNode);\n range.insertNode(fragment);\n } else {\n editor.append(tagNode, caretNode);\n }\n cleanupCaretTextNodes();\n lastInsertedCaretRef.current = caretNode;\n setCursorAtTextEnd(caretNode);\n emitChange();\n\n // 关闭快捷列表和父组件同步 tags/value 会触发一次 React 更新;\n // 下一帧再恢复到刚插入 tag 后的零宽锚点,避免光标被 focus 或重渲染带回旧位置。\n window.requestAnimationFrame(() => {\n if (lastInsertedCaretRef.current === caretNode) {\n restoreCursorAfterInsert(caretNode);\n }\n });\n },\n [\n buildTagNode,\n cleanupCaretTextNodes,\n emitChange,\n replaceTextRange,\n restoreCursorAfterInsert,\n setCursorAtTextEnd,\n ],\n );\n\n useImperativeHandle(ref, () => ({\n focus: () => editorRef.current?.focus(),\n getText: getPlainText,\n getParts,\n getCursorOffset: getOffsetInEditor,\n insertTag,\n }), [getOffsetInEditor, getParts, getPlainText, insertTag]);\n\n useEffect(() => {\n const editor = editorRef.current;\n if (!editor || editor.childNodes.length > 0) return;\n if (value) editor.appendChild(createTextNode(value));\n tags.forEach((tag) => editor.append(buildTagNode(tag), createTextNode(CARET_TEXT)));\n }, []);\n\n // 外部受控 tags 变化时,同步补齐或删除 DOM 中的 tag 节点。\n useEffect(() => {\n const editor = editorRef.current;\n if (!editor) return;\n const existingNodes = Array.from(editor.querySelectorAll(`[${TAG_ATTR}]`));\n const nextTagMap = new Map(tags.map((tag) => [tag.id, tag]));\n const existingIds = new Set(\n existingNodes.map((node) => (node as HTMLElement).dataset.xadkInlineTagId || \"\"),\n );\n\n existingNodes.forEach((node) => {\n const tagId = (node as HTMLElement).dataset.xadkInlineTagId || \"\";\n if (!nextTagMap.has(tagId)) {\n removeTagNode(node);\n }\n });\n\n tags.forEach((tag) => {\n if (existingIds.has(tag.id)) return;\n editor.append(buildTagNode(tag), createTextNode(CARET_TEXT));\n });\n }, [buildTagNode, removeTagNode, tags]);\n\n useEffect(() => {\n const editor = editorRef.current;\n if (!editor) return;\n if (!value && tags.length === 0 && editor.childNodes.length > 0) {\n editor.querySelectorAll(`[${TAG_ATTR}]`).forEach((node) => {\n tagRootMapRef.current.get(node)?.unmount();\n });\n editor.innerHTML = \"\";\n }\n }, [tags.length, value]);\n\n const handleInput = () => {\n if (!composingRef.current) emitChange();\n };\n\n const handleKeyDown: React.KeyboardEventHandler<HTMLDivElement> = (event) => {\n if (event.key === \"Backspace\" || event.key === \"Delete\") {\n const selection = window.getSelection();\n if (selection?.rangeCount) {\n const range = selection.getRangeAt(0);\n if (range.collapsed) {\n const targetTag =\n event.key === \"Backspace\"\n ? getTagBeforeRange(range)\n : getTagAfterRange(range);\n\n if (targetTag) {\n event.preventDefault();\n removeTagById(targetTag.dataset.xadkInlineTagId || \"\");\n return;\n }\n }\n }\n }\n onKeyDown?.(event);\n };\n\n return (\n <div className={styles.inlineInputWrapper}>\n <div\n ref={editorRef}\n className={styles.inlineInput}\n data-placeholder={placeholder}\n contentEditable={!disabled}\n suppressContentEditableWarning\n role=\"textbox\"\n aria-multiline=\"true\"\n onInput={handleInput}\n onKeyDown={handleKeyDown}\n onKeyUp={onKeyUp}\n onCompositionStart={() => {\n composingRef.current = true;\n }}\n onCompositionEnd={() => {\n composingRef.current = false;\n emitChange();\n }}\n data-empty={!getPlainText() && getOrderedTags().length === 0}\n data-cursor-offset={getOffsetInEditor()}\n />\n </div>\n );\n },\n);\n\nInlineTagInput.displayName = \"InlineTagInput\";\n\nexport default InlineTagInput;\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import React, {\n forwardRef,\n useCallback,\n useEffect,\n useLayoutEffect,\n useImperativeHandle,\n useRef,\n} from \"react\";\nimport { createRoot, type Root } from \"react-dom/client\";\nimport type {\n InlineTagRenderInfo,\n MentionTag,\n XAdkSenderInputPart,\n XAdkSenderSubmitPart,\n} from \"@/types\";\nimport { useStyles } from \"./styles\";\n\nexport interface InlineTagInputRef {\n focus: () => void;\n getText: () => string;\n getParts: () => XAdkSenderSubmitPart[];\n getCursorOffset: () => number;\n insertMention: (\n mention: MentionTag,\n replace?: { start: number; end: number },\n ) => void;\n /** @deprecated 请使用 insertMention。 */\n insertTag: (mention: MentionTag, replace?: { start: number; end: number }) => void;\n}\n\nexport interface InlineTagInputProps {\n value: string;\n mentions: MentionTag[];\n defaultInputParts?: XAdkSenderInputPart[];\n placeholder?: string;\n disabled?: boolean;\n onChange: (value: string) => void;\n onMentionsChange: (mentions: MentionTag[]) => void;\n onKeyDown?: React.KeyboardEventHandler<HTMLDivElement>;\n onKeyUp?: React.KeyboardEventHandler<HTMLDivElement>;\n renderMention?: (mention: MentionTag, info: InlineTagRenderInfo) => React.ReactNode;\n}\n\nconst MENTION_ATTR = \"data-xadk-inline-mention-id\";\n// contenteditable 无法把光标放进 contenteditable=false 的 Mention 里,需用零宽字符承接“Mention 后方”的光标。\nconst CARET_TEXT = \"\\u200B\";\n\nconst createTextNode = (text: string) => document.createTextNode(text);\nconst useIsomorphicLayoutEffect =\n typeof window === \"undefined\" ? useEffect : useLayoutEffect;\nconst normalizeText = (text: string) =>\n text.replace(/\\u200B/g, \"\").replace(/\\u00a0/g, \" \");\nconst getPlainLength = (text: string) => normalizeText(text).length;\n// DOM 文本里包含零宽光标锚点,快捷键替换和光标定位都要在“用户可见文本 offset”和 DOM raw offset 之间转换。\nconst toRawOffset = (text: string, plainOffset: number) => {\n let current = 0;\n for (let i = 0; i < text.length; i++) {\n if (current >= plainOffset) return i;\n if (text[i] !== CARET_TEXT) current += 1;\n }\n return text.length;\n};\n\nconst InlineTagInput = forwardRef<InlineTagInputRef, InlineTagInputProps>(\n (\n {\n value,\n mentions,\n defaultInputParts,\n placeholder,\n disabled,\n onChange,\n onMentionsChange,\n onKeyDown,\n onKeyUp,\n renderMention,\n },\n ref,\n ) => {\n const styles = useStyles();\n const editorRef = useRef<HTMLDivElement>(null);\n const latestMentionsRef = useRef<MentionTag[]>(mentions);\n const tagRootMapRef = useRef<WeakMap<Element, Root>>(new WeakMap());\n const composingRef = useRef(false);\n const lastInsertedCaretRef = useRef<Text | null>(null);\n const savedRangeRef = useRef<Range | null>(null);\n const defaultInputPartsAppliedRef = useRef(false);\n const lastEmittedStateRef = useRef({\n value,\n mentionIds: mentions.map((mention) => mention.id).join(\"|\"),\n });\n\n useEffect(() => {\n latestMentionsRef.current = mentions;\n }, [mentions]);\n\n const getOrderedMentions = useCallback(() => {\n const editor = editorRef.current;\n if (!editor) return [];\n const mentionMap = new Map(\n latestMentionsRef.current.map((mention) => [mention.id, mention]),\n );\n return Array.from(editor.querySelectorAll(`[${MENTION_ATTR}]`))\n .map((node) =>\n mentionMap.get((node as HTMLElement).dataset.xadkInlineMentionId || \"\"),\n )\n .filter(Boolean) as MentionTag[];\n }, []);\n\n // 对外只暴露用户输入的纯文本,内部零宽锚点不进入 value。\n const getPlainText = useCallback(() => {\n const editor = editorRef.current;\n if (!editor) return \"\";\n let text = \"\";\n editor.childNodes.forEach((node) => {\n if (node.nodeType === Node.TEXT_NODE) {\n text += node.textContent || \"\";\n }\n });\n return normalizeText(text);\n }, []);\n\n // 提交时需要保留文本与 Mention 的真实顺序;仅靠 value + mentions 无法区分 Mention 在句首、句中还是句尾。\n const getParts = useCallback((): XAdkSenderSubmitPart[] => {\n const editor = editorRef.current;\n if (!editor) return [];\n const mentionMap = new Map(\n latestMentionsRef.current.map((mention) => [mention.id, mention]),\n );\n const parts: XAdkSenderSubmitPart[] = [];\n\n editor.childNodes.forEach((node) => {\n if (node.nodeType === Node.TEXT_NODE) {\n const text = normalizeText(node.textContent || \"\");\n if (text) parts.push({ type: \"text\", text });\n return;\n }\n\n if (node instanceof HTMLElement && node.hasAttribute(MENTION_ATTR)) {\n const mentionId = node.dataset.xadkInlineMentionId || \"\";\n const mention = mentionMap.get(mentionId);\n if (mention) parts.push({ type: \"mention\", mention });\n }\n });\n\n return parts;\n }, []);\n\n const emitChange = useCallback(() => {\n const nextValue = getPlainText();\n const nextMentions = getOrderedMentions();\n lastEmittedStateRef.current = {\n value: nextValue,\n mentionIds: nextMentions.map((mention) => mention.id).join(\"|\"),\n };\n onChange(nextValue);\n onMentionsChange(nextMentions);\n }, [getOrderedMentions, getPlainText, onChange, onMentionsChange]);\n\n const removeTextRange = useCallback((node: Text, start: number, end: number) => {\n const text = node.textContent || \"\";\n node.textContent = `${text.slice(0, start)}${text.slice(end)}`;\n if (!node.textContent) node.remove();\n }, []);\n\n const removeMentionNode = useCallback(\n (node: Element) => {\n const previous = node.previousSibling;\n const next = node.nextSibling;\n\n tagRootMapRef.current.get(node)?.unmount();\n node.remove();\n\n // Mention 后会补一个不可见光标锚点;删除 Mention 时同步清理,避免留下冗余节点。\n if (next?.nodeType === Node.TEXT_NODE) {\n const text = next.textContent || \"\";\n const caretLength = text.match(/^\\u200B+/)?.[0].length || 0;\n if (caretLength > 0) {\n removeTextRange(next as Text, 0, caretLength);\n return;\n }\n }\n\n if (previous?.nodeType === Node.TEXT_NODE) {\n const text = previous.textContent || \"\";\n const spaceLength = text.match(/\\s+$/)?.[0].length || 0;\n if (spaceLength > 0) {\n removeTextRange(previous as Text, text.length - spaceLength, text.length);\n }\n }\n },\n [removeTextRange],\n );\n\n const removeMentionById = useCallback(\n (id: string) => {\n const editor = editorRef.current;\n const node = Array.from(\n editor?.querySelectorAll(`[${MENTION_ATTR}]`) || [],\n ).find(\n (item) => (item as HTMLElement).dataset.xadkInlineMentionId === id,\n );\n if (node) {\n removeMentionNode(node);\n }\n emitChange();\n editor?.focus();\n },\n [emitChange, removeMentionNode],\n );\n\n // Mention 节点本身不可编辑;删除入口通过 onRemove 回到组件内部统一维护 DOM 与 mentions。\n const buildMentionNode = useCallback(\n (mention: MentionTag) => {\n const span = document.createElement(\"span\");\n span.setAttribute(\"contenteditable\", \"false\");\n span.setAttribute(MENTION_ATTR, mention.id);\n span.dataset.xadkInlineMentionId = mention.id;\n span.className = styles.inlineTag;\n\n if (renderMention) {\n const root = createRoot(span);\n tagRootMapRef.current.set(span, root);\n root.render(\n <>\n {renderMention(mention, {\n onRemove: () => removeMentionById(mention.id),\n })}\n </>,\n );\n } else {\n const label = document.createElement(\"span\");\n label.className = \"xadk-inline-tag-label\";\n label.textContent = mention.displayName || mention.label;\n const close = document.createElement(\"span\");\n close.className = \"xadk-inline-tag-close\";\n close.innerHTML = \"×\";\n close.onclick = (event) => {\n event.preventDefault();\n event.stopPropagation();\n removeMentionById(mention.id);\n };\n span.append(label, close);\n }\n return span;\n },\n [removeMentionById, renderMention, styles.inlineTag],\n );\n\n const renderPartsToEditor = useCallback(\n (parts: XAdkSenderInputPart[]) => {\n const editor = editorRef.current;\n if (!editor) return;\n\n editor.querySelectorAll(`[${MENTION_ATTR}]`).forEach((node) => {\n tagRootMapRef.current.get(node)?.unmount();\n });\n editor.innerHTML = \"\";\n\n parts.forEach((part) => {\n if (part.type === \"text\") {\n if (part.text) editor.appendChild(createTextNode(part.text));\n return;\n }\n const mention = part.type === \"mention\" ? part.mention : part.tag;\n editor.append(buildMentionNode(mention), createTextNode(CARET_TEXT));\n });\n },\n [buildMentionNode],\n );\n\n const setCursorAtTextEnd = useCallback((node: Text) => {\n const range = document.createRange();\n const selection = window.getSelection();\n range.setStart(node, node.textContent?.length || 0);\n range.collapse(true);\n selection?.removeAllRanges();\n selection?.addRange(range);\n savedRangeRef.current = range.cloneRange();\n }, []);\n\n const saveSelectionRange = useCallback(() => {\n const editor = editorRef.current;\n const selection = window.getSelection();\n if (!editor || !selection || selection.rangeCount === 0) return;\n const range = selection.getRangeAt(0);\n if (!editor.contains(range.startContainer) || !editor.contains(range.endContainer)) {\n return;\n }\n savedRangeRef.current = range.cloneRange();\n }, []);\n\n const restoreCursorAfterInsert = useCallback(\n (node: Text) => {\n const editor = editorRef.current;\n if (!editor || !editor.contains(node)) return;\n editor.focus();\n setCursorAtTextEnd(node);\n },\n [setCursorAtTextEnd],\n );\n\n const isMentionNode = (node: Node | null): node is HTMLElement =>\n node instanceof HTMLElement && node.hasAttribute(MENTION_ATTR);\n\n const isOnlyCaretText = (text: string) => normalizeText(text) === \"\";\n\n // Backspace/Delete 需要跨过零宽锚点识别相邻 Mention,不能只看光标所在文本节点。\n const getMentionBeforeRange = (range: Range) => {\n const container = range.startContainer;\n if (container.nodeType === Node.TEXT_NODE) {\n const text = container.textContent || \"\";\n const beforeCursor = text.slice(0, range.startOffset);\n if (isOnlyCaretText(beforeCursor) && isMentionNode(container.previousSibling)) {\n return container.previousSibling;\n }\n }\n\n if (container instanceof HTMLElement) {\n const previous = container.childNodes[range.startOffset - 1];\n if (isMentionNode(previous)) return previous;\n if (\n previous?.nodeType === Node.TEXT_NODE &&\n isOnlyCaretText(previous.textContent || \"\") &&\n isMentionNode(previous.previousSibling)\n ) {\n return previous.previousSibling;\n }\n }\n\n return null;\n };\n\n const getMentionAfterRange = (range: Range) => {\n const container = range.startContainer;\n if (container.nodeType === Node.TEXT_NODE) {\n const text = container.textContent || \"\";\n const afterCursor = text.slice(range.startOffset);\n if (isOnlyCaretText(afterCursor) && isMentionNode(container.nextSibling)) {\n return container.nextSibling;\n }\n }\n\n if (container instanceof HTMLElement) {\n const next = container.childNodes[range.startOffset];\n if (isMentionNode(next)) return next;\n if (\n next?.nodeType === Node.TEXT_NODE &&\n isOnlyCaretText(next.textContent || \"\") &&\n isMentionNode(next.nextSibling)\n ) {\n return next.nextSibling;\n }\n }\n\n return null;\n };\n\n // 读取光标在纯文本中的位置,供快捷键搜索词和 Mention 插入位置复用。\n const getOffsetInEditor = useCallback(() => {\n const editor = editorRef.current;\n const selection = window.getSelection();\n if (!editor || !selection || selection.rangeCount === 0) return 0;\n const range = selection.getRangeAt(0);\n let offset = 0;\n let found = false;\n\n const visit = (node: Node) => {\n if (found) return;\n if (node === range.startContainer) {\n if (node.nodeType === Node.TEXT_NODE) {\n offset += getPlainLength(\n (node.textContent || \"\").slice(0, range.startOffset),\n );\n }\n found = true;\n return;\n }\n if (node instanceof HTMLElement && node.hasAttribute(MENTION_ATTR)) return;\n if (node.nodeType === Node.TEXT_NODE) {\n offset += getPlainLength(node.textContent || \"\");\n return;\n }\n node.childNodes.forEach(visit);\n };\n\n editor.childNodes.forEach(visit);\n return offset;\n }, []);\n\n const getNodeIndex = (node: Node) => {\n let index = 0;\n let current = node;\n while (current.previousSibling) {\n index += 1;\n current = current.previousSibling;\n }\n return index;\n };\n\n // 删除快捷键触发片段,例如把 “@文档” 替换成一个结构化 Mention,并返回删除位置对应的真实 DOM Range。\n // 注意:纯文本 offset 不包含 Mention,Mention 前后可能都是 offset 0;插入 Mention 必须依赖真实 Range,不能再反推 offset。\n const replaceTextRange = useCallback((start: number, end: number) => {\n const editor = editorRef.current;\n if (!editor) return null;\n let offset = 0;\n let insertRange: Range | null = null;\n const nodes = Array.from(editor.childNodes);\n nodes.forEach((node) => {\n if (node.nodeType !== Node.TEXT_NODE) return;\n const text = node.textContent || \"\";\n const nodeStart = offset;\n const plainLength = getPlainLength(text);\n const nodeEnd = offset + plainLength;\n offset = nodeEnd;\n if (nodeEnd <= start || nodeStart >= end) return;\n const rawStart = toRawOffset(text, Math.max(0, start - nodeStart));\n const rawEnd = toRawOffset(text, Math.max(0, end - nodeStart));\n const keepLeft = text.slice(0, rawStart);\n const keepRight = text.slice(rawEnd);\n const parent = node.parentNode;\n const nodeIndex = getNodeIndex(node);\n\n node.textContent = `${keepLeft}${keepRight}`;\n if (!insertRange) {\n insertRange = document.createRange();\n if (node.textContent) {\n insertRange.setStart(node, rawStart);\n } else if (parent) {\n insertRange.setStart(parent, nodeIndex);\n }\n insertRange.collapse(true);\n }\n if (!node.textContent) node.remove();\n });\n\n return insertRange;\n }, []);\n\n // 浏览器拆分 Range 后可能留下空文本节点;清理后才能保证后续 Mention 继续 append 在队尾。\n const cleanupCaretTextNodes = useCallback(() => {\n const editor = editorRef.current;\n if (!editor) return;\n Array.from(editor.childNodes).forEach((node) => {\n if (node.nodeType !== Node.TEXT_NODE) return;\n const text = node.textContent || \"\";\n if (!text) {\n node.remove();\n return;\n }\n if (text && normalizeText(text) === \"\") {\n node.textContent = CARET_TEXT;\n }\n });\n }, []);\n\n const insertMention = useCallback(\n (mention: MentionTag, replace?: { start: number; end: number }) => {\n const editor = editorRef.current;\n if (!editor) return;\n editor.focus();\n latestMentionsRef.current = [\n ...latestMentionsRef.current.filter((item) => item.id !== mention.id),\n mention,\n ];\n let insertRange: Range | null = null;\n if (replace) {\n insertRange = replaceTextRange(replace.start, replace.end);\n cleanupCaretTextNodes();\n }\n const mentionNode = buildMentionNode(mention);\n const caretNode = createTextNode(CARET_TEXT);\n const selection = window.getSelection();\n const savedRange = savedRangeRef.current;\n const range =\n insertRange ||\n (selection?.rangeCount &&\n editor.contains(selection.getRangeAt(0).startContainer)\n ? selection.getRangeAt(0)\n : savedRange && editor.contains(savedRange.startContainer)\n ? savedRange\n : null);\n if (range && editor.contains(range.startContainer)) {\n // 用 DocumentFragment 一次性插入,避免连续 insertNode 导致 mention/caret 顺序被浏览器 Range 状态打乱。\n const fragment = document.createDocumentFragment();\n fragment.append(mentionNode, caretNode);\n range.insertNode(fragment);\n } else {\n editor.append(mentionNode, caretNode);\n }\n cleanupCaretTextNodes();\n lastInsertedCaretRef.current = caretNode;\n setCursorAtTextEnd(caretNode);\n emitChange();\n\n // 关闭快捷列表和父组件同步 mentions/value 会触发一次 React 更新;\n // 下一帧再恢复到刚插入 Mention 后的零宽锚点,避免光标被 focus 或重渲染带回旧位置。\n window.requestAnimationFrame(() => {\n if (lastInsertedCaretRef.current === caretNode) {\n restoreCursorAfterInsert(caretNode);\n }\n });\n },\n [\n buildMentionNode,\n cleanupCaretTextNodes,\n emitChange,\n replaceTextRange,\n restoreCursorAfterInsert,\n setCursorAtTextEnd,\n ],\n );\n\n useEffect(() => {\n document.addEventListener(\"selectionchange\", saveSelectionRange);\n return () => {\n document.removeEventListener(\"selectionchange\", saveSelectionRange);\n };\n }, [saveSelectionRange]);\n\n useImperativeHandle(ref, () => ({\n focus: () => editorRef.current?.focus(),\n getText: getPlainText,\n getParts,\n getCursorOffset: getOffsetInEditor,\n insertMention,\n insertTag: insertMention,\n }), [getOffsetInEditor, getParts, getPlainText, insertMention]);\n\n useIsomorphicLayoutEffect(() => {\n const editor = editorRef.current;\n if (!editor) return;\n\n // 默认片段只在空输入首次挂载时灌入,避免外部重新渲染覆盖用户正在编辑的内容。\n if (\n !defaultInputPartsAppliedRef.current &&\n defaultInputParts?.length &&\n !value &&\n mentions.length === 0\n ) {\n defaultInputPartsAppliedRef.current = true;\n renderPartsToEditor(defaultInputParts);\n emitChange();\n return;\n }\n\n const incomingMentionIds = mentions.map((mention) => mention.id).join(\"|\");\n const lastEmittedState = lastEmittedStateRef.current;\n const isInternalControlledEcho =\n value === lastEmittedState.value &&\n incomingMentionIds === lastEmittedState.mentionIds;\n\n if (isInternalControlledEcho && editor.childNodes.length > 0) return;\n\n renderPartsToEditor([\n ...(value ? [{ type: \"text\" as const, text: value }] : []),\n ...mentions.map((mention) => ({ type: \"mention\" as const, mention })),\n ]);\n\n // 外部主动写入 value/mentions 后,需要在首帧绘制前同步 DOM;若输入区已有焦点,则把光标放在内容末尾。\n const lastTextNode = Array.from(editor.childNodes)\n .reverse()\n .find((node): node is Text => node.nodeType === Node.TEXT_NODE);\n if (document.activeElement === editor && lastTextNode) {\n setCursorAtTextEnd(lastTextNode);\n }\n }, [\n defaultInputParts,\n emitChange,\n renderPartsToEditor,\n setCursorAtTextEnd,\n mentions,\n value,\n ]);\n\n useIsomorphicLayoutEffect(() => {\n const editor = editorRef.current;\n if (!editor) return;\n if (!value && mentions.length === 0 && editor.childNodes.length > 0) {\n editor.querySelectorAll(`[${MENTION_ATTR}]`).forEach((node) => {\n tagRootMapRef.current.get(node)?.unmount();\n });\n editor.innerHTML = \"\";\n }\n }, [mentions.length, value]);\n\n const handleInput = () => {\n if (!composingRef.current) emitChange();\n };\n\n const handleKeyDown: React.KeyboardEventHandler<HTMLDivElement> = (event) => {\n if (event.key === \"Backspace\" || event.key === \"Delete\") {\n const selection = window.getSelection();\n if (selection?.rangeCount) {\n const range = selection.getRangeAt(0);\n if (range.collapsed) {\n const targetMention =\n event.key === \"Backspace\"\n ? getMentionBeforeRange(range)\n : getMentionAfterRange(range);\n\n if (targetMention) {\n event.preventDefault();\n removeMentionById(targetMention.dataset.xadkInlineMentionId || \"\");\n return;\n }\n }\n }\n }\n onKeyDown?.(event);\n };\n\n // placeholder 只由受控 value/mentions 派生,避免从 contenteditable DOM 读取导致外部插入 Mention 后状态滞后一帧。\n const showPlaceholder = !value && mentions.length === 0;\n\n return (\n <div className={styles.inlineInputWrapper}>\n {showPlaceholder && placeholder && (\n <div className={styles.inlinePlaceholder}>{placeholder}</div>\n )}\n <div\n ref={editorRef}\n className={styles.inlineInput}\n contentEditable={!disabled}\n suppressContentEditableWarning\n role=\"textbox\"\n aria-multiline=\"true\"\n onInput={handleInput}\n onKeyDown={handleKeyDown}\n onKeyUp={(event) => {\n saveSelectionRange();\n onKeyUp?.(event);\n }}\n onMouseUp={saveSelectionRange}\n onFocus={saveSelectionRange}\n onCompositionStart={() => {\n composingRef.current = true;\n }}\n onCompositionEnd={() => {\n composingRef.current = false;\n emitChange();\n }}\n data-cursor-offset={getOffsetInEditor()}\n />\n </div>\n );\n },\n);\n\nInlineTagInput.displayName = \"InlineTagInput\";\n\nexport default InlineTagInput;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import type {
|
|
2
|
+
import type { MentionTag } from "../../types";
|
|
3
3
|
export interface InputTagsProps {
|
|
4
|
-
|
|
4
|
+
mentions: MentionTag[];
|
|
5
5
|
onRemove: (id: string) => void;
|
|
6
6
|
}
|
|
7
7
|
declare const InputTags: React.FC<InputTagsProps>;
|
|
@@ -26,25 +26,25 @@ var import_antd = require("antd");
|
|
|
26
26
|
var import_icons = require("@ant-design/icons");
|
|
27
27
|
var import_styles = require("./styles");
|
|
28
28
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
29
|
-
var InputTags = ({
|
|
29
|
+
var InputTags = ({ mentions, onRemove }) => {
|
|
30
30
|
const styles = (0, import_styles.useStyles)();
|
|
31
|
-
if (!
|
|
31
|
+
if (!mentions.length)
|
|
32
32
|
return null;
|
|
33
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.inputTags, children:
|
|
33
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.inputTags, children: mentions.map((mention) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
34
34
|
import_antd.Tag,
|
|
35
35
|
{
|
|
36
36
|
className: styles.inputTag,
|
|
37
37
|
closable: true,
|
|
38
38
|
onClose: (e) => {
|
|
39
39
|
e.preventDefault();
|
|
40
|
-
onRemove(
|
|
40
|
+
onRemove(mention.id);
|
|
41
41
|
},
|
|
42
42
|
closeIcon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.CloseOutlined, { style: { fontSize: 10 } }),
|
|
43
|
-
color:
|
|
44
|
-
icon:
|
|
45
|
-
children:
|
|
43
|
+
color: mention.color,
|
|
44
|
+
icon: mention.icon,
|
|
45
|
+
children: mention.displayName || mention.label
|
|
46
46
|
},
|
|
47
|
-
|
|
47
|
+
mention.id
|
|
48
48
|
)) });
|
|
49
49
|
};
|
|
50
50
|
var InputTags_default = InputTags;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/components/XAdkSender/InputTags.tsx"],
|
|
4
|
-
"sourcesContent": ["import React from \"react\";\nimport { Tag } from \"antd\";\nimport { CloseOutlined } from \"@ant-design/icons\";\nimport type {
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,kBAAoB;AACpB,mBAA8B;AAE9B,oBAA0B;AAwBL;AAjBrB,IAAM,YAAsC,CAAC,EAAE,
|
|
4
|
+
"sourcesContent": ["import React from \"react\";\nimport { Tag } from \"antd\";\nimport { CloseOutlined } from \"@ant-design/icons\";\nimport type { MentionTag } from \"@/types\";\nimport { useStyles } from \"./styles\";\n\nexport interface InputTagsProps {\n mentions: MentionTag[];\n onRemove: (id: string) => void;\n}\n\nconst InputTags: React.FC<InputTagsProps> = ({ mentions, onRemove }) => {\n const styles = useStyles();\n\n if (!mentions.length) return null;\n\n // 非 inlineTags 模式下,Mention 以独立区域展示;inlineTags 模式由 InlineTagInput 接管混排和删除。\n return (\n <div className={styles.inputTags}>\n {mentions.map((mention) => (\n <Tag\n key={mention.id}\n className={styles.inputTag}\n closable\n onClose={(e) => {\n e.preventDefault();\n onRemove(mention.id);\n }}\n closeIcon={<CloseOutlined style={{ fontSize: 10 }} />}\n color={mention.color}\n icon={mention.icon}\n >\n {mention.displayName || mention.label}\n </Tag>\n ))}\n </div>\n );\n};\n\nexport default InputTags;\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,kBAAoB;AACpB,mBAA8B;AAE9B,oBAA0B;AAwBL;AAjBrB,IAAM,YAAsC,CAAC,EAAE,UAAU,SAAS,MAAM;AACtE,QAAM,aAAS,yBAAU;AAEzB,MAAI,CAAC,SAAS;AAAQ,WAAO;AAG7B,SACE,4CAAC,SAAI,WAAW,OAAO,WACpB,mBAAS,IAAI,CAAC,YACb;AAAA,IAAC;AAAA;AAAA,MAEC,WAAW,OAAO;AAAA,MAClB,UAAQ;AAAA,MACR,SAAS,CAAC,MAAM;AACd,UAAE,eAAe;AACjB,iBAAS,QAAQ,EAAE;AAAA,MACrB;AAAA,MACA,WAAW,4CAAC,8BAAc,OAAO,EAAE,UAAU,GAAG,GAAG;AAAA,MACnD,OAAO,QAAQ;AAAA,MACf,MAAM,QAAQ;AAAA,MAEb,kBAAQ,eAAe,QAAQ;AAAA;AAAA,IAX3B,QAAQ;AAAA,EAYf,CACD,GACH;AAEJ;AAEA,IAAO,oBAAQ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -73,13 +73,20 @@ var XAdkSender = (0, import_react.forwardRef)(
|
|
|
73
73
|
footerLeft,
|
|
74
74
|
quickKeys = [],
|
|
75
75
|
inlineTags = false,
|
|
76
|
+
renderMention,
|
|
76
77
|
renderTag,
|
|
78
|
+
mentions: controlledMentions,
|
|
77
79
|
tags: controlledTags,
|
|
80
|
+
defaultMentions,
|
|
78
81
|
defaultTags = [],
|
|
82
|
+
defaultInputParts,
|
|
83
|
+
onMentionsChange,
|
|
79
84
|
onTagsChange,
|
|
80
85
|
onQuickKeyTrigger,
|
|
81
86
|
submitFormat = "text",
|
|
82
|
-
|
|
87
|
+
formatMention,
|
|
88
|
+
formatTag,
|
|
89
|
+
transformSubmitData
|
|
83
90
|
}, ref) => {
|
|
84
91
|
const styles = (0, import_styles.useStyles)();
|
|
85
92
|
const isControlled = controlledValue !== void 0;
|
|
@@ -91,14 +98,17 @@ var XAdkSender = (0, import_react.forwardRef)(
|
|
|
91
98
|
}
|
|
92
99
|
onChange == null ? void 0 : onChange(newValue);
|
|
93
100
|
};
|
|
94
|
-
const
|
|
95
|
-
const
|
|
96
|
-
const
|
|
97
|
-
const
|
|
98
|
-
|
|
99
|
-
|
|
101
|
+
const resolvedControlledMentions = controlledMentions ?? controlledTags;
|
|
102
|
+
const initialMentions = defaultMentions ?? defaultTags;
|
|
103
|
+
const isMentionsControlled = resolvedControlledMentions !== void 0;
|
|
104
|
+
const [internalMentions, setInternalMentions] = (0, import_react.useState)(initialMentions);
|
|
105
|
+
const mentions = isMentionsControlled ? resolvedControlledMentions : internalMentions;
|
|
106
|
+
const setMentions = (newMentions) => {
|
|
107
|
+
if (!isMentionsControlled) {
|
|
108
|
+
setInternalMentions(newMentions);
|
|
100
109
|
}
|
|
101
|
-
|
|
110
|
+
onMentionsChange == null ? void 0 : onMentionsChange(newMentions);
|
|
111
|
+
onTagsChange == null ? void 0 : onTagsChange(newMentions);
|
|
102
112
|
};
|
|
103
113
|
const [files, setFiles] = (0, import_react.useState)([]);
|
|
104
114
|
const [isDragOver, setIsDragOver] = (0, import_react.useState)(false);
|
|
@@ -119,21 +129,24 @@ var XAdkSender = (0, import_react.forwardRef)(
|
|
|
119
129
|
};
|
|
120
130
|
const escapeXml = (text) => text.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
121
131
|
const escapeMarkdownLabel = (text) => text.replace(/\\/g, "\\\\").replace(/\]/g, "\\]");
|
|
122
|
-
const
|
|
123
|
-
var _a, _b;
|
|
124
|
-
return String(
|
|
132
|
+
const getMentionSubmitValue = (mention) => {
|
|
133
|
+
var _a, _b, _c;
|
|
134
|
+
return String(
|
|
135
|
+
mention.value ?? mention.uri ?? ((_a = mention.data) == null ? void 0 : _a.uri) ?? ((_b = mention.data) == null ? void 0 : _b.value) ?? ((_c = mention.data) == null ? void 0 : _c.name) ?? mention.targetId ?? mention.displayName ?? mention.label ?? ""
|
|
136
|
+
);
|
|
125
137
|
};
|
|
126
|
-
const
|
|
127
|
-
const value2 =
|
|
138
|
+
const defaultFormatMention = (mention, format, index) => {
|
|
139
|
+
const value2 = getMentionSubmitValue(mention);
|
|
128
140
|
if (format === "xml") {
|
|
129
|
-
return `<
|
|
141
|
+
return `<mention type="${escapeXml(mention.type)}" id="${escapeXml(mention.id)}" label="${escapeXml(mention.label)}" value="${escapeXml(value2)}" />`;
|
|
130
142
|
}
|
|
131
143
|
if (format === "markdown") {
|
|
132
|
-
|
|
144
|
+
const href = mention.uri || (value2.includes("://") ? value2 : `xadk-mention://${encodeURIComponent(mention.type)}/${encodeURIComponent(mention.id)}`);
|
|
145
|
+
return `[@${escapeMarkdownLabel(mention.displayName || mention.label)}](${href})`;
|
|
133
146
|
}
|
|
134
|
-
return
|
|
147
|
+
return `@${mention.displayName || value2 || `mention-${index + 1}`}`;
|
|
135
148
|
};
|
|
136
|
-
const
|
|
149
|
+
const serializeMention = (mention, format, index) => (formatMention == null ? void 0 : formatMention(mention, { format, index })) ?? (formatTag == null ? void 0 : formatTag(mention, { format, index })) ?? defaultFormatMention(mention, format, index);
|
|
137
150
|
const getSubmitParts = (0, import_react.useCallback)(() => {
|
|
138
151
|
var _a;
|
|
139
152
|
if (inlineTags) {
|
|
@@ -142,9 +155,12 @@ var XAdkSender = (0, import_react.forwardRef)(
|
|
|
142
155
|
return parts;
|
|
143
156
|
}
|
|
144
157
|
const textParts = value ? [{ type: "text", text: value }] : [];
|
|
145
|
-
const
|
|
146
|
-
|
|
147
|
-
|
|
158
|
+
const mentionParts = mentions.map((mention) => ({
|
|
159
|
+
type: "mention",
|
|
160
|
+
mention
|
|
161
|
+
}));
|
|
162
|
+
return [...mentionParts, ...textParts];
|
|
163
|
+
}, [inlineTags, mentions, value]);
|
|
148
164
|
const serializeParts = (parts, format) => {
|
|
149
165
|
if (format === "structured") {
|
|
150
166
|
return parts.reduce(
|
|
@@ -156,7 +172,7 @@ var XAdkSender = (0, import_react.forwardRef)(
|
|
|
156
172
|
return parts.map((part) => {
|
|
157
173
|
if (part.type === "text")
|
|
158
174
|
return part.text;
|
|
159
|
-
const result =
|
|
175
|
+
const result = serializeMention(part.mention, format, tagIndex);
|
|
160
176
|
tagIndex += 1;
|
|
161
177
|
return result;
|
|
162
178
|
}).join("");
|
|
@@ -167,13 +183,18 @@ var XAdkSender = (0, import_react.forwardRef)(
|
|
|
167
183
|
(content, part) => content + (part.type === "text" ? part.text : ""),
|
|
168
184
|
""
|
|
169
185
|
);
|
|
170
|
-
|
|
186
|
+
const standardData = {
|
|
171
187
|
text: serializeParts(parts, submitFormat),
|
|
172
188
|
rawText,
|
|
173
189
|
format: submitFormat,
|
|
174
190
|
parts,
|
|
175
191
|
files: formattedFiles,
|
|
176
|
-
|
|
192
|
+
mentions,
|
|
193
|
+
tags: mentions
|
|
194
|
+
};
|
|
195
|
+
return {
|
|
196
|
+
...standardData,
|
|
197
|
+
payload: transformSubmitData == null ? void 0 : transformSubmitData(standardData)
|
|
177
198
|
};
|
|
178
199
|
};
|
|
179
200
|
const checkFileType = (file) => {
|
|
@@ -276,9 +297,29 @@ var XAdkSender = (0, import_react.forwardRef)(
|
|
|
276
297
|
() => ({
|
|
277
298
|
addFiles: (rawFiles) => {
|
|
278
299
|
handleFileSelect(rawFiles);
|
|
300
|
+
},
|
|
301
|
+
insertMention: (mention) => {
|
|
302
|
+
var _a;
|
|
303
|
+
if (inlineTags) {
|
|
304
|
+
(_a = inlineInputRef.current) == null ? void 0 : _a.insertMention(mention);
|
|
305
|
+
return;
|
|
306
|
+
}
|
|
307
|
+
setMentions([...mentions, mention]);
|
|
308
|
+
},
|
|
309
|
+
insertTag: (mention) => {
|
|
310
|
+
var _a;
|
|
311
|
+
if (inlineTags) {
|
|
312
|
+
(_a = inlineInputRef.current) == null ? void 0 : _a.insertMention(mention);
|
|
313
|
+
return;
|
|
314
|
+
}
|
|
315
|
+
setMentions([...mentions, mention]);
|
|
316
|
+
},
|
|
317
|
+
focus: () => {
|
|
318
|
+
var _a, _b;
|
|
319
|
+
inlineTags ? (_a = inlineInputRef.current) == null ? void 0 : _a.focus() : (_b = textareaRef.current) == null ? void 0 : _b.focus();
|
|
279
320
|
}
|
|
280
321
|
}),
|
|
281
|
-
[handleFileSelect]
|
|
322
|
+
[handleFileSelect, inlineTags, setMentions, mentions]
|
|
282
323
|
);
|
|
283
324
|
const triggerFileSelect = () => {
|
|
284
325
|
if (fileInputRef.current) {
|
|
@@ -390,11 +431,11 @@ var XAdkSender = (0, import_react.forwardRef)(
|
|
|
390
431
|
},
|
|
391
432
|
[allowUpload, handleFileSelect]
|
|
392
433
|
);
|
|
393
|
-
const
|
|
434
|
+
const handleRemoveMention = (0, import_react.useCallback)(
|
|
394
435
|
(id) => {
|
|
395
|
-
|
|
436
|
+
setMentions(mentions.filter((item) => item.id !== id));
|
|
396
437
|
},
|
|
397
|
-
[
|
|
438
|
+
[mentions, setMentions]
|
|
398
439
|
);
|
|
399
440
|
const activeQuickKeyConfig = (0, import_react.useMemo)(() => {
|
|
400
441
|
if (!activeQuickKey)
|
|
@@ -462,23 +503,27 @@ var XAdkSender = (0, import_react.forwardRef)(
|
|
|
462
503
|
const handleQuickKeySelect = (0, import_react.useCallback)(
|
|
463
504
|
(option) => {
|
|
464
505
|
var _a, _b, _c, _d;
|
|
465
|
-
const
|
|
506
|
+
const mentionType = (activeQuickKeyConfig == null ? void 0 : activeQuickKeyConfig.mentionType) || (activeQuickKeyConfig == null ? void 0 : activeQuickKeyConfig.tagType) || activeQuickKey || "unknown";
|
|
507
|
+
const newMention = {
|
|
466
508
|
id: generateId(),
|
|
467
509
|
label: option.label,
|
|
468
|
-
type:
|
|
469
|
-
value: option.value ?? option.name ?? option.label,
|
|
510
|
+
type: mentionType,
|
|
511
|
+
value: option.value ?? option.uri ?? option.name ?? option.label,
|
|
512
|
+
uri: option.uri,
|
|
513
|
+
targetId: option.targetId ?? option.skillNo ?? option.pluginNo,
|
|
514
|
+
displayName: option.displayName ?? option.label,
|
|
470
515
|
trigger: activeQuickKey || void 0,
|
|
471
516
|
icon: option.icon,
|
|
472
517
|
data: option
|
|
473
518
|
};
|
|
474
519
|
(_a = activeQuickKeyConfig == null ? void 0 : activeQuickKeyConfig.onSelect) == null ? void 0 : _a.call(activeQuickKeyConfig, option);
|
|
475
520
|
if (inlineTags) {
|
|
476
|
-
(_b = inlineInputRef.current) == null ? void 0 : _b.
|
|
521
|
+
(_b = inlineInputRef.current) == null ? void 0 : _b.insertMention(newMention, {
|
|
477
522
|
start: quickKeyTriggerIdx,
|
|
478
523
|
end: quickKeyTriggerIdx + 1 + quickKeyKeyword.length
|
|
479
524
|
});
|
|
480
525
|
} else {
|
|
481
|
-
|
|
526
|
+
setMentions([...mentions, newMention]);
|
|
482
527
|
if (quickKeyTriggerIdx >= 0) {
|
|
483
528
|
const newValue = value.slice(0, quickKeyTriggerIdx) + value.slice(quickKeyTriggerIdx + 1 + quickKeyKeyword.length);
|
|
484
529
|
setValue(newValue);
|
|
@@ -494,8 +539,8 @@ var XAdkSender = (0, import_react.forwardRef)(
|
|
|
494
539
|
activeQuickKey,
|
|
495
540
|
activeQuickKeyConfig,
|
|
496
541
|
inlineTags,
|
|
497
|
-
|
|
498
|
-
|
|
542
|
+
mentions,
|
|
543
|
+
setMentions,
|
|
499
544
|
value,
|
|
500
545
|
quickKeyTriggerIdx,
|
|
501
546
|
quickKeyKeyword,
|
|
@@ -548,7 +593,7 @@ var XAdkSender = (0, import_react.forwardRef)(
|
|
|
548
593
|
handleQuickKeyByText(text, cursorPos);
|
|
549
594
|
};
|
|
550
595
|
const handleSubmit = () => {
|
|
551
|
-
if (!value.trim() && files.length === 0 &&
|
|
596
|
+
if (!value.trim() && files.length === 0 && mentions.length === 0) {
|
|
552
597
|
import_antd.message.warning("请输入消息或选择文件");
|
|
553
598
|
return;
|
|
554
599
|
}
|
|
@@ -568,7 +613,7 @@ var XAdkSender = (0, import_react.forwardRef)(
|
|
|
568
613
|
onSubmit(createSubmitData(formattedFiles));
|
|
569
614
|
}
|
|
570
615
|
setValue("");
|
|
571
|
-
|
|
616
|
+
setMentions([]);
|
|
572
617
|
setFiles((prev) => prev.filter((f) => f.status !== "success"));
|
|
573
618
|
},
|
|
574
619
|
onCancel: () => {
|
|
@@ -581,7 +626,7 @@ var XAdkSender = (0, import_react.forwardRef)(
|
|
|
581
626
|
onSubmit(createSubmitData(formattedFiles));
|
|
582
627
|
}
|
|
583
628
|
setValue("");
|
|
584
|
-
|
|
629
|
+
setMentions([]);
|
|
585
630
|
setFiles((prev) => prev.filter((f) => f.status !== "success"));
|
|
586
631
|
}
|
|
587
632
|
};
|
|
@@ -638,34 +683,24 @@ var XAdkSender = (0, import_react.forwardRef)(
|
|
|
638
683
|
const renderFileList = () => {
|
|
639
684
|
if (files.length === 0)
|
|
640
685
|
return null;
|
|
641
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
642
|
-
|
|
686
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.contextFiles, children: files.map((file) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
687
|
+
import_FileGallery.default,
|
|
643
688
|
{
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
import_FileGallery.default,
|
|
652
|
-
{
|
|
653
|
-
file,
|
|
654
|
-
removable: true,
|
|
655
|
-
onRemove: handleRemoveFile
|
|
656
|
-
},
|
|
657
|
-
file.id
|
|
658
|
-
))
|
|
659
|
-
}
|
|
660
|
-
);
|
|
689
|
+
file,
|
|
690
|
+
size: "small",
|
|
691
|
+
removable: true,
|
|
692
|
+
onRemove: handleRemoveFile
|
|
693
|
+
},
|
|
694
|
+
file.id
|
|
695
|
+
)) });
|
|
661
696
|
};
|
|
662
697
|
const containerClass = `${styles.container} ${isDragOver ? "drag-over" : ""}`;
|
|
663
698
|
const uploading = files.some((f) => f.status === "uploading");
|
|
664
699
|
const isDisabled = disabled || uploading || loading;
|
|
665
700
|
const hasContent = value.trim().length > 0;
|
|
666
701
|
const hasFiles = files.some((f) => f.status === "success");
|
|
667
|
-
const
|
|
668
|
-
const canSend = hasContent || hasFiles ||
|
|
702
|
+
const hasMentions = mentions.length > 0;
|
|
703
|
+
const canSend = hasContent || hasFiles || hasMentions;
|
|
669
704
|
const SendButton = (props) => {
|
|
670
705
|
if (sendButtonRender) {
|
|
671
706
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children: sendButtonRender({
|
|
@@ -736,6 +771,8 @@ var XAdkSender = (0, import_react.forwardRef)(
|
|
|
736
771
|
}
|
|
737
772
|
return slot;
|
|
738
773
|
};
|
|
774
|
+
const headerNode = renderSlot(header, false);
|
|
775
|
+
const fileListNode = allowUpload && files.length > 0 ? renderFileList() : null;
|
|
739
776
|
const defaultSuffix = /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.buttonGroup, children: sendButtonRender ? sendButtonRender({
|
|
740
777
|
loading,
|
|
741
778
|
disabled: uploading || disabled,
|
|
@@ -771,8 +808,6 @@ var XAdkSender = (0, import_react.forwardRef)(
|
|
|
771
808
|
onDragLeave: allowUpload && draggable ? handleDragLeave : void 0,
|
|
772
809
|
onDrop: allowUpload && draggable ? handleDrop : void 0,
|
|
773
810
|
children: [
|
|
774
|
-
renderSlot(header, false),
|
|
775
|
-
allowUpload && files.length > 0 && renderFileList(),
|
|
776
811
|
allowUpload && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
777
812
|
"input",
|
|
778
813
|
{
|
|
@@ -790,7 +825,11 @@ var XAdkSender = (0, import_react.forwardRef)(
|
|
|
790
825
|
}
|
|
791
826
|
),
|
|
792
827
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.mainArea, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.senderWrap, children: [
|
|
793
|
-
|
|
828
|
+
(headerNode || fileListNode) && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.contextBar, children: [
|
|
829
|
+
headerNode && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.contextHeader, children: headerNode }),
|
|
830
|
+
fileListNode
|
|
831
|
+
] }),
|
|
832
|
+
!inlineTags && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_InputTags.default, { mentions, onRemove: handleRemoveMention }),
|
|
794
833
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.inputAndButtons, children: [
|
|
795
834
|
renderSlot(prefix, false),
|
|
796
835
|
inlineTags ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
@@ -798,14 +837,15 @@ var XAdkSender = (0, import_react.forwardRef)(
|
|
|
798
837
|
{
|
|
799
838
|
ref: inlineInputRef,
|
|
800
839
|
value,
|
|
801
|
-
|
|
840
|
+
mentions,
|
|
841
|
+
defaultInputParts,
|
|
802
842
|
placeholder,
|
|
803
843
|
disabled: isDisabled,
|
|
804
844
|
onChange: handleInlineInputChange,
|
|
805
|
-
|
|
845
|
+
onMentionsChange: setMentions,
|
|
806
846
|
onKeyDown: handleKeyDown,
|
|
807
847
|
onKeyUp: handleInlineKeyUp,
|
|
808
|
-
renderTag
|
|
848
|
+
renderMention: renderMention ?? renderTag
|
|
809
849
|
}
|
|
810
850
|
) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.textAreaWrapper, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
811
851
|
import_antd.Input.TextArea,
|