@ai-group/chat-sdk 3.7.1-alpha8 → 3.7.2

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.
Files changed (129) hide show
  1. package/README.md +22 -0
  2. package/dist/cjs/components/XAdkChatbot/index.js +3 -3
  3. package/dist/cjs/components/XAdkChatbot/index.js.map +2 -2
  4. package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.js +17 -50
  5. package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.js.map +2 -2
  6. package/dist/cjs/components/XAdkProvider/compound/Sender.d.ts +3 -2
  7. package/dist/cjs/components/XAdkProvider/compound/Sender.js +81 -4
  8. package/dist/cjs/components/XAdkProvider/compound/Sender.js.map +3 -3
  9. package/dist/cjs/components/XAdkProvider/context/DefaultLayoutContext.d.ts +9 -0
  10. package/dist/cjs/components/XAdkProvider/context/DefaultLayoutContext.js +34 -0
  11. package/dist/cjs/components/XAdkProvider/context/DefaultLayoutContext.js.map +7 -0
  12. package/dist/cjs/components/XAdkProvider/context/index.d.ts +5 -4
  13. package/dist/cjs/components/XAdkProvider/context/index.js +3 -1
  14. package/dist/cjs/components/XAdkProvider/context/index.js.map +2 -2
  15. package/dist/cjs/components/XAdkProvider/index.js +3 -3
  16. package/dist/cjs/components/XAdkProvider/index.js.map +2 -2
  17. package/dist/cjs/components/XAdkSender/InlineTagInput.d.ts +4 -0
  18. package/dist/cjs/components/XAdkSender/InlineTagInput.js +28 -1
  19. package/dist/cjs/components/XAdkSender/InlineTagInput.js.map +2 -2
  20. package/dist/cjs/components/XAdkSender/{QuickList.d.ts → InputSuggestionList.d.ts} +4 -3
  21. package/dist/cjs/components/XAdkSender/{QuickList.js → InputSuggestionList.js} +55 -30
  22. package/dist/cjs/components/XAdkSender/InputSuggestionList.js.map +7 -0
  23. package/dist/cjs/components/XAdkSender/index.js +35 -13
  24. package/dist/cjs/components/XAdkSender/index.js.map +3 -3
  25. package/dist/cjs/components/XAdkSender/styles.js +13 -1
  26. package/dist/cjs/components/XAdkSender/styles.js.map +2 -2
  27. package/dist/cjs/components/XAiConversations/index.js +1 -1
  28. package/dist/cjs/components/XAiConversations/index.js.map +2 -2
  29. package/dist/cjs/components/XAiConversations/styles.js +11 -1
  30. package/dist/cjs/components/XAiConversations/styles.js.map +2 -2
  31. package/dist/cjs/index.d.ts +4 -3
  32. package/dist/cjs/index.js +21 -8
  33. package/dist/cjs/index.js.map +2 -2
  34. package/dist/cjs/presets/base.d.ts +6 -0
  35. package/dist/cjs/presets/base.js +50 -0
  36. package/dist/cjs/presets/base.js.map +7 -0
  37. package/dist/cjs/presets/define.d.ts +11 -0
  38. package/dist/cjs/presets/define.js +58 -0
  39. package/dist/cjs/presets/define.js.map +7 -0
  40. package/dist/cjs/presets/index.d.ts +3 -0
  41. package/dist/cjs/presets/index.js +28 -0
  42. package/dist/cjs/presets/index.js.map +7 -0
  43. package/dist/cjs/presets/runtime.d.ts +22 -0
  44. package/dist/cjs/presets/runtime.js +75 -0
  45. package/dist/cjs/presets/runtime.js.map +7 -0
  46. package/dist/cjs/presets/xgroup/index.d.ts +4 -0
  47. package/dist/cjs/presets/xgroup/index.js +8 -0
  48. package/dist/cjs/presets/xgroup/index.js.map +2 -2
  49. package/dist/cjs/presets/xgroup/knowledgeReference.js +3 -1
  50. package/dist/cjs/presets/xgroup/knowledgeReference.js.map +2 -2
  51. package/dist/cjs/presets/xgroup/preset.d.ts +1 -15
  52. package/dist/cjs/presets/xgroup/preset.js +15 -54
  53. package/dist/cjs/presets/xgroup/preset.js.map +2 -2
  54. package/dist/cjs/presets/xgroup/strategies.d.ts +1 -4
  55. package/dist/cjs/presets/xgroup/strategies.js +0 -17
  56. package/dist/cjs/presets/xgroup/strategies.js.map +2 -2
  57. package/dist/cjs/presets/xgroup/webReference.d.ts +10 -0
  58. package/dist/cjs/presets/xgroup/webReference.js +85 -0
  59. package/dist/cjs/presets/xgroup/webReference.js.map +7 -0
  60. package/dist/cjs/types/ChatStrategies.d.ts +3 -1
  61. package/dist/cjs/types/ChatStrategies.js.map +1 -1
  62. package/dist/cjs/types/XAdkSender.d.ts +4 -0
  63. package/dist/cjs/types/XAdkSender.js.map +1 -1
  64. package/dist/esm/components/XAdkChatbot/index.js +1 -1
  65. package/dist/esm/components/XAdkChatbot/index.js.map +1 -1
  66. package/dist/esm/components/XAdkProvider/compound/DefaultLayout.js +16 -41
  67. package/dist/esm/components/XAdkProvider/compound/DefaultLayout.js.map +1 -1
  68. package/dist/esm/components/XAdkProvider/compound/Sender.d.ts +3 -2
  69. package/dist/esm/components/XAdkProvider/compound/Sender.js +70 -7
  70. package/dist/esm/components/XAdkProvider/compound/Sender.js.map +1 -1
  71. package/dist/esm/components/XAdkProvider/context/DefaultLayoutContext.d.ts +9 -0
  72. package/dist/esm/components/XAdkProvider/context/DefaultLayoutContext.js +9 -0
  73. package/dist/esm/components/XAdkProvider/context/DefaultLayoutContext.js.map +1 -0
  74. package/dist/esm/components/XAdkProvider/context/index.d.ts +5 -4
  75. package/dist/esm/components/XAdkProvider/context/index.js +1 -0
  76. package/dist/esm/components/XAdkProvider/context/index.js.map +1 -1
  77. package/dist/esm/components/XAdkProvider/index.js +1 -1
  78. package/dist/esm/components/XAdkProvider/index.js.map +1 -1
  79. package/dist/esm/components/XAdkSender/InlineTagInput.d.ts +4 -0
  80. package/dist/esm/components/XAdkSender/InlineTagInput.js +26 -7
  81. package/dist/esm/components/XAdkSender/InlineTagInput.js.map +1 -1
  82. package/dist/esm/components/XAdkSender/{QuickList.d.ts → InputSuggestionList.d.ts} +4 -3
  83. package/dist/esm/components/XAdkSender/{QuickList.js → InputSuggestionList.js} +53 -28
  84. package/dist/esm/components/XAdkSender/InputSuggestionList.js.map +1 -0
  85. package/dist/esm/components/XAdkSender/index.js +39 -18
  86. package/dist/esm/components/XAdkSender/index.js.map +1 -1
  87. package/dist/esm/components/XAdkSender/styles.js +2 -2
  88. package/dist/esm/components/XAdkSender/styles.js.map +1 -1
  89. package/dist/esm/components/XAiConversations/index.js +2 -1
  90. package/dist/esm/components/XAiConversations/index.js.map +1 -1
  91. package/dist/esm/components/XAiConversations/styles.js +3 -3
  92. package/dist/esm/components/XAiConversations/styles.js.map +1 -1
  93. package/dist/esm/index.d.ts +4 -3
  94. package/dist/esm/index.js +3 -2
  95. package/dist/esm/index.js.map +1 -1
  96. package/dist/esm/presets/base.d.ts +6 -0
  97. package/dist/esm/presets/base.js +28 -0
  98. package/dist/esm/presets/base.js.map +1 -0
  99. package/dist/esm/presets/define.d.ts +11 -0
  100. package/dist/esm/presets/define.js +33 -0
  101. package/dist/esm/presets/define.js.map +1 -0
  102. package/dist/esm/presets/index.d.ts +3 -0
  103. package/dist/esm/presets/index.js +4 -0
  104. package/dist/esm/presets/index.js.map +1 -0
  105. package/dist/esm/presets/runtime.d.ts +22 -0
  106. package/dist/esm/presets/runtime.js +45 -0
  107. package/dist/esm/presets/runtime.js.map +1 -0
  108. package/dist/esm/presets/xgroup/index.d.ts +4 -0
  109. package/dist/esm/presets/xgroup/index.js +5 -0
  110. package/dist/esm/presets/xgroup/index.js.map +1 -1
  111. package/dist/esm/presets/xgroup/knowledgeReference.js +2 -1
  112. package/dist/esm/presets/xgroup/knowledgeReference.js.map +1 -1
  113. package/dist/esm/presets/xgroup/preset.d.ts +1 -15
  114. package/dist/esm/presets/xgroup/preset.js +5 -41
  115. package/dist/esm/presets/xgroup/preset.js.map +1 -1
  116. package/dist/esm/presets/xgroup/strategies.d.ts +1 -4
  117. package/dist/esm/presets/xgroup/strategies.js +0 -23
  118. package/dist/esm/presets/xgroup/strategies.js.map +1 -1
  119. package/dist/esm/presets/xgroup/webReference.d.ts +10 -0
  120. package/dist/esm/presets/xgroup/webReference.js +46 -0
  121. package/dist/esm/presets/xgroup/webReference.js.map +1 -0
  122. package/dist/esm/types/ChatStrategies.d.ts +3 -1
  123. package/dist/esm/types/ChatStrategies.js.map +1 -1
  124. package/dist/esm/types/XAdkSender.d.ts +4 -0
  125. package/dist/esm/types/XAdkSender.js.map +1 -1
  126. package/dist/umd/chat-sdk.min.js +1 -1
  127. package/package.json +6 -1
  128. package/dist/cjs/components/XAdkSender/QuickList.js.map +0 -7
  129. package/dist/esm/components/XAdkSender/QuickList.js.map +0 -1
@@ -0,0 +1,9 @@
1
+ /// <reference types="react" />
2
+ import type { XAdkSenderHandle } from "../../../types";
3
+ /** DefaultLayout 与自定义 footer Sender 之间的内部协作信息。 */
4
+ export interface DefaultLayoutContextType {
5
+ allowUpload?: boolean;
6
+ registerSender?: (sender: XAdkSenderHandle | null) => void;
7
+ }
8
+ export declare const DefaultLayoutContext: import("react").Context<DefaultLayoutContextType | null>;
9
+ export declare const useDefaultLayoutContext: () => DefaultLayoutContextType | null;
@@ -0,0 +1,9 @@
1
+ import { createContext, useContext } from "react";
2
+
3
+ /** DefaultLayout 与自定义 footer Sender 之间的内部协作信息。 */
4
+
5
+ export var DefaultLayoutContext = /*#__PURE__*/createContext(null);
6
+ export var useDefaultLayoutContext = function useDefaultLayoutContext() {
7
+ return useContext(DefaultLayoutContext);
8
+ };
9
+ //# sourceMappingURL=DefaultLayoutContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createContext","useContext","DefaultLayoutContext","useDefaultLayoutContext"],"sources":["../../../../../src/components/XAdkProvider/context/DefaultLayoutContext.tsx"],"sourcesContent":["import { createContext, useContext } from \"react\";\nimport type { XAdkSenderHandle } from \"@/types\";\n\n/** DefaultLayout 与自定义 footer Sender 之间的内部协作信息。 */\nexport interface DefaultLayoutContextType {\n allowUpload?: boolean;\n registerSender?: (sender: XAdkSenderHandle | null) => void;\n}\n\nexport const DefaultLayoutContext =\n createContext<DefaultLayoutContextType | null>(null);\n\nexport const useDefaultLayoutContext = () => useContext(DefaultLayoutContext);\n"],"mappings":"AAAA,SAASA,aAAa,EAAEC,UAAU,QAAQ,OAAO;;AAGjD;;AAMA,OAAO,IAAMC,oBAAoB,gBAC/BF,aAAa,CAAkC,IAAI,CAAC;AAEtD,OAAO,IAAMG,uBAAuB,GAAG,SAA1BA,uBAAuBA,CAAA;EAAA,OAASF,UAAU,CAACC,oBAAoB,CAAC;AAAA"}
@@ -2,7 +2,8 @@
2
2
  * XAdkProvider Context 导出
3
3
  * 提供拆分的 Context 和对应的 Hooks
4
4
  */
5
- export * from './ChatStateContext';
6
- export * from './ChatActionContext';
7
- export * from './SessionContext';
8
- export * from './ChatSenderStateContext';
5
+ export * from "./ChatStateContext";
6
+ export * from "./ChatActionContext";
7
+ export * from "./SessionContext";
8
+ export * from "./ChatSenderStateContext";
9
+ export * from "./DefaultLayoutContext";
@@ -7,4 +7,5 @@ export * from "./ChatStateContext";
7
7
  export * from "./ChatActionContext";
8
8
  export * from "./SessionContext";
9
9
  export * from "./ChatSenderStateContext";
10
+ export * from "./DefaultLayoutContext";
10
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["../../../../../src/components/XAdkProvider/context/index.ts"],"sourcesContent":["/**\n * XAdkProvider Context 导出\n * 提供拆分的 Context 和对应的 Hooks\n */\n\nexport * from './ChatStateContext';\nexport * from './ChatActionContext';\nexport * from './SessionContext';\nexport * from './ChatSenderStateContext';\n"],"mappings":"AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA"}
1
+ {"version":3,"names":[],"sources":["../../../../../src/components/XAdkProvider/context/index.ts"],"sourcesContent":["/**\n * XAdkProvider Context 导出\n * 提供拆分的 Context 和对应的 Hooks\n */\n\nexport * from \"./ChatStateContext\";\nexport * from \"./ChatActionContext\";\nexport * from \"./SessionContext\";\nexport * from \"./ChatSenderStateContext\";\nexport * from \"./DefaultLayoutContext\";\n"],"mappings":"AAAA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA"}
@@ -12,7 +12,7 @@ import { ChatSenderStateContext } from "./context/ChatSenderStateContext";
12
12
  import useADKChat from "../../hooks/useADKChat";
13
13
  import { primaryBlue } from "../../styles/common";
14
14
  import { cssVarStyle } from "../../styles/tokens";
15
- import { mergeChatStrategies, resolvePresetUploadRequest } from "../../presets/xgroup";
15
+ import { mergeChatStrategies, resolvePresetUploadRequest } from "../../presets/runtime";
16
16
 
17
17
  /**
18
18
  * XAdkProvider Props (扩展版)
@@ -1 +1 @@
1
- {"version":3,"names":["React","forwardRef","useImperativeHandle","useMemo","useState","ConfigProvider","XProvider","ChatStateContext","ChatActionContext","SessionContext","ChatSenderStateContext","useADKChat","primaryBlue","cssVarStyle","mergeChatStrategies","resolvePresetUploadRequest","XAdkProviderComponent","_ref","ref","_config$showFeedback","_config$allowUpload","_config$draggable","_config$uploadRequest","_ref$url","url","window","location","origin","token","config","preset","strategies","chatData","_ref$providerId","providerId","onSuccess","onError","onMessage","onStream","children","mergedStrategies","_objectSpread","internalData","enabled","data","appInfo","startChat","stopChat","reChat","clearChat","suggestChat","confirmFnCall","deleteSession","updateSession","currentSessionId","sessionPagination","sessionList","messages","loading","prologue","suggestions","initialized","setCurrentSession","setMessages","_data$likeMessage","likeMessage","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_callee$","_context","prev","next","abrupt","stop","_data$setStateDelta","setStateDelta","showFeedback","onFileClick","allowUpload","draggable","presetUploadRequest","appNo","uploadRequest","getAppInfo","getMessages","getSessions","chatStateValue","chatActionValue","chat","sessionValue","_useState","_useState2","_slicedToArray","senderValue","setSenderValue","senderStateValue","_jsx","theme","colorPrimary","appTheme","Provider","value","style","display","height","width","position","displayName","Header","Sidebar","Messages","Sender","Chatbot","Welcome","DefaultLayout","jsx","XAdkProvider"],"sources":["../../../../src/components/XAdkProvider/index.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useImperativeHandle,\n useMemo,\n useState,\n} from \"react\";\nimport { ConfigProvider } from \"antd\";\nimport { XProvider } from \"@ant-design/x\";\nimport { ChatStateContext } from \"./context/ChatStateContext\";\nimport { ChatActionContext } from \"./context/ChatActionContext\";\nimport { SessionContext } from \"./context/SessionContext\";\nimport { ChatSenderStateContext } from \"./context/ChatSenderStateContext\";\nimport useADKChat from \"@/hooks/useADKChat\";\nimport { primaryBlue } from \"@/styles/common\";\nimport { cssVarStyle } from \"@/styles/tokens\";\nimport type {\n XAdkProviderProps,\n XAdkProviderHandle,\n XAdkProviderConfig,\n} from \"@/types/XAdkProvider\";\nimport type { ChatHookResult } from \"@/types/ChatHook\";\nimport {\n mergeChatStrategies,\n resolvePresetUploadRequest,\n} from \"@/presets/xgroup\";\n\n/**\n * XAdkProvider Props (扩展版)\n *\n * 支持两种使用方式:\n * 1. 标准协议: 提供 url/token/config,使用内置 useADKChat\n * 2. 自定义协议: 提供 chatData,使用自己的 Hook\n */\nexport interface XAdkProviderPropsExtended extends Omit<\n XAdkProviderProps,\n \"url\" | \"token\" | \"config\"\n> {\n /**\n * 选项 A: 使用标准协议 (内置 useADKChat)\n */\n url?: string;\n token: string;\n config?: XAdkProviderConfig;\n\n /**\n * 选项 B: 使用自定义 Hook 数据\n * 如果提供此参数,将忽略 url/token/config\n *\n * @example\n * // GraphQL 协议\n * const chatData = useMyGraphQLChat({ endpoint: '...' });\n * <XAdkProvider chatData={chatData}>\n * <XAdkProvider.DefaultLayout />\n * </XAdkProvider>\n *\n * @example\n * // WebSocket 协议\n * const chatData = useWebSocketChat({ url: 'ws://...' });\n * <XAdkProvider chatData={chatData}>\n * <XAdkProvider.DefaultLayout />\n * </XAdkProvider>\n */\n chatData?: ChatHookResult;\n\n children: React.ReactNode;\n}\n\n/**\n * XAdkProvider - AI 聊天 SDK 核心 Provider\n *\n * 采用 Compound Components 架构:\n * - 只负责数据和状态管理\n * - 不包含 UI 布局\n * - 通过 Context 向子组件提供数据\n * - 支持完全自定义的组件组合\n * - 支持协议解耦,可使用自定义 Hook\n *\n * @example\n * // 基础用法 - 标准协议\n * <XAdkProvider url=\"...\" token=\"...\" config={...}>\n * <XAdkProvider.Chatbot />\n * </XAdkProvider>\n *\n * @example\n * // 自定义协议 - GraphQL\n * function App() {\n * const chatData = useMyGraphQLChat({ endpoint: '...' });\n * return (\n * <XAdkProvider chatData={chatData}>\n * <XAdkProvider.DefaultLayout />\n * </XAdkProvider>\n * );\n * }\n *\n * @example\n * // 自定义布局\n * <XAdkProvider url=\"...\" token=\"...\">\n * <div style={{ display: 'flex' }}>\n * <XAdkProvider.Sidebar />\n * <div>\n * <XAdkProvider.Messages />\n * <XAdkProvider.Sender />\n * </div>\n * </div>\n * </XAdkProvider>\n */\nconst XAdkProviderComponent = forwardRef<\n XAdkProviderHandle,\n XAdkProviderPropsExtended\n>(\n (\n {\n url = window.location.origin,\n token,\n config,\n preset,\n strategies,\n chatData, // 自定义 Hook 数据\n providerId = \"defaultId\",\n onSuccess,\n onError,\n onMessage,\n onStream,\n children,\n },\n ref,\n ) => {\n const mergedStrategies = useMemo(\n () =>\n mergeChatStrategies(preset ?? config?.preset, {\n ...config?.strategies,\n ...strategies,\n }),\n [preset, strategies, config?.preset, config?.strategies],\n );\n\n // 内置 Hook 数据 (仅在没有提供 chatData 时调用)\n const internalData = useADKChat({\n url,\n token: token || \"\",\n config: config || {},\n strategies: mergedStrategies,\n onError,\n onSuccess,\n onMessage,\n onStream,\n // 仅在提供了 url 和 token 时才初始化\n enabled: !chatData && !!url && !!token,\n });\n\n // 使用外部数据或内部数据\n const data = chatData || internalData;\n\n // 解构数据\n const {\n appInfo,\n startChat,\n stopChat,\n reChat,\n clearChat,\n suggestChat,\n confirmFnCall,\n deleteSession,\n updateSession,\n currentSessionId,\n sessionPagination,\n sessionList,\n messages,\n loading,\n prologue,\n suggestions,\n initialized,\n setCurrentSession,\n setMessages,\n likeMessage = async () => false,\n setStateDelta = () => {},\n } = data;\n\n const showFeedback = config?.showFeedback ?? true;\n const onFileClick = config?.onFileClick;\n const allowUpload = config?.allowUpload ?? false;\n const draggable = config?.draggable ?? true;\n const presetUploadRequest = useMemo(\n () =>\n resolvePresetUploadRequest(preset ?? config?.preset, {\n url,\n token,\n appNo: config?.appNo,\n }),\n [preset, config?.preset, url, token, config?.appNo],\n );\n const uploadRequest = config?.uploadRequest ?? presetUploadRequest;\n\n // 暴露 API 给 ref\n useImperativeHandle(\n ref,\n () => ({\n startChat,\n stopChat,\n reChat,\n clearChat,\n suggestChat,\n deleteSession,\n updateSession,\n getAppInfo: () => appInfo,\n getMessages: () => messages,\n getSessions: () => sessionList,\n setMessages,\n setCurrentSession,\n setStateDelta,\n }),\n [\n appInfo,\n messages,\n sessionList,\n startChat,\n stopChat,\n reChat,\n clearChat,\n suggestChat,\n deleteSession,\n updateSession,\n setMessages,\n setCurrentSession,\n setStateDelta,\n ],\n );\n\n // 状态 Context Value - 使用 useMemo 避免不必要的 rerender\n const chatStateValue = useMemo(\n () => ({\n messages,\n loading,\n currentSessionId,\n prologue,\n suggestions,\n appInfo,\n initialized,\n url,\n token,\n showFeedback,\n onFileClick,\n uploadRequest,\n strategies: mergedStrategies,\n }),\n [\n messages,\n loading,\n currentSessionId,\n prologue,\n suggestions,\n appInfo,\n initialized,\n url,\n token,\n showFeedback,\n onFileClick,\n uploadRequest,\n mergedStrategies,\n ],\n );\n\n // 动作 Context Value - 函数引用稳定,不需要每次都创建新对象\n const chatActionValue = useMemo(\n () => ({\n chat: startChat,\n stopChat,\n clearChat,\n reChat,\n suggestChat,\n confirmFnCall,\n setMessages,\n likeMessage,\n setStateDelta,\n }),\n [\n startChat,\n stopChat,\n clearChat,\n reChat,\n suggestChat,\n confirmFnCall,\n setMessages,\n likeMessage,\n setStateDelta,\n ],\n );\n\n // 会话 Context Value\n const sessionValue = useMemo(\n () => ({\n sessionList,\n sessionPagination,\n deleteSession,\n updateSession,\n setCurrentSession,\n }),\n [\n sessionList,\n sessionPagination,\n deleteSession,\n updateSession,\n setCurrentSession,\n ],\n );\n\n // Sender 输入框受控状态\n const [senderValue, setSenderValue] = useState(\"\");\n\n // Sender 专用状态 — 不包含 messages,避免轮询更新消息时导致 Sender 重渲染和焦点丢失\n const senderStateValue = useMemo(\n () => ({\n loading,\n uploadRequest,\n allowUpload,\n draggable,\n senderValue,\n setSenderValue,\n }),\n [loading, uploadRequest, allowUpload, draggable, senderValue],\n );\n\n return (\n <ConfigProvider\n theme={{\n token: {\n colorPrimary: appInfo?.appTheme || primaryBlue,\n },\n }}\n >\n <XProvider>\n <ChatStateContext.Provider value={chatStateValue}>\n <ChatActionContext.Provider value={chatActionValue}>\n <SessionContext.Provider value={sessionValue}>\n <ChatSenderStateContext.Provider value={senderStateValue}>\n <div\n style={\n {\n ...cssVarStyle,\n display: \"flex\",\n height: \"100%\",\n width: \"100%\",\n position: \"relative\",\n } as React.CSSProperties\n }\n >\n {children}\n </div>\n </ChatSenderStateContext.Provider>\n </SessionContext.Provider>\n </ChatActionContext.Provider>\n </ChatStateContext.Provider>\n </XProvider>\n </ConfigProvider>\n );\n },\n);\n\nXAdkProviderComponent.displayName = \"XAdkProvider\";\n\n// 导入 Compound Components\nimport Header from \"./compound/Header\";\nimport Sidebar from \"./compound/Sidebar\";\nimport Messages from \"./compound/Messages\";\nimport Sender from \"./compound/Sender\";\nimport Chatbot from \"./compound/Chatbot\";\nimport Welcome from \"./compound/Welcome\";\nimport DefaultLayout from \"./compound/DefaultLayout\";\n\n// 导出时会挂载 Compound Components\nconst XAdkProvider = XAdkProviderComponent as typeof XAdkProviderComponent & {\n Header: typeof Header;\n Sidebar: typeof Sidebar;\n Messages: typeof Messages;\n Sender: typeof Sender;\n Chatbot: typeof Chatbot;\n Welcome: typeof Welcome;\n DefaultLayout: typeof DefaultLayout;\n};\n\n// 挂载 Compound Components\nXAdkProvider.Header = Header;\nXAdkProvider.Sidebar = Sidebar;\nXAdkProvider.Messages = Messages;\nXAdkProvider.Sender = Sender;\nXAdkProvider.Chatbot = Chatbot;\nXAdkProvider.DefaultLayout = DefaultLayout;\nXAdkProvider.Welcome = Welcome;\n\nexport default XAdkProvider;\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","forwardRef","useImperativeHandle","useMemo","useState","ConfigProvider","XProvider","ChatStateContext","ChatActionContext","SessionContext","ChatSenderStateContext","useADKChat","primaryBlue","cssVarStyle","mergeChatStrategies","resolvePresetUploadRequest","XAdkProviderComponent","_ref","ref","_config$showFeedback","_config$allowUpload","_config$draggable","_config$uploadRequest","_ref$url","url","window","location","origin","token","config","preset","strategies","chatData","_ref$providerId","providerId","onSuccess","onError","onMessage","onStream","children","mergedStrategies","_objectSpread","internalData","enabled","data","appInfo","startChat","stopChat","reChat","clearChat","suggestChat","confirmFnCall","deleteSession","updateSession","currentSessionId","sessionPagination","sessionList","messages","loading","prologue","suggestions","initialized","setCurrentSession","setMessages","_data$likeMessage","likeMessage","_asyncToGenerator","_regeneratorRuntime","mark","_callee","wrap","_callee$","_context","prev","next","abrupt","stop","_data$setStateDelta","setStateDelta","showFeedback","onFileClick","allowUpload","draggable","presetUploadRequest","appNo","uploadRequest","getAppInfo","getMessages","getSessions","chatStateValue","chatActionValue","chat","sessionValue","_useState","_useState2","_slicedToArray","senderValue","setSenderValue","senderStateValue","_jsx","theme","colorPrimary","appTheme","Provider","value","style","display","height","width","position","displayName","Header","Sidebar","Messages","Sender","Chatbot","Welcome","DefaultLayout","jsx","XAdkProvider"],"sources":["../../../../src/components/XAdkProvider/index.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useImperativeHandle,\n useMemo,\n useState,\n} from \"react\";\nimport { ConfigProvider } from \"antd\";\nimport { XProvider } from \"@ant-design/x\";\nimport { ChatStateContext } from \"./context/ChatStateContext\";\nimport { ChatActionContext } from \"./context/ChatActionContext\";\nimport { SessionContext } from \"./context/SessionContext\";\nimport { ChatSenderStateContext } from \"./context/ChatSenderStateContext\";\nimport useADKChat from \"@/hooks/useADKChat\";\nimport { primaryBlue } from \"@/styles/common\";\nimport { cssVarStyle } from \"@/styles/tokens\";\nimport type {\n XAdkProviderProps,\n XAdkProviderHandle,\n XAdkProviderConfig,\n} from \"@/types/XAdkProvider\";\nimport type { ChatHookResult } from \"@/types/ChatHook\";\nimport {\n mergeChatStrategies,\n resolvePresetUploadRequest,\n} from \"@/presets/runtime\";\n\n/**\n * XAdkProvider Props (扩展版)\n *\n * 支持两种使用方式:\n * 1. 标准协议: 提供 url/token/config,使用内置 useADKChat\n * 2. 自定义协议: 提供 chatData,使用自己的 Hook\n */\nexport interface XAdkProviderPropsExtended extends Omit<\n XAdkProviderProps,\n \"url\" | \"token\" | \"config\"\n> {\n /**\n * 选项 A: 使用标准协议 (内置 useADKChat)\n */\n url?: string;\n token: string;\n config?: XAdkProviderConfig;\n\n /**\n * 选项 B: 使用自定义 Hook 数据\n * 如果提供此参数,将忽略 url/token/config\n *\n * @example\n * // GraphQL 协议\n * const chatData = useMyGraphQLChat({ endpoint: '...' });\n * <XAdkProvider chatData={chatData}>\n * <XAdkProvider.DefaultLayout />\n * </XAdkProvider>\n *\n * @example\n * // WebSocket 协议\n * const chatData = useWebSocketChat({ url: 'ws://...' });\n * <XAdkProvider chatData={chatData}>\n * <XAdkProvider.DefaultLayout />\n * </XAdkProvider>\n */\n chatData?: ChatHookResult;\n\n children: React.ReactNode;\n}\n\n/**\n * XAdkProvider - AI 聊天 SDK 核心 Provider\n *\n * 采用 Compound Components 架构:\n * - 只负责数据和状态管理\n * - 不包含 UI 布局\n * - 通过 Context 向子组件提供数据\n * - 支持完全自定义的组件组合\n * - 支持协议解耦,可使用自定义 Hook\n *\n * @example\n * // 基础用法 - 标准协议\n * <XAdkProvider url=\"...\" token=\"...\" config={...}>\n * <XAdkProvider.Chatbot />\n * </XAdkProvider>\n *\n * @example\n * // 自定义协议 - GraphQL\n * function App() {\n * const chatData = useMyGraphQLChat({ endpoint: '...' });\n * return (\n * <XAdkProvider chatData={chatData}>\n * <XAdkProvider.DefaultLayout />\n * </XAdkProvider>\n * );\n * }\n *\n * @example\n * // 自定义布局\n * <XAdkProvider url=\"...\" token=\"...\">\n * <div style={{ display: 'flex' }}>\n * <XAdkProvider.Sidebar />\n * <div>\n * <XAdkProvider.Messages />\n * <XAdkProvider.Sender />\n * </div>\n * </div>\n * </XAdkProvider>\n */\nconst XAdkProviderComponent = forwardRef<\n XAdkProviderHandle,\n XAdkProviderPropsExtended\n>(\n (\n {\n url = window.location.origin,\n token,\n config,\n preset,\n strategies,\n chatData, // 自定义 Hook 数据\n providerId = \"defaultId\",\n onSuccess,\n onError,\n onMessage,\n onStream,\n children,\n },\n ref,\n ) => {\n const mergedStrategies = useMemo(\n () =>\n mergeChatStrategies(preset ?? config?.preset, {\n ...config?.strategies,\n ...strategies,\n }),\n [preset, strategies, config?.preset, config?.strategies],\n );\n\n // 内置 Hook 数据 (仅在没有提供 chatData 时调用)\n const internalData = useADKChat({\n url,\n token: token || \"\",\n config: config || {},\n strategies: mergedStrategies,\n onError,\n onSuccess,\n onMessage,\n onStream,\n // 仅在提供了 url 和 token 时才初始化\n enabled: !chatData && !!url && !!token,\n });\n\n // 使用外部数据或内部数据\n const data = chatData || internalData;\n\n // 解构数据\n const {\n appInfo,\n startChat,\n stopChat,\n reChat,\n clearChat,\n suggestChat,\n confirmFnCall,\n deleteSession,\n updateSession,\n currentSessionId,\n sessionPagination,\n sessionList,\n messages,\n loading,\n prologue,\n suggestions,\n initialized,\n setCurrentSession,\n setMessages,\n likeMessage = async () => false,\n setStateDelta = () => {},\n } = data;\n\n const showFeedback = config?.showFeedback ?? true;\n const onFileClick = config?.onFileClick;\n const allowUpload = config?.allowUpload ?? false;\n const draggable = config?.draggable ?? true;\n const presetUploadRequest = useMemo(\n () =>\n resolvePresetUploadRequest(preset ?? config?.preset, {\n url,\n token,\n appNo: config?.appNo,\n }),\n [preset, config?.preset, url, token, config?.appNo],\n );\n const uploadRequest = config?.uploadRequest ?? presetUploadRequest;\n\n // 暴露 API 给 ref\n useImperativeHandle(\n ref,\n () => ({\n startChat,\n stopChat,\n reChat,\n clearChat,\n suggestChat,\n deleteSession,\n updateSession,\n getAppInfo: () => appInfo,\n getMessages: () => messages,\n getSessions: () => sessionList,\n setMessages,\n setCurrentSession,\n setStateDelta,\n }),\n [\n appInfo,\n messages,\n sessionList,\n startChat,\n stopChat,\n reChat,\n clearChat,\n suggestChat,\n deleteSession,\n updateSession,\n setMessages,\n setCurrentSession,\n setStateDelta,\n ],\n );\n\n // 状态 Context Value - 使用 useMemo 避免不必要的 rerender\n const chatStateValue = useMemo(\n () => ({\n messages,\n loading,\n currentSessionId,\n prologue,\n suggestions,\n appInfo,\n initialized,\n url,\n token,\n showFeedback,\n onFileClick,\n uploadRequest,\n strategies: mergedStrategies,\n }),\n [\n messages,\n loading,\n currentSessionId,\n prologue,\n suggestions,\n appInfo,\n initialized,\n url,\n token,\n showFeedback,\n onFileClick,\n uploadRequest,\n mergedStrategies,\n ],\n );\n\n // 动作 Context Value - 函数引用稳定,不需要每次都创建新对象\n const chatActionValue = useMemo(\n () => ({\n chat: startChat,\n stopChat,\n clearChat,\n reChat,\n suggestChat,\n confirmFnCall,\n setMessages,\n likeMessage,\n setStateDelta,\n }),\n [\n startChat,\n stopChat,\n clearChat,\n reChat,\n suggestChat,\n confirmFnCall,\n setMessages,\n likeMessage,\n setStateDelta,\n ],\n );\n\n // 会话 Context Value\n const sessionValue = useMemo(\n () => ({\n sessionList,\n sessionPagination,\n deleteSession,\n updateSession,\n setCurrentSession,\n }),\n [\n sessionList,\n sessionPagination,\n deleteSession,\n updateSession,\n setCurrentSession,\n ],\n );\n\n // Sender 输入框受控状态\n const [senderValue, setSenderValue] = useState(\"\");\n\n // Sender 专用状态 — 不包含 messages,避免轮询更新消息时导致 Sender 重渲染和焦点丢失\n const senderStateValue = useMemo(\n () => ({\n loading,\n uploadRequest,\n allowUpload,\n draggable,\n senderValue,\n setSenderValue,\n }),\n [loading, uploadRequest, allowUpload, draggable, senderValue],\n );\n\n return (\n <ConfigProvider\n theme={{\n token: {\n colorPrimary: appInfo?.appTheme || primaryBlue,\n },\n }}\n >\n <XProvider>\n <ChatStateContext.Provider value={chatStateValue}>\n <ChatActionContext.Provider value={chatActionValue}>\n <SessionContext.Provider value={sessionValue}>\n <ChatSenderStateContext.Provider value={senderStateValue}>\n <div\n style={\n {\n ...cssVarStyle,\n display: \"flex\",\n height: \"100%\",\n width: \"100%\",\n position: \"relative\",\n } as React.CSSProperties\n }\n >\n {children}\n </div>\n </ChatSenderStateContext.Provider>\n </SessionContext.Provider>\n </ChatActionContext.Provider>\n </ChatStateContext.Provider>\n </XProvider>\n </ConfigProvider>\n );\n },\n);\n\nXAdkProviderComponent.displayName = \"XAdkProvider\";\n\n// 导入 Compound Components\nimport Header from \"./compound/Header\";\nimport Sidebar from \"./compound/Sidebar\";\nimport Messages from \"./compound/Messages\";\nimport Sender from \"./compound/Sender\";\nimport Chatbot from \"./compound/Chatbot\";\nimport Welcome from \"./compound/Welcome\";\nimport DefaultLayout from \"./compound/DefaultLayout\";\n\n// 导出时会挂载 Compound Components\nconst XAdkProvider = XAdkProviderComponent as typeof XAdkProviderComponent & {\n Header: typeof Header;\n Sidebar: typeof Sidebar;\n Messages: typeof Messages;\n Sender: typeof Sender;\n Chatbot: typeof Chatbot;\n Welcome: typeof Welcome;\n DefaultLayout: typeof DefaultLayout;\n};\n\n// 挂载 Compound Components\nXAdkProvider.Header = Header;\nXAdkProvider.Sidebar = Sidebar;\nXAdkProvider.Messages = Messages;\nXAdkProvider.Sender = Sender;\nXAdkProvider.Chatbot = Chatbot;\nXAdkProvider.DefaultLayout = DefaultLayout;\nXAdkProvider.Welcome = Welcome;\n\nexport default XAdkProvider;\n"],"mappings":"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"}
@@ -5,6 +5,10 @@ export interface InlineTagInputRef {
5
5
  getText: () => string;
6
6
  getParts: () => XAdkSenderSubmitPart[];
7
7
  getCursorOffset: () => number;
8
+ deleteTextRange: (range: {
9
+ start: number;
10
+ end: number;
11
+ }) => void;
8
12
  insertMention: (mention: MentionTag, replace?: {
9
13
  start: number;
10
14
  end: number;
@@ -541,10 +541,23 @@ var InlineTagInput = /*#__PURE__*/forwardRef(function (_ref, ref) {
541
541
  getText: getPlainText,
542
542
  getParts: getParts,
543
543
  getCursorOffset: getOffsetInEditor,
544
+ deleteTextRange: function deleteTextRange(_ref2) {
545
+ var start = _ref2.start,
546
+ end = _ref2.end;
547
+ var range = replaceTextRange(start, end);
548
+ cleanupCaretTextNodes();
549
+ if (range) {
550
+ var selection = window.getSelection();
551
+ selection === null || selection === void 0 || selection.removeAllRanges();
552
+ selection === null || selection === void 0 || selection.addRange(range);
553
+ savedRangeRef.current = range.cloneRange();
554
+ }
555
+ emitChange();
556
+ },
544
557
  insertMention: insertMention,
545
558
  insertTag: insertMention
546
559
  };
547
- }, [getOffsetInEditor, getParts, getPlainText, insertMention]);
560
+ }, [cleanupCaretTextNodes, emitChange, getOffsetInEditor, getParts, getPlainText, insertMention, replaceTextRange]);
548
561
  useIsomorphicLayoutEffect(function () {
549
562
  var editor = editorRef.current;
550
563
  if (!editor) return;
@@ -555,7 +568,13 @@ var InlineTagInput = /*#__PURE__*/forwardRef(function (_ref, ref) {
555
568
  // emitChange 的受控回写要到下一次 render 才生效;跳过本轮紧随其后的空值清理,
556
569
  // 避免刚渲染的默认 Mention 被旧的空 value/mentions 立即移除。
557
570
  skipEmptyCleanupOnceRef.current = true;
571
+ latestMentionsRef.current = defaultInputParts.flatMap(function (part) {
572
+ if (part.type === "mention") return [part.mention];
573
+ if (part.type === "tag") return [part.tag];
574
+ return [];
575
+ });
558
576
  renderPartsToEditor(defaultInputParts);
577
+ setHasContent(true);
559
578
  emitChange();
560
579
  return;
561
580
  }
@@ -663,9 +682,9 @@ var InlineTagInput = /*#__PURE__*/forwardRef(function (_ref, ref) {
663
682
  if (event.key === "ArrowLeft" || event.key === "ArrowRight") {
664
683
  var selection = window.getSelection();
665
684
  if (selection !== null && selection !== void 0 && selection.rangeCount) {
666
- var range = selection.getRangeAt(0);
667
- if (range.collapsed) {
668
- var targetMention = event.key === "ArrowLeft" ? getMentionBeforeRange(range) : getMentionAfterRange(range);
685
+ var _range = selection.getRangeAt(0);
686
+ if (_range.collapsed) {
687
+ var targetMention = event.key === "ArrowLeft" ? getMentionBeforeRange(_range) : getMentionAfterRange(_range);
669
688
  if (targetMention) {
670
689
  event.preventDefault();
671
690
  moveCursorAroundMention(targetMention, event.key === "ArrowLeft" ? "before" : "after");
@@ -677,9 +696,9 @@ var InlineTagInput = /*#__PURE__*/forwardRef(function (_ref, ref) {
677
696
  if (event.key === "Backspace" || event.key === "Delete") {
678
697
  var _selection = window.getSelection();
679
698
  if (_selection !== null && _selection !== void 0 && _selection.rangeCount) {
680
- var _range = _selection.getRangeAt(0);
681
- if (_range.collapsed) {
682
- var _targetMention = event.key === "Backspace" ? getMentionBeforeRange(_range) : getMentionAfterRange(_range);
699
+ var _range2 = _selection.getRangeAt(0);
700
+ if (_range2.collapsed) {
701
+ var _targetMention = event.key === "Backspace" ? getMentionBeforeRange(_range2) : getMentionAfterRange(_range2);
683
702
  if (_targetMention) {
684
703
  event.preventDefault();
685
704
  removeMentionById(_targetMention.dataset.xadkInlineMentionId || "");
@@ -1 +1 @@
1
- {"version":3,"names":["React","forwardRef","useCallback","useEffect","useLayoutEffect","useImperativeHandle","useRef","useState","createRoot","useStyles","parseMarkdownResourceLinksAsParts","Fragment","_Fragment","jsx","_jsx","jsxs","_jsxs","MENTION_ATTR","CARET_TEXT","createTextNode","text","document","useIsomorphicLayoutEffect","window","normalizeText","replace","getPlainLength","length","toRawOffset","plainOffset","current","i","InlineTagInput","_ref","ref","value","mentions","defaultInputParts","placeholder","disabled","onChange","onMentionsChange","onKeyDown","onKeyUp","renderMention","styles","editorRef","latestMentionsRef","tagRootMapRef","WeakMap","composingRef","lastInsertedCaretRef","savedRangeRef","defaultInputPartsAppliedRef","skipEmptyCleanupOnceRef","structuralCleanupFrameRef","_useState","Boolean","_useState2","_slicedToArray","hasContent","setHasContent","lastEmittedStateRef","mentionIds","map","mention","id","join","getOrderedMentions","editor","mentionMap","Map","Array","from","querySelectorAll","concat","node","get","dataset","xadkInlineMentionId","filter","getPlainText","childNodes","forEach","nodeType","Node","TEXT_NODE","textContent","getParts","parts","push","type","HTMLElement","hasAttribute","mentionId","emitChange","nextValue","nextMentions","removeTextRange","start","end","slice","remove","removeMentionNode","_tagRootMapRef$curren","previous","previousSibling","next","nextSibling","unmount","_text$match","caretLength","match","_text$match2","spaceLength","removeMentionById","find","item","focus","buildMentionNode","span","createElement","setAttribute","xadkInlineMentionType","className","inlineTag","root","set","render","children","onRemove","label","displayName","close","innerHTML","onclick","event","preventDefault","stopPropagation","append","renderPartsToEditor","_tagRootMapRef$curren2","part","appendChild","tag","setCursorAtTextEnd","_node$textContent","range","createRange","selection","getSelection","setStart","collapse","removeAllRanges","addRange","cloneRange","saveSelectionRange","rangeCount","getRangeAt","contains","startContainer","endContainer","restoreCursorAfterInsert","isMentionNode","isOnlyCaretText","getMentionBeforeRange","container","beforeCursor","startOffset","getMentionAfterRange","afterCursor","moveCursorAroundMention","direction","_previous$textContent","setStartBefore","_match","leadingCaretLength","setStartAfter","getOffsetInEditor","offset","found","visit","getNodeIndex","index","replaceTextRange","insertRange","nodes","nodeStart","plainLength","nodeEnd","rawStart","Math","max","rawEnd","keepLeft","keepRight","parent","parentNode","nodeIndex","cleanupCaretTextNodes","cleanupEmptyStructuralNodes","querySelector","containsCursor","collapsed","caretNode","replaceWith","nextRange","handleNativeDelete","InputEvent","inputType","startsWith","cancelAnimationFrame","requestAnimationFrame","addEventListener","removeEventListener","insertMention","selectionBeforeFocus","activeRangeBeforeFocus","savedRangeBeforeFocus","rangeBeforeFocus","_toConsumableArray","isSemanticallyEmpty","mentionNode","fragment","createDocumentFragment","insertNode","_editorRef$current","getText","getCursorOffset","insertTag","incomingMentionIds","lastEmittedState","isInternalControlledEcho","lastTextNode","reverse","activeElement","_tagRootMapRef$curren3","handleInput","handlePaste","clipboardData","getData","_iterator","_createForOfIteratorHelper","_step","s","n","done","err","e","f","deleteContents","handleKeyDown","key","targetMention","showPlaceholder","inlineInputWrapper","inlinePlaceholder","inlineInput","contentEditable","suppressContentEditableWarning","role","onInput","onPaste","onMouseUp","onFocus","onCompositionStart","onCompositionEnd"],"sources":["../../../../src/components/XAdkSender/InlineTagInput.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useCallback,\n useEffect,\n useLayoutEffect,\n useImperativeHandle,\n useRef,\n useState,\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\";\nimport { parseMarkdownResourceLinksAsParts } from \"@/utils/markdownResource\";\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: (\n mention: MentionTag,\n replace?: { start: number; end: number },\n ) => 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?: (\n mention: MentionTag,\n info: InlineTagRenderInfo,\n ) => 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\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 skipEmptyCleanupOnceRef = useRef(false);\n const structuralCleanupFrameRef = useRef<number | null>(null);\n const [hasContent, setHasContent] = useState(() =>\n Boolean(value || mentions.length),\n );\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(\n (node as HTMLElement).dataset.xadkInlineMentionId || \"\",\n ),\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 setHasContent(Boolean(nextValue || nextMentions.length));\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(\n (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 );\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(\n previous as Text,\n text.length - spaceLength,\n text.length,\n );\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.dataset.xadkInlineMentionType = mention.type;\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 (\n !editor.contains(range.startContainer) ||\n !editor.contains(range.endContainer)\n ) {\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 (\n isOnlyCaretText(beforeCursor) &&\n isMentionNode(container.previousSibling)\n ) {\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 (\n isOnlyCaretText(afterCursor) &&\n isMentionNode(container.nextSibling)\n ) {\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 const moveCursorAroundMention = useCallback(\n (mention: HTMLElement, direction: \"before\" | \"after\") => {\n const editor = editorRef.current;\n const selection = window.getSelection();\n if (!editor || !selection || !editor.contains(mention)) return;\n\n const range = document.createRange();\n if (direction === \"before\") {\n const previous = mention.previousSibling;\n if (previous?.nodeType === Node.TEXT_NODE) {\n range.setStart(previous, previous.textContent?.length || 0);\n } else {\n range.setStartBefore(mention);\n }\n } else {\n const next = mention.nextSibling;\n if (next?.nodeType === Node.TEXT_NODE) {\n const leadingCaretLength =\n (next.textContent || \"\").match(/^\\u200B+/)?.[0].length || 0;\n range.setStart(next, leadingCaretLength);\n } else {\n range.setStartAfter(mention);\n }\n }\n\n range.collapse(true);\n selection.removeAllRanges();\n selection.addRange(range);\n savedRangeRef.current = range.cloneRange();\n },\n [],\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))\n 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 // Chrome 会把标签前临时输入的文字包进块级节点;文字被删空后,可能留下\n // <div><br></div>。它没有消息语义,却会在 contenteditable 中占据一整行。\n const cleanupEmptyStructuralNodes = useCallback(() => {\n const editor = editorRef.current;\n const selection = window.getSelection();\n if (!editor) return;\n\n Array.from(editor.children).forEach((node) => {\n if (node.hasAttribute(MENTION_ATTR)) return;\n if (node.querySelector(`[${MENTION_ATTR}]`)) return;\n if (normalizeText(node.textContent || \"\")) return;\n\n const range = selection?.rangeCount ? selection.getRangeAt(0) : null;\n const nodeIndex = getNodeIndex(node);\n const containsCursor = Boolean(\n range &&\n range.collapsed &&\n (range.startContainer === node ||\n node.contains(range.startContainer) ||\n (range.startContainer === editor &&\n (range.startOffset === nodeIndex ||\n range.startOffset === nodeIndex + 1))),\n );\n\n if (containsCursor && selection) {\n // 光标紧邻 contenteditable=false 的 Mention 时,单纯删除 <br> 会让 Chrome\n // 再次生成它。替换成零宽文本锚点,既能承接光标,也不会增加行高。\n const caretNode = createTextNode(CARET_TEXT);\n node.replaceWith(caretNode);\n const nextRange = document.createRange();\n nextRange.setStart(caretNode, CARET_TEXT.length);\n nextRange.collapse(true);\n selection.removeAllRanges();\n selection.addRange(nextRange);\n savedRangeRef.current = nextRange.cloneRange();\n return;\n }\n\n node.remove();\n });\n }, []);\n\n useEffect(() => {\n const editor = editorRef.current;\n if (!editor) return;\n\n // 某些业务容器会截断 React 委托事件;直接监听编辑器的原生 input,确保删除事务结束后\n // 仍能清理 Chrome 在不可编辑 Mention 前生成的占行 <br>。仅处理 delete*,不影响 Enter 换行。\n const handleNativeDelete = (event: Event) => {\n if (!(event instanceof InputEvent)) return;\n if (!event.inputType.startsWith(\"delete\")) return;\n if (structuralCleanupFrameRef.current !== null) {\n window.cancelAnimationFrame(structuralCleanupFrameRef.current);\n }\n structuralCleanupFrameRef.current = window.requestAnimationFrame(() => {\n structuralCleanupFrameRef.current = null;\n cleanupEmptyStructuralNodes();\n cleanupCaretTextNodes();\n });\n };\n\n editor.addEventListener(\"input\", handleNativeDelete);\n return () => editor.removeEventListener(\"input\", handleNativeDelete);\n }, [cleanupCaretTextNodes, cleanupEmptyStructuralNodes]);\n\n const insertMention = useCallback(\n (mention: MentionTag, replace?: { start: number; end: number }) => {\n const editor = editorRef.current;\n if (!editor) return;\n // 工具栏/弹窗会先抢走焦点;必须在 focus 之前保存当前 Selection,\n // 否则浏览器新建在输入框开头的 Range 会覆盖最后一次真实光标位置。\n const selectionBeforeFocus = window.getSelection();\n const activeRangeBeforeFocus =\n selectionBeforeFocus?.rangeCount &&\n editor.contains(selectionBeforeFocus.getRangeAt(0).startContainer)\n ? selectionBeforeFocus.getRangeAt(0).cloneRange()\n : null;\n const savedRangeBeforeFocus =\n savedRangeRef.current &&\n editor.contains(savedRangeRef.current.startContainer)\n ? savedRangeRef.current.cloneRange()\n : null;\n const rangeBeforeFocus =\n activeRangeBeforeFocus || savedRangeBeforeFocus;\n\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 // 浏览器会在空 contenteditable 中生成 <div><br> 等占位块。\n // 空编辑器插入首个 Mention 前先清掉这些无语义节点,避免标签被放进第二个视觉行。\n const isSemanticallyEmpty =\n !getPlainText() && !editor.querySelector(`[${MENTION_ATTR}]`);\n if (isSemanticallyEmpty) {\n editor.innerHTML = \"\";\n savedRangeRef.current = null;\n insertRange = null;\n }\n const mentionNode = buildMentionNode(mention);\n const caretNode = createTextNode(CARET_TEXT);\n const range = insertRange || rangeBeforeFocus;\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 getPlainText,\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 useEffect(\n () => () => {\n if (structuralCleanupFrameRef.current !== null) {\n window.cancelAnimationFrame(structuralCleanupFrameRef.current);\n }\n },\n [],\n );\n\n useImperativeHandle(\n ref,\n () => ({\n focus: () => editorRef.current?.focus(),\n getText: getPlainText,\n getParts,\n getCursorOffset: getOffsetInEditor,\n insertMention,\n insertTag: insertMention,\n }),\n [getOffsetInEditor, getParts, getPlainText, insertMention],\n );\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 // emitChange 的受控回写要到下一次 render 才生效;跳过本轮紧随其后的空值清理,\n // 避免刚渲染的默认 Mention 被旧的空 value/mentions 立即移除。\n skipEmptyCleanupOnceRef.current = true;\n renderPartsToEditor(defaultInputParts);\n emitChange();\n return;\n }\n\n const incomingMentionIds = mentions\n .map((mention) => mention.id)\n .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 setHasContent(Boolean(value || mentions.length));\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 (skipEmptyCleanupOnceRef.current) {\n skipEmptyCleanupOnceRef.current = false;\n return;\n }\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) {\n cleanupEmptyStructuralNodes();\n cleanupCaretTextNodes();\n emitChange();\n\n // Chrome 可能在 input 回调返回后才补上用于承接光标的 <br>;下一帧再归一化一次。\n if (structuralCleanupFrameRef.current !== null) {\n window.cancelAnimationFrame(structuralCleanupFrameRef.current);\n }\n structuralCleanupFrameRef.current = window.requestAnimationFrame(() => {\n structuralCleanupFrameRef.current = null;\n cleanupEmptyStructuralNodes();\n cleanupCaretTextNodes();\n });\n }\n };\n\n const handlePaste: React.ClipboardEventHandler<HTMLDivElement> = (\n event,\n ) => {\n event.preventDefault();\n const editor = editorRef.current;\n if (!editor) return;\n\n // 始终按 text/plain 粘贴,避免消息气泡的背景色等 HTML 样式进入 contenteditable。\n const text = event.clipboardData.getData(\"text/plain\");\n if (!text) return;\n const parts = parseMarkdownResourceLinksAsParts(text);\n const selection = window.getSelection();\n const range =\n selection?.rangeCount &&\n editor.contains(selection.getRangeAt(0).startContainer)\n ? selection.getRangeAt(0)\n : null;\n const fragment = document.createDocumentFragment();\n let lastTextNode: Text | null = null;\n\n for (const part of parts) {\n if (part.type === \"text\") {\n lastTextNode = createTextNode(part.text);\n fragment.append(lastTextNode);\n continue;\n }\n latestMentionsRef.current = [\n ...latestMentionsRef.current,\n part.mention,\n ];\n fragment.append(buildMentionNode(part.mention));\n lastTextNode = createTextNode(CARET_TEXT);\n fragment.append(lastTextNode);\n }\n\n if (range) {\n range.deleteContents();\n range.insertNode(fragment);\n } else {\n editor.append(fragment);\n }\n cleanupCaretTextNodes();\n if (lastTextNode) setCursorAtTextEnd(lastTextNode);\n emitChange();\n };\n\n const handleKeyDown: React.KeyboardEventHandler<HTMLDivElement> = (\n event,\n ) => {\n if (event.key === \"ArrowLeft\" || event.key === \"ArrowRight\") {\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 === \"ArrowLeft\"\n ? getMentionBeforeRange(range)\n : getMentionAfterRange(range);\n\n if (targetMention) {\n event.preventDefault();\n moveCursorAroundMention(\n targetMention,\n event.key === \"ArrowLeft\" ? \"before\" : \"after\",\n );\n return;\n }\n }\n }\n }\n\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(\n targetMention.dataset.xadkInlineMentionId || \"\",\n );\n return;\n }\n }\n }\n }\n onKeyDown?.(event);\n };\n\n // placeholder 只由受控 value/mentions 派生,避免从 contenteditable DOM 读取导致外部插入 Mention 后状态滞后一帧。\n const showPlaceholder = !hasContent;\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 onPaste={handlePaste}\n onKeyDown={handleKeyDown}\n onKeyUp={(event) => {\n cleanupEmptyStructuralNodes();\n cleanupCaretTextNodes();\n saveSelectionRange();\n onKeyUp?.(event);\n }}\n onMouseUp={saveSelectionRange}\n onFocus={saveSelectionRange}\n onCompositionStart={() => {\n composingRef.current = true;\n // 中文 IME 在 compositionend 前不会触发受控 value 更新;候选输入一出现就应隐藏 placeholder。\n setHasContent(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"],"mappings":"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"}
1
+ {"version":3,"names":["React","forwardRef","useCallback","useEffect","useLayoutEffect","useImperativeHandle","useRef","useState","createRoot","useStyles","parseMarkdownResourceLinksAsParts","Fragment","_Fragment","jsx","_jsx","jsxs","_jsxs","MENTION_ATTR","CARET_TEXT","createTextNode","text","document","useIsomorphicLayoutEffect","window","normalizeText","replace","getPlainLength","length","toRawOffset","plainOffset","current","i","InlineTagInput","_ref","ref","value","mentions","defaultInputParts","placeholder","disabled","onChange","onMentionsChange","onKeyDown","onKeyUp","renderMention","styles","editorRef","latestMentionsRef","tagRootMapRef","WeakMap","composingRef","lastInsertedCaretRef","savedRangeRef","defaultInputPartsAppliedRef","skipEmptyCleanupOnceRef","structuralCleanupFrameRef","_useState","Boolean","_useState2","_slicedToArray","hasContent","setHasContent","lastEmittedStateRef","mentionIds","map","mention","id","join","getOrderedMentions","editor","mentionMap","Map","Array","from","querySelectorAll","concat","node","get","dataset","xadkInlineMentionId","filter","getPlainText","childNodes","forEach","nodeType","Node","TEXT_NODE","textContent","getParts","parts","push","type","HTMLElement","hasAttribute","mentionId","emitChange","nextValue","nextMentions","removeTextRange","start","end","slice","remove","removeMentionNode","_tagRootMapRef$curren","previous","previousSibling","next","nextSibling","unmount","_text$match","caretLength","match","_text$match2","spaceLength","removeMentionById","find","item","focus","buildMentionNode","span","createElement","setAttribute","xadkInlineMentionType","className","inlineTag","root","set","render","children","onRemove","label","displayName","close","innerHTML","onclick","event","preventDefault","stopPropagation","append","renderPartsToEditor","_tagRootMapRef$curren2","part","appendChild","tag","setCursorAtTextEnd","_node$textContent","range","createRange","selection","getSelection","setStart","collapse","removeAllRanges","addRange","cloneRange","saveSelectionRange","rangeCount","getRangeAt","contains","startContainer","endContainer","restoreCursorAfterInsert","isMentionNode","isOnlyCaretText","getMentionBeforeRange","container","beforeCursor","startOffset","getMentionAfterRange","afterCursor","moveCursorAroundMention","direction","_previous$textContent","setStartBefore","_match","leadingCaretLength","setStartAfter","getOffsetInEditor","offset","found","visit","getNodeIndex","index","replaceTextRange","insertRange","nodes","nodeStart","plainLength","nodeEnd","rawStart","Math","max","rawEnd","keepLeft","keepRight","parent","parentNode","nodeIndex","cleanupCaretTextNodes","cleanupEmptyStructuralNodes","querySelector","containsCursor","collapsed","caretNode","replaceWith","nextRange","handleNativeDelete","InputEvent","inputType","startsWith","cancelAnimationFrame","requestAnimationFrame","addEventListener","removeEventListener","insertMention","selectionBeforeFocus","activeRangeBeforeFocus","savedRangeBeforeFocus","rangeBeforeFocus","_toConsumableArray","isSemanticallyEmpty","mentionNode","fragment","createDocumentFragment","insertNode","_editorRef$current","getText","getCursorOffset","deleteTextRange","_ref2","insertTag","flatMap","incomingMentionIds","lastEmittedState","isInternalControlledEcho","lastTextNode","reverse","activeElement","_tagRootMapRef$curren3","handleInput","handlePaste","clipboardData","getData","_iterator","_createForOfIteratorHelper","_step","s","n","done","err","e","f","deleteContents","handleKeyDown","key","targetMention","showPlaceholder","inlineInputWrapper","inlinePlaceholder","inlineInput","contentEditable","suppressContentEditableWarning","role","onInput","onPaste","onMouseUp","onFocus","onCompositionStart","onCompositionEnd"],"sources":["../../../../src/components/XAdkSender/InlineTagInput.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useCallback,\n useEffect,\n useLayoutEffect,\n useImperativeHandle,\n useRef,\n useState,\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\";\nimport { parseMarkdownResourceLinksAsParts } from \"@/utils/markdownResource\";\n\nexport interface InlineTagInputRef {\n focus: () => void;\n getText: () => string;\n getParts: () => XAdkSenderSubmitPart[];\n getCursorOffset: () => number;\n deleteTextRange: (range: { start: number; end: number }) => void;\n insertMention: (\n mention: MentionTag,\n replace?: { start: number; end: number },\n ) => void;\n /** @deprecated 请使用 insertMention。 */\n insertTag: (\n mention: MentionTag,\n replace?: { start: number; end: number },\n ) => 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?: (\n mention: MentionTag,\n info: InlineTagRenderInfo,\n ) => 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\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 skipEmptyCleanupOnceRef = useRef(false);\n const structuralCleanupFrameRef = useRef<number | null>(null);\n const [hasContent, setHasContent] = useState(() =>\n Boolean(value || mentions.length),\n );\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(\n (node as HTMLElement).dataset.xadkInlineMentionId || \"\",\n ),\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 setHasContent(Boolean(nextValue || nextMentions.length));\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(\n (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 );\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(\n previous as Text,\n text.length - spaceLength,\n text.length,\n );\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.dataset.xadkInlineMentionType = mention.type;\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 (\n !editor.contains(range.startContainer) ||\n !editor.contains(range.endContainer)\n ) {\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 (\n isOnlyCaretText(beforeCursor) &&\n isMentionNode(container.previousSibling)\n ) {\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 (\n isOnlyCaretText(afterCursor) &&\n isMentionNode(container.nextSibling)\n ) {\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 const moveCursorAroundMention = useCallback(\n (mention: HTMLElement, direction: \"before\" | \"after\") => {\n const editor = editorRef.current;\n const selection = window.getSelection();\n if (!editor || !selection || !editor.contains(mention)) return;\n\n const range = document.createRange();\n if (direction === \"before\") {\n const previous = mention.previousSibling;\n if (previous?.nodeType === Node.TEXT_NODE) {\n range.setStart(previous, previous.textContent?.length || 0);\n } else {\n range.setStartBefore(mention);\n }\n } else {\n const next = mention.nextSibling;\n if (next?.nodeType === Node.TEXT_NODE) {\n const leadingCaretLength =\n (next.textContent || \"\").match(/^\\u200B+/)?.[0].length || 0;\n range.setStart(next, leadingCaretLength);\n } else {\n range.setStartAfter(mention);\n }\n }\n\n range.collapse(true);\n selection.removeAllRanges();\n selection.addRange(range);\n savedRangeRef.current = range.cloneRange();\n },\n [],\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))\n 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): Range | null => {\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 // Chrome 会把标签前临时输入的文字包进块级节点;文字被删空后,可能留下\n // <div><br></div>。它没有消息语义,却会在 contenteditable 中占据一整行。\n const cleanupEmptyStructuralNodes = useCallback(() => {\n const editor = editorRef.current;\n const selection = window.getSelection();\n if (!editor) return;\n\n Array.from(editor.children).forEach((node) => {\n if (node.hasAttribute(MENTION_ATTR)) return;\n if (node.querySelector(`[${MENTION_ATTR}]`)) return;\n if (normalizeText(node.textContent || \"\")) return;\n\n const range = selection?.rangeCount ? selection.getRangeAt(0) : null;\n const nodeIndex = getNodeIndex(node);\n const containsCursor = Boolean(\n range &&\n range.collapsed &&\n (range.startContainer === node ||\n node.contains(range.startContainer) ||\n (range.startContainer === editor &&\n (range.startOffset === nodeIndex ||\n range.startOffset === nodeIndex + 1))),\n );\n\n if (containsCursor && selection) {\n // 光标紧邻 contenteditable=false 的 Mention 时,单纯删除 <br> 会让 Chrome\n // 再次生成它。替换成零宽文本锚点,既能承接光标,也不会增加行高。\n const caretNode = createTextNode(CARET_TEXT);\n node.replaceWith(caretNode);\n const nextRange = document.createRange();\n nextRange.setStart(caretNode, CARET_TEXT.length);\n nextRange.collapse(true);\n selection.removeAllRanges();\n selection.addRange(nextRange);\n savedRangeRef.current = nextRange.cloneRange();\n return;\n }\n\n node.remove();\n });\n }, []);\n\n useEffect(() => {\n const editor = editorRef.current;\n if (!editor) return;\n\n // 某些业务容器会截断 React 委托事件;直接监听编辑器的原生 input,确保删除事务结束后\n // 仍能清理 Chrome 在不可编辑 Mention 前生成的占行 <br>。仅处理 delete*,不影响 Enter 换行。\n const handleNativeDelete = (event: Event) => {\n if (!(event instanceof InputEvent)) return;\n if (!event.inputType.startsWith(\"delete\")) return;\n if (structuralCleanupFrameRef.current !== null) {\n window.cancelAnimationFrame(structuralCleanupFrameRef.current);\n }\n structuralCleanupFrameRef.current = window.requestAnimationFrame(() => {\n structuralCleanupFrameRef.current = null;\n cleanupEmptyStructuralNodes();\n cleanupCaretTextNodes();\n });\n };\n\n editor.addEventListener(\"input\", handleNativeDelete);\n return () => editor.removeEventListener(\"input\", handleNativeDelete);\n }, [cleanupCaretTextNodes, cleanupEmptyStructuralNodes]);\n\n const insertMention = useCallback(\n (mention: MentionTag, replace?: { start: number; end: number }) => {\n const editor = editorRef.current;\n if (!editor) return;\n // 工具栏/弹窗会先抢走焦点;必须在 focus 之前保存当前 Selection,\n // 否则浏览器新建在输入框开头的 Range 会覆盖最后一次真实光标位置。\n const selectionBeforeFocus = window.getSelection();\n const activeRangeBeforeFocus =\n selectionBeforeFocus?.rangeCount &&\n editor.contains(selectionBeforeFocus.getRangeAt(0).startContainer)\n ? selectionBeforeFocus.getRangeAt(0).cloneRange()\n : null;\n const savedRangeBeforeFocus =\n savedRangeRef.current &&\n editor.contains(savedRangeRef.current.startContainer)\n ? savedRangeRef.current.cloneRange()\n : null;\n const rangeBeforeFocus =\n activeRangeBeforeFocus || savedRangeBeforeFocus;\n\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 // 浏览器会在空 contenteditable 中生成 <div><br> 等占位块。\n // 空编辑器插入首个 Mention 前先清掉这些无语义节点,避免标签被放进第二个视觉行。\n const isSemanticallyEmpty =\n !getPlainText() && !editor.querySelector(`[${MENTION_ATTR}]`);\n if (isSemanticallyEmpty) {\n editor.innerHTML = \"\";\n savedRangeRef.current = null;\n insertRange = null;\n }\n const mentionNode = buildMentionNode(mention);\n const caretNode = createTextNode(CARET_TEXT);\n const range = insertRange || rangeBeforeFocus;\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 getPlainText,\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 useEffect(\n () => () => {\n if (structuralCleanupFrameRef.current !== null) {\n window.cancelAnimationFrame(structuralCleanupFrameRef.current);\n }\n },\n [],\n );\n\n useImperativeHandle(\n ref,\n () => ({\n focus: () => editorRef.current?.focus(),\n getText: getPlainText,\n getParts,\n getCursorOffset: getOffsetInEditor,\n deleteTextRange: ({ start, end }) => {\n const range = replaceTextRange(start, end);\n cleanupCaretTextNodes();\n if (range) {\n const selection = window.getSelection();\n selection?.removeAllRanges();\n selection?.addRange(range);\n savedRangeRef.current = range.cloneRange();\n }\n emitChange();\n },\n insertMention,\n insertTag: insertMention,\n }),\n [\n cleanupCaretTextNodes,\n emitChange,\n getOffsetInEditor,\n getParts,\n getPlainText,\n insertMention,\n replaceTextRange,\n ],\n );\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 // emitChange 的受控回写要到下一次 render 才生效;跳过本轮紧随其后的空值清理,\n // 避免刚渲染的默认 Mention 被旧的空 value/mentions 立即移除。\n skipEmptyCleanupOnceRef.current = true;\n latestMentionsRef.current = defaultInputParts.flatMap((part) => {\n if (part.type === \"mention\") return [part.mention];\n if (part.type === \"tag\") return [part.tag];\n return [];\n });\n renderPartsToEditor(defaultInputParts);\n setHasContent(true);\n emitChange();\n return;\n }\n\n const incomingMentionIds = mentions\n .map((mention) => mention.id)\n .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 setHasContent(Boolean(value || mentions.length));\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 (skipEmptyCleanupOnceRef.current) {\n skipEmptyCleanupOnceRef.current = false;\n return;\n }\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) {\n cleanupEmptyStructuralNodes();\n cleanupCaretTextNodes();\n emitChange();\n\n // Chrome 可能在 input 回调返回后才补上用于承接光标的 <br>;下一帧再归一化一次。\n if (structuralCleanupFrameRef.current !== null) {\n window.cancelAnimationFrame(structuralCleanupFrameRef.current);\n }\n structuralCleanupFrameRef.current = window.requestAnimationFrame(() => {\n structuralCleanupFrameRef.current = null;\n cleanupEmptyStructuralNodes();\n cleanupCaretTextNodes();\n });\n }\n };\n\n const handlePaste: React.ClipboardEventHandler<HTMLDivElement> = (\n event,\n ) => {\n event.preventDefault();\n const editor = editorRef.current;\n if (!editor) return;\n\n // 始终按 text/plain 粘贴,避免消息气泡的背景色等 HTML 样式进入 contenteditable。\n const text = event.clipboardData.getData(\"text/plain\");\n if (!text) return;\n const parts = parseMarkdownResourceLinksAsParts(text);\n const selection = window.getSelection();\n const range =\n selection?.rangeCount &&\n editor.contains(selection.getRangeAt(0).startContainer)\n ? selection.getRangeAt(0)\n : null;\n const fragment = document.createDocumentFragment();\n let lastTextNode: Text | null = null;\n\n for (const part of parts) {\n if (part.type === \"text\") {\n lastTextNode = createTextNode(part.text);\n fragment.append(lastTextNode);\n continue;\n }\n latestMentionsRef.current = [\n ...latestMentionsRef.current,\n part.mention,\n ];\n fragment.append(buildMentionNode(part.mention));\n lastTextNode = createTextNode(CARET_TEXT);\n fragment.append(lastTextNode);\n }\n\n if (range) {\n range.deleteContents();\n range.insertNode(fragment);\n } else {\n editor.append(fragment);\n }\n cleanupCaretTextNodes();\n if (lastTextNode) setCursorAtTextEnd(lastTextNode);\n emitChange();\n };\n\n const handleKeyDown: React.KeyboardEventHandler<HTMLDivElement> = (\n event,\n ) => {\n if (event.key === \"ArrowLeft\" || event.key === \"ArrowRight\") {\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 === \"ArrowLeft\"\n ? getMentionBeforeRange(range)\n : getMentionAfterRange(range);\n\n if (targetMention) {\n event.preventDefault();\n moveCursorAroundMention(\n targetMention,\n event.key === \"ArrowLeft\" ? \"before\" : \"after\",\n );\n return;\n }\n }\n }\n }\n\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(\n targetMention.dataset.xadkInlineMentionId || \"\",\n );\n return;\n }\n }\n }\n }\n onKeyDown?.(event);\n };\n\n // placeholder 只由受控 value/mentions 派生,避免从 contenteditable DOM 读取导致外部插入 Mention 后状态滞后一帧。\n const showPlaceholder = !hasContent;\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 onPaste={handlePaste}\n onKeyDown={handleKeyDown}\n onKeyUp={(event) => {\n cleanupEmptyStructuralNodes();\n cleanupCaretTextNodes();\n saveSelectionRange();\n onKeyUp?.(event);\n }}\n onMouseUp={saveSelectionRange}\n onFocus={saveSelectionRange}\n onCompositionStart={() => {\n composingRef.current = true;\n // 中文 IME 在 compositionend 前不会触发受控 value 更新;候选输入一出现就应隐藏 placeholder。\n setHasContent(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"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import React from "react";
2
2
  import type { QuickListOption, QuickKeyConfig } from "../../types";
3
- export interface QuickListProps {
3
+ interface InputSuggestionListProps {
4
4
  /** 当前触发的快捷键配置 */
5
5
  config: QuickKeyConfig;
6
6
  /** 当前键盘选中的选项下标 */
@@ -12,5 +12,6 @@ export interface QuickListProps {
12
12
  /** 是否可见 */
13
13
  visible: boolean;
14
14
  }
15
- declare const QuickList: React.FC<QuickListProps>;
16
- export default QuickList;
15
+ /** XAdkSender 内部的输入建议列表,不承载具体业务语义。 */
16
+ declare const InputSuggestionList: React.FC<InputSuggestionListProps>;
17
+ export default InputSuggestionList;