@ai-group/chat-sdk 3.7.1-alpha5 → 3.7.1-alpha8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.d.ts +11 -1
- package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.js +144 -14
- package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.js.map +2 -2
- package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/styles.js +44 -0
- package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/styles.js.map +2 -2
- package/dist/cjs/components/XAdkChatbot/index.d.ts +2 -2
- package/dist/cjs/components/XAdkChatbot/index.js +43 -13
- package/dist/cjs/components/XAdkChatbot/index.js.map +2 -2
- package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.d.ts +7 -2
- package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.js +68 -17
- package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.js.map +2 -2
- package/dist/cjs/components/XAdkProvider/compound/Sender.d.ts +2 -1
- package/dist/cjs/components/XAdkProvider/compound/Sender.js.map +2 -2
- package/dist/cjs/components/XAdkProvider/compound/styles.d.ts +1 -0
- package/dist/cjs/components/XAdkProvider/compound/styles.js +16 -0
- package/dist/cjs/components/XAdkProvider/compound/styles.js.map +2 -2
- package/dist/cjs/components/XAdkProvider/context/ChatSenderStateContext.d.ts +4 -0
- package/dist/cjs/components/XAdkProvider/context/ChatSenderStateContext.js.map +2 -2
- package/dist/cjs/components/XAdkProvider/index.js +9 -8
- package/dist/cjs/components/XAdkProvider/index.js.map +2 -2
- package/dist/cjs/components/XAdkSender/InlineTagInput.js +223 -24
- package/dist/cjs/components/XAdkSender/InlineTagInput.js.map +2 -2
- package/dist/cjs/components/XAdkSender/InputTags.js.map +2 -2
- package/dist/cjs/components/XAdkSender/index.js +21 -55
- package/dist/cjs/components/XAdkSender/index.js.map +2 -2
- package/dist/cjs/components/XAdkSender/styles.js +13 -0
- package/dist/cjs/components/XAdkSender/styles.js.map +2 -2
- package/dist/cjs/hooks/useADKChat.js +5 -1
- package/dist/cjs/hooks/useADKChat.js.map +2 -2
- package/dist/cjs/index.d.ts +4 -3
- package/dist/cjs/index.js +14 -0
- package/dist/cjs/index.js.map +2 -2
- package/dist/cjs/presets/xgroup/index.d.ts +1 -0
- package/dist/cjs/presets/xgroup/index.js +2 -0
- package/dist/cjs/presets/xgroup/index.js.map +2 -2
- package/dist/cjs/presets/xgroup/knowledgeReference.d.ts +17 -0
- package/dist/cjs/presets/xgroup/knowledgeReference.js +160 -0
- package/dist/cjs/presets/xgroup/knowledgeReference.js.map +7 -0
- package/dist/cjs/presets/xgroup/preset.d.ts +3 -1
- package/dist/cjs/presets/xgroup/preset.js +17 -0
- package/dist/cjs/presets/xgroup/preset.js.map +2 -2
- package/dist/cjs/presets/xgroup/strategies.d.ts +1 -1
- package/dist/cjs/presets/xgroup/strategies.js +3 -5
- package/dist/cjs/presets/xgroup/strategies.js.map +2 -2
- package/dist/cjs/types/ChatStrategies.d.ts +3 -1
- package/dist/cjs/types/ChatStrategies.js.map +1 -1
- package/dist/cjs/types/XAdkChatbot.d.ts +18 -0
- package/dist/cjs/types/XAdkChatbot.js.map +1 -1
- package/dist/cjs/types/XAdkSender.d.ts +10 -3
- package/dist/cjs/types/XAdkSender.js.map +1 -1
- package/dist/cjs/utils/markdownResource.d.ts +5 -2
- package/dist/cjs/utils/markdownResource.js +57 -5
- package/dist/cjs/utils/markdownResource.js.map +2 -2
- package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.d.ts +11 -1
- package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.js +147 -25
- package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.js.map +1 -1
- package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.js +2 -2
- package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.js.map +1 -1
- package/dist/esm/components/XAdkChatbot/index.d.ts +2 -2
- package/dist/esm/components/XAdkChatbot/index.js +36 -10
- package/dist/esm/components/XAdkChatbot/index.js.map +1 -1
- package/dist/esm/components/XAdkProvider/compound/DefaultLayout.d.ts +7 -2
- package/dist/esm/components/XAdkProvider/compound/DefaultLayout.js +64 -16
- package/dist/esm/components/XAdkProvider/compound/DefaultLayout.js.map +1 -1
- package/dist/esm/components/XAdkProvider/compound/Sender.d.ts +2 -1
- package/dist/esm/components/XAdkProvider/compound/Sender.js +2 -1
- package/dist/esm/components/XAdkProvider/compound/Sender.js.map +1 -1
- package/dist/esm/components/XAdkProvider/compound/styles.d.ts +1 -0
- package/dist/esm/components/XAdkProvider/compound/styles.js +3 -2
- package/dist/esm/components/XAdkProvider/compound/styles.js.map +1 -1
- package/dist/esm/components/XAdkProvider/context/ChatSenderStateContext.d.ts +4 -0
- package/dist/esm/components/XAdkProvider/context/ChatSenderStateContext.js.map +1 -1
- package/dist/esm/components/XAdkProvider/index.js +6 -2
- package/dist/esm/components/XAdkProvider/index.js.map +1 -1
- package/dist/esm/components/XAdkSender/InlineTagInput.js +209 -10
- package/dist/esm/components/XAdkSender/InlineTagInput.js.map +1 -1
- package/dist/esm/components/XAdkSender/InputTags.js +1 -0
- package/dist/esm/components/XAdkSender/InputTags.js.map +1 -1
- package/dist/esm/components/XAdkSender/index.js +25 -58
- package/dist/esm/components/XAdkSender/index.js.map +1 -1
- package/dist/esm/components/XAdkSender/styles.js +1 -1
- package/dist/esm/components/XAdkSender/styles.js.map +1 -1
- package/dist/esm/hooks/useADKChat.js +8 -2
- package/dist/esm/hooks/useADKChat.js.map +1 -1
- package/dist/esm/index.d.ts +4 -3
- package/dist/esm/index.js +3 -4
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/presets/xgroup/index.d.ts +1 -0
- package/dist/esm/presets/xgroup/index.js +1 -0
- package/dist/esm/presets/xgroup/index.js.map +1 -1
- package/dist/esm/presets/xgroup/knowledgeReference.d.ts +17 -0
- package/dist/esm/presets/xgroup/knowledgeReference.js +94 -0
- package/dist/esm/presets/xgroup/knowledgeReference.js.map +1 -0
- package/dist/esm/presets/xgroup/preset.d.ts +3 -1
- package/dist/esm/presets/xgroup/preset.js +15 -0
- package/dist/esm/presets/xgroup/preset.js.map +1 -1
- package/dist/esm/presets/xgroup/strategies.d.ts +1 -1
- package/dist/esm/presets/xgroup/strategies.js +3 -3
- package/dist/esm/presets/xgroup/strategies.js.map +1 -1
- package/dist/esm/types/ChatStrategies.d.ts +3 -1
- package/dist/esm/types/ChatStrategies.js.map +1 -1
- package/dist/esm/types/XAdkChatbot.d.ts +18 -0
- package/dist/esm/types/XAdkChatbot.js.map +1 -1
- package/dist/esm/types/XAdkSender.d.ts +10 -3
- package/dist/esm/types/XAdkSender.js.map +1 -1
- package/dist/esm/utils/markdownResource.d.ts +5 -2
- package/dist/esm/utils/markdownResource.js +66 -1
- package/dist/esm/utils/markdownResource.js.map +1 -1
- package/dist/umd/chat-sdk.min.js +1 -1
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/components/XAdkProvider/index.tsx"],
|
|
4
|
-
"sourcesContent": ["import React, {
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,
|
|
4
|
+
"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"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["useADKChat", "Header", "Sidebar", "Messages", "Sender", "Chatbot", "DefaultLayout", "Welcome"]
|
|
7
7
|
}
|
|
@@ -25,6 +25,7 @@ module.exports = __toCommonJS(InlineTagInput_exports);
|
|
|
25
25
|
var import_react = require("react");
|
|
26
26
|
var import_client = require("react-dom/client");
|
|
27
27
|
var import_styles = require("./styles");
|
|
28
|
+
var import_markdownResource = require("../../utils/markdownResource");
|
|
28
29
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
29
30
|
var MENTION_ATTR = "data-xadk-inline-mention-id";
|
|
30
31
|
var CARET_TEXT = "";
|
|
@@ -63,6 +64,11 @@ var InlineTagInput = (0, import_react.forwardRef)(
|
|
|
63
64
|
const lastInsertedCaretRef = (0, import_react.useRef)(null);
|
|
64
65
|
const savedRangeRef = (0, import_react.useRef)(null);
|
|
65
66
|
const defaultInputPartsAppliedRef = (0, import_react.useRef)(false);
|
|
67
|
+
const skipEmptyCleanupOnceRef = (0, import_react.useRef)(false);
|
|
68
|
+
const structuralCleanupFrameRef = (0, import_react.useRef)(null);
|
|
69
|
+
const [hasContent, setHasContent] = (0, import_react.useState)(
|
|
70
|
+
() => Boolean(value || mentions.length)
|
|
71
|
+
);
|
|
66
72
|
const lastEmittedStateRef = (0, import_react.useRef)({
|
|
67
73
|
value,
|
|
68
74
|
mentionIds: mentions.map((mention) => mention.id).join("|")
|
|
@@ -78,7 +84,9 @@ var InlineTagInput = (0, import_react.forwardRef)(
|
|
|
78
84
|
latestMentionsRef.current.map((mention) => [mention.id, mention])
|
|
79
85
|
);
|
|
80
86
|
return Array.from(editor.querySelectorAll(`[${MENTION_ATTR}]`)).map(
|
|
81
|
-
(node) => mentionMap.get(
|
|
87
|
+
(node) => mentionMap.get(
|
|
88
|
+
node.dataset.xadkInlineMentionId || ""
|
|
89
|
+
)
|
|
82
90
|
).filter(Boolean);
|
|
83
91
|
}, []);
|
|
84
92
|
const getPlainText = (0, import_react.useCallback)(() => {
|
|
@@ -120,6 +128,7 @@ var InlineTagInput = (0, import_react.forwardRef)(
|
|
|
120
128
|
const emitChange = (0, import_react.useCallback)(() => {
|
|
121
129
|
const nextValue = getPlainText();
|
|
122
130
|
const nextMentions = getOrderedMentions();
|
|
131
|
+
setHasContent(Boolean(nextValue || nextMentions.length));
|
|
123
132
|
lastEmittedStateRef.current = {
|
|
124
133
|
value: nextValue,
|
|
125
134
|
mentionIds: nextMentions.map((mention) => mention.id).join("|")
|
|
@@ -127,12 +136,15 @@ var InlineTagInput = (0, import_react.forwardRef)(
|
|
|
127
136
|
onChange(nextValue);
|
|
128
137
|
onMentionsChange(nextMentions);
|
|
129
138
|
}, [getOrderedMentions, getPlainText, onChange, onMentionsChange]);
|
|
130
|
-
const removeTextRange = (0, import_react.useCallback)(
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
node.
|
|
135
|
-
|
|
139
|
+
const removeTextRange = (0, import_react.useCallback)(
|
|
140
|
+
(node, start, end) => {
|
|
141
|
+
const text = node.textContent || "";
|
|
142
|
+
node.textContent = `${text.slice(0, start)}${text.slice(end)}`;
|
|
143
|
+
if (!node.textContent)
|
|
144
|
+
node.remove();
|
|
145
|
+
},
|
|
146
|
+
[]
|
|
147
|
+
);
|
|
136
148
|
const removeMentionNode = (0, import_react.useCallback)(
|
|
137
149
|
(node) => {
|
|
138
150
|
var _a, _b, _c;
|
|
@@ -152,7 +164,11 @@ var InlineTagInput = (0, import_react.forwardRef)(
|
|
|
152
164
|
const text = previous.textContent || "";
|
|
153
165
|
const spaceLength = ((_c = text.match(/\s+$/)) == null ? void 0 : _c[0].length) || 0;
|
|
154
166
|
if (spaceLength > 0) {
|
|
155
|
-
removeTextRange(
|
|
167
|
+
removeTextRange(
|
|
168
|
+
previous,
|
|
169
|
+
text.length - spaceLength,
|
|
170
|
+
text.length
|
|
171
|
+
);
|
|
156
172
|
}
|
|
157
173
|
}
|
|
158
174
|
},
|
|
@@ -180,6 +196,7 @@ var InlineTagInput = (0, import_react.forwardRef)(
|
|
|
180
196
|
span.setAttribute("contenteditable", "false");
|
|
181
197
|
span.setAttribute(MENTION_ATTR, mention.id);
|
|
182
198
|
span.dataset.xadkInlineMentionId = mention.id;
|
|
199
|
+
span.dataset.xadkInlineMentionType = mention.type;
|
|
183
200
|
span.className = styles.inlineTag;
|
|
184
201
|
if (renderMention) {
|
|
185
202
|
const root = (0, import_client.createRoot)(span);
|
|
@@ -300,6 +317,37 @@ var InlineTagInput = (0, import_react.forwardRef)(
|
|
|
300
317
|
}
|
|
301
318
|
return null;
|
|
302
319
|
};
|
|
320
|
+
const moveCursorAroundMention = (0, import_react.useCallback)(
|
|
321
|
+
(mention, direction) => {
|
|
322
|
+
var _a, _b;
|
|
323
|
+
const editor = editorRef.current;
|
|
324
|
+
const selection = window.getSelection();
|
|
325
|
+
if (!editor || !selection || !editor.contains(mention))
|
|
326
|
+
return;
|
|
327
|
+
const range = document.createRange();
|
|
328
|
+
if (direction === "before") {
|
|
329
|
+
const previous = mention.previousSibling;
|
|
330
|
+
if ((previous == null ? void 0 : previous.nodeType) === Node.TEXT_NODE) {
|
|
331
|
+
range.setStart(previous, ((_a = previous.textContent) == null ? void 0 : _a.length) || 0);
|
|
332
|
+
} else {
|
|
333
|
+
range.setStartBefore(mention);
|
|
334
|
+
}
|
|
335
|
+
} else {
|
|
336
|
+
const next = mention.nextSibling;
|
|
337
|
+
if ((next == null ? void 0 : next.nodeType) === Node.TEXT_NODE) {
|
|
338
|
+
const leadingCaretLength = ((_b = (next.textContent || "").match(/^\u200B+/)) == null ? void 0 : _b[0].length) || 0;
|
|
339
|
+
range.setStart(next, leadingCaretLength);
|
|
340
|
+
} else {
|
|
341
|
+
range.setStartAfter(mention);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
range.collapse(true);
|
|
345
|
+
selection.removeAllRanges();
|
|
346
|
+
selection.addRange(range);
|
|
347
|
+
savedRangeRef.current = range.cloneRange();
|
|
348
|
+
},
|
|
349
|
+
[]
|
|
350
|
+
);
|
|
303
351
|
const getOffsetInEditor = (0, import_react.useCallback)(() => {
|
|
304
352
|
const editor = editorRef.current;
|
|
305
353
|
const selection = window.getSelection();
|
|
@@ -395,11 +443,67 @@ var InlineTagInput = (0, import_react.forwardRef)(
|
|
|
395
443
|
}
|
|
396
444
|
});
|
|
397
445
|
}, []);
|
|
446
|
+
const cleanupEmptyStructuralNodes = (0, import_react.useCallback)(() => {
|
|
447
|
+
const editor = editorRef.current;
|
|
448
|
+
const selection = window.getSelection();
|
|
449
|
+
if (!editor)
|
|
450
|
+
return;
|
|
451
|
+
Array.from(editor.children).forEach((node) => {
|
|
452
|
+
if (node.hasAttribute(MENTION_ATTR))
|
|
453
|
+
return;
|
|
454
|
+
if (node.querySelector(`[${MENTION_ATTR}]`))
|
|
455
|
+
return;
|
|
456
|
+
if (normalizeText(node.textContent || ""))
|
|
457
|
+
return;
|
|
458
|
+
const range = (selection == null ? void 0 : selection.rangeCount) ? selection.getRangeAt(0) : null;
|
|
459
|
+
const nodeIndex = getNodeIndex(node);
|
|
460
|
+
const containsCursor = Boolean(
|
|
461
|
+
range && range.collapsed && (range.startContainer === node || node.contains(range.startContainer) || range.startContainer === editor && (range.startOffset === nodeIndex || range.startOffset === nodeIndex + 1))
|
|
462
|
+
);
|
|
463
|
+
if (containsCursor && selection) {
|
|
464
|
+
const caretNode = createTextNode(CARET_TEXT);
|
|
465
|
+
node.replaceWith(caretNode);
|
|
466
|
+
const nextRange = document.createRange();
|
|
467
|
+
nextRange.setStart(caretNode, CARET_TEXT.length);
|
|
468
|
+
nextRange.collapse(true);
|
|
469
|
+
selection.removeAllRanges();
|
|
470
|
+
selection.addRange(nextRange);
|
|
471
|
+
savedRangeRef.current = nextRange.cloneRange();
|
|
472
|
+
return;
|
|
473
|
+
}
|
|
474
|
+
node.remove();
|
|
475
|
+
});
|
|
476
|
+
}, []);
|
|
477
|
+
(0, import_react.useEffect)(() => {
|
|
478
|
+
const editor = editorRef.current;
|
|
479
|
+
if (!editor)
|
|
480
|
+
return;
|
|
481
|
+
const handleNativeDelete = (event) => {
|
|
482
|
+
if (!(event instanceof InputEvent))
|
|
483
|
+
return;
|
|
484
|
+
if (!event.inputType.startsWith("delete"))
|
|
485
|
+
return;
|
|
486
|
+
if (structuralCleanupFrameRef.current !== null) {
|
|
487
|
+
window.cancelAnimationFrame(structuralCleanupFrameRef.current);
|
|
488
|
+
}
|
|
489
|
+
structuralCleanupFrameRef.current = window.requestAnimationFrame(() => {
|
|
490
|
+
structuralCleanupFrameRef.current = null;
|
|
491
|
+
cleanupEmptyStructuralNodes();
|
|
492
|
+
cleanupCaretTextNodes();
|
|
493
|
+
});
|
|
494
|
+
};
|
|
495
|
+
editor.addEventListener("input", handleNativeDelete);
|
|
496
|
+
return () => editor.removeEventListener("input", handleNativeDelete);
|
|
497
|
+
}, [cleanupCaretTextNodes, cleanupEmptyStructuralNodes]);
|
|
398
498
|
const insertMention = (0, import_react.useCallback)(
|
|
399
499
|
(mention, replace) => {
|
|
400
500
|
const editor = editorRef.current;
|
|
401
501
|
if (!editor)
|
|
402
502
|
return;
|
|
503
|
+
const selectionBeforeFocus = window.getSelection();
|
|
504
|
+
const activeRangeBeforeFocus = (selectionBeforeFocus == null ? void 0 : selectionBeforeFocus.rangeCount) && editor.contains(selectionBeforeFocus.getRangeAt(0).startContainer) ? selectionBeforeFocus.getRangeAt(0).cloneRange() : null;
|
|
505
|
+
const savedRangeBeforeFocus = savedRangeRef.current && editor.contains(savedRangeRef.current.startContainer) ? savedRangeRef.current.cloneRange() : null;
|
|
506
|
+
const rangeBeforeFocus = activeRangeBeforeFocus || savedRangeBeforeFocus;
|
|
403
507
|
editor.focus();
|
|
404
508
|
latestMentionsRef.current = [
|
|
405
509
|
...latestMentionsRef.current.filter((item) => item.id !== mention.id),
|
|
@@ -410,11 +514,15 @@ var InlineTagInput = (0, import_react.forwardRef)(
|
|
|
410
514
|
insertRange = replaceTextRange(replace.start, replace.end);
|
|
411
515
|
cleanupCaretTextNodes();
|
|
412
516
|
}
|
|
517
|
+
const isSemanticallyEmpty = !getPlainText() && !editor.querySelector(`[${MENTION_ATTR}]`);
|
|
518
|
+
if (isSemanticallyEmpty) {
|
|
519
|
+
editor.innerHTML = "";
|
|
520
|
+
savedRangeRef.current = null;
|
|
521
|
+
insertRange = null;
|
|
522
|
+
}
|
|
413
523
|
const mentionNode = buildMentionNode(mention);
|
|
414
524
|
const caretNode = createTextNode(CARET_TEXT);
|
|
415
|
-
const
|
|
416
|
-
const savedRange = savedRangeRef.current;
|
|
417
|
-
const range = insertRange || ((selection == null ? void 0 : selection.rangeCount) && editor.contains(selection.getRangeAt(0).startContainer) ? selection.getRangeAt(0) : savedRange && editor.contains(savedRange.startContainer) ? savedRange : null);
|
|
525
|
+
const range = insertRange || rangeBeforeFocus;
|
|
418
526
|
if (range && editor.contains(range.startContainer)) {
|
|
419
527
|
const fragment = document.createDocumentFragment();
|
|
420
528
|
fragment.append(mentionNode, caretNode);
|
|
@@ -436,6 +544,7 @@ var InlineTagInput = (0, import_react.forwardRef)(
|
|
|
436
544
|
buildMentionNode,
|
|
437
545
|
cleanupCaretTextNodes,
|
|
438
546
|
emitChange,
|
|
547
|
+
getPlainText,
|
|
439
548
|
replaceTextRange,
|
|
440
549
|
restoreCursorAfterInsert,
|
|
441
550
|
setCursorAtTextEnd
|
|
@@ -447,23 +556,36 @@ var InlineTagInput = (0, import_react.forwardRef)(
|
|
|
447
556
|
document.removeEventListener("selectionchange", saveSelectionRange);
|
|
448
557
|
};
|
|
449
558
|
}, [saveSelectionRange]);
|
|
450
|
-
(0, import_react.
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
559
|
+
(0, import_react.useEffect)(
|
|
560
|
+
() => () => {
|
|
561
|
+
if (structuralCleanupFrameRef.current !== null) {
|
|
562
|
+
window.cancelAnimationFrame(structuralCleanupFrameRef.current);
|
|
563
|
+
}
|
|
454
564
|
},
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
565
|
+
[]
|
|
566
|
+
);
|
|
567
|
+
(0, import_react.useImperativeHandle)(
|
|
568
|
+
ref,
|
|
569
|
+
() => ({
|
|
570
|
+
focus: () => {
|
|
571
|
+
var _a;
|
|
572
|
+
return (_a = editorRef.current) == null ? void 0 : _a.focus();
|
|
573
|
+
},
|
|
574
|
+
getText: getPlainText,
|
|
575
|
+
getParts,
|
|
576
|
+
getCursorOffset: getOffsetInEditor,
|
|
577
|
+
insertMention,
|
|
578
|
+
insertTag: insertMention
|
|
579
|
+
}),
|
|
580
|
+
[getOffsetInEditor, getParts, getPlainText, insertMention]
|
|
581
|
+
);
|
|
461
582
|
useIsomorphicLayoutEffect(() => {
|
|
462
583
|
const editor = editorRef.current;
|
|
463
584
|
if (!editor)
|
|
464
585
|
return;
|
|
465
586
|
if (!defaultInputPartsAppliedRef.current && (defaultInputParts == null ? void 0 : defaultInputParts.length) && !value && mentions.length === 0) {
|
|
466
587
|
defaultInputPartsAppliedRef.current = true;
|
|
588
|
+
skipEmptyCleanupOnceRef.current = true;
|
|
467
589
|
renderPartsToEditor(defaultInputParts);
|
|
468
590
|
emitChange();
|
|
469
591
|
return;
|
|
@@ -477,6 +599,7 @@ var InlineTagInput = (0, import_react.forwardRef)(
|
|
|
477
599
|
...value ? [{ type: "text", text: value }] : [],
|
|
478
600
|
...mentions.map((mention) => ({ type: "mention", mention }))
|
|
479
601
|
]);
|
|
602
|
+
setHasContent(Boolean(value || mentions.length));
|
|
480
603
|
const lastTextNode = Array.from(editor.childNodes).reverse().find((node) => node.nodeType === Node.TEXT_NODE);
|
|
481
604
|
if (document.activeElement === editor && lastTextNode) {
|
|
482
605
|
setCursorAtTextEnd(lastTextNode);
|
|
@@ -493,6 +616,10 @@ var InlineTagInput = (0, import_react.forwardRef)(
|
|
|
493
616
|
const editor = editorRef.current;
|
|
494
617
|
if (!editor)
|
|
495
618
|
return;
|
|
619
|
+
if (skipEmptyCleanupOnceRef.current) {
|
|
620
|
+
skipEmptyCleanupOnceRef.current = false;
|
|
621
|
+
return;
|
|
622
|
+
}
|
|
496
623
|
if (!value && mentions.length === 0 && editor.childNodes.length > 0) {
|
|
497
624
|
editor.querySelectorAll(`[${MENTION_ATTR}]`).forEach((node) => {
|
|
498
625
|
var _a;
|
|
@@ -502,10 +629,76 @@ var InlineTagInput = (0, import_react.forwardRef)(
|
|
|
502
629
|
}
|
|
503
630
|
}, [mentions.length, value]);
|
|
504
631
|
const handleInput = () => {
|
|
505
|
-
if (!composingRef.current)
|
|
632
|
+
if (!composingRef.current) {
|
|
633
|
+
cleanupEmptyStructuralNodes();
|
|
634
|
+
cleanupCaretTextNodes();
|
|
506
635
|
emitChange();
|
|
636
|
+
if (structuralCleanupFrameRef.current !== null) {
|
|
637
|
+
window.cancelAnimationFrame(structuralCleanupFrameRef.current);
|
|
638
|
+
}
|
|
639
|
+
structuralCleanupFrameRef.current = window.requestAnimationFrame(() => {
|
|
640
|
+
structuralCleanupFrameRef.current = null;
|
|
641
|
+
cleanupEmptyStructuralNodes();
|
|
642
|
+
cleanupCaretTextNodes();
|
|
643
|
+
});
|
|
644
|
+
}
|
|
645
|
+
};
|
|
646
|
+
const handlePaste = (event) => {
|
|
647
|
+
event.preventDefault();
|
|
648
|
+
const editor = editorRef.current;
|
|
649
|
+
if (!editor)
|
|
650
|
+
return;
|
|
651
|
+
const text = event.clipboardData.getData("text/plain");
|
|
652
|
+
if (!text)
|
|
653
|
+
return;
|
|
654
|
+
const parts = (0, import_markdownResource.parseMarkdownResourceLinksAsParts)(text);
|
|
655
|
+
const selection = window.getSelection();
|
|
656
|
+
const range = (selection == null ? void 0 : selection.rangeCount) && editor.contains(selection.getRangeAt(0).startContainer) ? selection.getRangeAt(0) : null;
|
|
657
|
+
const fragment = document.createDocumentFragment();
|
|
658
|
+
let lastTextNode = null;
|
|
659
|
+
for (const part of parts) {
|
|
660
|
+
if (part.type === "text") {
|
|
661
|
+
lastTextNode = createTextNode(part.text);
|
|
662
|
+
fragment.append(lastTextNode);
|
|
663
|
+
continue;
|
|
664
|
+
}
|
|
665
|
+
latestMentionsRef.current = [
|
|
666
|
+
...latestMentionsRef.current,
|
|
667
|
+
part.mention
|
|
668
|
+
];
|
|
669
|
+
fragment.append(buildMentionNode(part.mention));
|
|
670
|
+
lastTextNode = createTextNode(CARET_TEXT);
|
|
671
|
+
fragment.append(lastTextNode);
|
|
672
|
+
}
|
|
673
|
+
if (range) {
|
|
674
|
+
range.deleteContents();
|
|
675
|
+
range.insertNode(fragment);
|
|
676
|
+
} else {
|
|
677
|
+
editor.append(fragment);
|
|
678
|
+
}
|
|
679
|
+
cleanupCaretTextNodes();
|
|
680
|
+
if (lastTextNode)
|
|
681
|
+
setCursorAtTextEnd(lastTextNode);
|
|
682
|
+
emitChange();
|
|
507
683
|
};
|
|
508
684
|
const handleKeyDown = (event) => {
|
|
685
|
+
if (event.key === "ArrowLeft" || event.key === "ArrowRight") {
|
|
686
|
+
const selection = window.getSelection();
|
|
687
|
+
if (selection == null ? void 0 : selection.rangeCount) {
|
|
688
|
+
const range = selection.getRangeAt(0);
|
|
689
|
+
if (range.collapsed) {
|
|
690
|
+
const targetMention = event.key === "ArrowLeft" ? getMentionBeforeRange(range) : getMentionAfterRange(range);
|
|
691
|
+
if (targetMention) {
|
|
692
|
+
event.preventDefault();
|
|
693
|
+
moveCursorAroundMention(
|
|
694
|
+
targetMention,
|
|
695
|
+
event.key === "ArrowLeft" ? "before" : "after"
|
|
696
|
+
);
|
|
697
|
+
return;
|
|
698
|
+
}
|
|
699
|
+
}
|
|
700
|
+
}
|
|
701
|
+
}
|
|
509
702
|
if (event.key === "Backspace" || event.key === "Delete") {
|
|
510
703
|
const selection = window.getSelection();
|
|
511
704
|
if (selection == null ? void 0 : selection.rangeCount) {
|
|
@@ -514,7 +707,9 @@ var InlineTagInput = (0, import_react.forwardRef)(
|
|
|
514
707
|
const targetMention = event.key === "Backspace" ? getMentionBeforeRange(range) : getMentionAfterRange(range);
|
|
515
708
|
if (targetMention) {
|
|
516
709
|
event.preventDefault();
|
|
517
|
-
removeMentionById(
|
|
710
|
+
removeMentionById(
|
|
711
|
+
targetMention.dataset.xadkInlineMentionId || ""
|
|
712
|
+
);
|
|
518
713
|
return;
|
|
519
714
|
}
|
|
520
715
|
}
|
|
@@ -522,7 +717,7 @@ var InlineTagInput = (0, import_react.forwardRef)(
|
|
|
522
717
|
}
|
|
523
718
|
onKeyDown == null ? void 0 : onKeyDown(event);
|
|
524
719
|
};
|
|
525
|
-
const showPlaceholder = !
|
|
720
|
+
const showPlaceholder = !hasContent;
|
|
526
721
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.inlineInputWrapper, children: [
|
|
527
722
|
showPlaceholder && placeholder && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.inlinePlaceholder, children: placeholder }),
|
|
528
723
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
@@ -535,8 +730,11 @@ var InlineTagInput = (0, import_react.forwardRef)(
|
|
|
535
730
|
role: "textbox",
|
|
536
731
|
"aria-multiline": "true",
|
|
537
732
|
onInput: handleInput,
|
|
733
|
+
onPaste: handlePaste,
|
|
538
734
|
onKeyDown: handleKeyDown,
|
|
539
735
|
onKeyUp: (event) => {
|
|
736
|
+
cleanupEmptyStructuralNodes();
|
|
737
|
+
cleanupCaretTextNodes();
|
|
540
738
|
saveSelectionRange();
|
|
541
739
|
onKeyUp == null ? void 0 : onKeyUp(event);
|
|
542
740
|
},
|
|
@@ -544,6 +742,7 @@ var InlineTagInput = (0, import_react.forwardRef)(
|
|
|
544
742
|
onFocus: saveSelectionRange,
|
|
545
743
|
onCompositionStart: () => {
|
|
546
744
|
composingRef.current = true;
|
|
745
|
+
setHasContent(true);
|
|
547
746
|
},
|
|
548
747
|
onCompositionEnd: () => {
|
|
549
748
|
composingRef.current = false;
|