@ai-group/chat-sdk 3.7.1-alpha9 → 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.
- package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.js +17 -50
- package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.js.map +2 -2
- package/dist/cjs/components/XAdkProvider/compound/Sender.d.ts +3 -2
- package/dist/cjs/components/XAdkProvider/compound/Sender.js +81 -4
- package/dist/cjs/components/XAdkProvider/compound/Sender.js.map +3 -3
- package/dist/cjs/components/XAdkProvider/context/DefaultLayoutContext.d.ts +9 -0
- package/dist/cjs/components/XAdkProvider/context/DefaultLayoutContext.js +34 -0
- package/dist/cjs/components/XAdkProvider/context/DefaultLayoutContext.js.map +7 -0
- package/dist/cjs/components/XAdkProvider/context/index.d.ts +5 -4
- package/dist/cjs/components/XAdkProvider/context/index.js +3 -1
- package/dist/cjs/components/XAdkProvider/context/index.js.map +2 -2
- package/dist/cjs/components/XAdkSender/InlineTagInput.d.ts +4 -0
- package/dist/cjs/components/XAdkSender/InlineTagInput.js +28 -1
- package/dist/cjs/components/XAdkSender/InlineTagInput.js.map +2 -2
- package/dist/cjs/components/XAdkSender/{QuickList.d.ts → InputSuggestionList.d.ts} +4 -3
- package/dist/cjs/components/XAdkSender/{QuickList.js → InputSuggestionList.js} +55 -30
- package/dist/cjs/components/XAdkSender/InputSuggestionList.js.map +7 -0
- package/dist/cjs/components/XAdkSender/index.js +35 -13
- package/dist/cjs/components/XAdkSender/index.js.map +3 -3
- package/dist/cjs/components/XAdkSender/styles.js +13 -1
- package/dist/cjs/components/XAdkSender/styles.js.map +2 -2
- package/dist/cjs/components/XAiConversations/index.js +1 -1
- package/dist/cjs/components/XAiConversations/index.js.map +2 -2
- package/dist/cjs/components/XAiConversations/styles.js +11 -1
- package/dist/cjs/components/XAiConversations/styles.js.map +2 -2
- package/dist/cjs/index.d.ts +3 -3
- package/dist/cjs/index.js +5 -1
- 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.js +3 -1
- package/dist/cjs/presets/xgroup/knowledgeReference.js.map +2 -2
- package/dist/cjs/presets/xgroup/webReference.d.ts +10 -0
- package/dist/cjs/presets/xgroup/webReference.js +85 -0
- package/dist/cjs/presets/xgroup/webReference.js.map +7 -0
- package/dist/cjs/types/XAdkSender.d.ts +4 -0
- package/dist/cjs/types/XAdkSender.js.map +1 -1
- package/dist/esm/components/XAdkProvider/compound/DefaultLayout.js +16 -41
- package/dist/esm/components/XAdkProvider/compound/DefaultLayout.js.map +1 -1
- package/dist/esm/components/XAdkProvider/compound/Sender.d.ts +3 -2
- package/dist/esm/components/XAdkProvider/compound/Sender.js +70 -7
- package/dist/esm/components/XAdkProvider/compound/Sender.js.map +1 -1
- package/dist/esm/components/XAdkProvider/context/DefaultLayoutContext.d.ts +9 -0
- package/dist/esm/components/XAdkProvider/context/DefaultLayoutContext.js +9 -0
- package/dist/esm/components/XAdkProvider/context/DefaultLayoutContext.js.map +1 -0
- package/dist/esm/components/XAdkProvider/context/index.d.ts +5 -4
- package/dist/esm/components/XAdkProvider/context/index.js +1 -0
- package/dist/esm/components/XAdkProvider/context/index.js.map +1 -1
- package/dist/esm/components/XAdkSender/InlineTagInput.d.ts +4 -0
- package/dist/esm/components/XAdkSender/InlineTagInput.js +26 -7
- package/dist/esm/components/XAdkSender/InlineTagInput.js.map +1 -1
- package/dist/esm/components/XAdkSender/{QuickList.d.ts → InputSuggestionList.d.ts} +4 -3
- package/dist/esm/components/XAdkSender/{QuickList.js → InputSuggestionList.js} +53 -28
- package/dist/esm/components/XAdkSender/InputSuggestionList.js.map +1 -0
- package/dist/esm/components/XAdkSender/index.js +39 -18
- package/dist/esm/components/XAdkSender/index.js.map +1 -1
- package/dist/esm/components/XAdkSender/styles.js +2 -2
- package/dist/esm/components/XAdkSender/styles.js.map +1 -1
- package/dist/esm/components/XAiConversations/index.js +2 -1
- package/dist/esm/components/XAiConversations/index.js.map +1 -1
- package/dist/esm/components/XAiConversations/styles.js +3 -3
- package/dist/esm/components/XAiConversations/styles.js.map +1 -1
- package/dist/esm/index.d.ts +3 -3
- package/dist/esm/index.js +2 -2
- 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.js +2 -1
- package/dist/esm/presets/xgroup/knowledgeReference.js.map +1 -1
- package/dist/esm/presets/xgroup/webReference.d.ts +10 -0
- package/dist/esm/presets/xgroup/webReference.js +46 -0
- package/dist/esm/presets/xgroup/webReference.js.map +1 -0
- package/dist/esm/types/XAdkSender.d.ts +4 -0
- package/dist/esm/types/XAdkSender.js.map +1 -1
- package/dist/umd/chat-sdk.min.js +1 -1
- package/package.json +1 -1
- package/dist/cjs/components/XAdkSender/QuickList.js.map +0 -7
- package/dist/esm/components/XAdkSender/QuickList.js.map +0 -1
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import React, { useMemo, useCallback } from "react";
|
|
1
|
+
import React, { useMemo, useCallback, useEffect, useRef } from "react";
|
|
2
2
|
import { useStyles } from "./styles";
|
|
3
3
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
4
4
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
5
|
-
|
|
5
|
+
/** XAdkSender 内部的输入建议列表,不承载具体业务语义。 */
|
|
6
|
+
var InputSuggestionList = function InputSuggestionList(_ref) {
|
|
6
7
|
var _config$options$norma;
|
|
7
8
|
var config = _ref.config,
|
|
8
9
|
_ref$activeIndex = _ref.activeIndex,
|
|
@@ -11,63 +12,86 @@ var QuickList = function QuickList(_ref) {
|
|
|
11
12
|
onClose = _ref.onClose,
|
|
12
13
|
visible = _ref.visible;
|
|
13
14
|
var styles = useStyles();
|
|
15
|
+
var bodyRef = useRef(null);
|
|
16
|
+
var itemRefs = useRef(new Map());
|
|
14
17
|
|
|
15
18
|
// SDK 内置列表只负责展示 options;搜索、远程过滤、排序等能力由业务方在外部更新 options 实现。
|
|
16
19
|
var groupedOptions = useMemo(function () {
|
|
17
20
|
var groups = {};
|
|
18
|
-
config.options.forEach(function (
|
|
19
|
-
var
|
|
20
|
-
if (!groups[
|
|
21
|
-
groups[
|
|
21
|
+
config.options.forEach(function (option) {
|
|
22
|
+
var group = option.group || "";
|
|
23
|
+
if (!groups[group]) groups[group] = [];
|
|
24
|
+
groups[group].push(option);
|
|
22
25
|
});
|
|
23
26
|
return groups;
|
|
24
27
|
}, [config.options]);
|
|
25
|
-
var
|
|
26
|
-
|
|
27
|
-
|
|
28
|
+
var normalizedActiveIndex = config.options.length > 0 ? (activeIndex % config.options.length + config.options.length) % config.options.length : 0;
|
|
29
|
+
var activeOptionId = (_config$options$norma = config.options[normalizedActiveIndex]) === null || _config$options$norma === void 0 ? void 0 : _config$options$norma.id;
|
|
30
|
+
useEffect(function () {
|
|
31
|
+
if (!visible || !activeOptionId) return;
|
|
32
|
+
var body = bodyRef.current;
|
|
33
|
+
var item = itemRefs.current.get(activeOptionId);
|
|
34
|
+
if (!body || !item) return;
|
|
35
|
+
var bodyRect = body.getBoundingClientRect();
|
|
36
|
+
var itemRect = item.getBoundingClientRect();
|
|
37
|
+
if (itemRect.top < bodyRect.top) {
|
|
38
|
+
body.scrollTop -= bodyRect.top - itemRect.top;
|
|
39
|
+
} else if (itemRect.bottom > bodyRect.bottom) {
|
|
40
|
+
body.scrollTop += itemRect.bottom - bodyRect.bottom;
|
|
41
|
+
}
|
|
42
|
+
}, [activeOptionId, visible]);
|
|
43
|
+
var handleSelect = useCallback(function (option) {
|
|
44
|
+
onSelect(option);
|
|
28
45
|
onClose();
|
|
29
46
|
}, [onSelect, onClose]);
|
|
30
47
|
if (!visible) return null;
|
|
31
|
-
var
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
48
|
+
var setItemRef = function setItemRef(id, node) {
|
|
49
|
+
if (node) itemRefs.current.set(id, node);else itemRefs.current.delete(id);
|
|
50
|
+
};
|
|
51
|
+
var getItemClassName = function getItemClassName(option) {
|
|
52
|
+
return "".concat(styles.quickListItem).concat(option.id === activeOptionId ? " active" : "");
|
|
35
53
|
};
|
|
36
|
-
var renderOption = function renderOption(
|
|
54
|
+
var renderOption = function renderOption(option) {
|
|
37
55
|
if (config.renderItem) {
|
|
38
56
|
return /*#__PURE__*/_jsx("div", {
|
|
39
|
-
|
|
57
|
+
ref: function ref(node) {
|
|
58
|
+
return setItemRef(option.id, node);
|
|
59
|
+
},
|
|
60
|
+
className: getItemClassName(option),
|
|
40
61
|
onMouseDown: function onMouseDown(event) {
|
|
41
62
|
return event.preventDefault();
|
|
42
63
|
},
|
|
43
64
|
onClick: function onClick() {
|
|
44
|
-
return handleSelect(
|
|
65
|
+
return handleSelect(option);
|
|
45
66
|
},
|
|
46
|
-
children: config.renderItem(
|
|
47
|
-
},
|
|
67
|
+
children: config.renderItem(option)
|
|
68
|
+
}, option.id);
|
|
48
69
|
}
|
|
49
70
|
return /*#__PURE__*/_jsxs("div", {
|
|
50
|
-
|
|
71
|
+
ref: function ref(node) {
|
|
72
|
+
return setItemRef(option.id, node);
|
|
73
|
+
},
|
|
74
|
+
className: getItemClassName(option),
|
|
51
75
|
onMouseDown: function onMouseDown(event) {
|
|
52
76
|
return event.preventDefault();
|
|
53
77
|
},
|
|
54
78
|
onClick: function onClick() {
|
|
55
|
-
return handleSelect(
|
|
79
|
+
return handleSelect(option);
|
|
56
80
|
},
|
|
57
|
-
children: [
|
|
81
|
+
children: [option.icon && /*#__PURE__*/_jsx("span", {
|
|
58
82
|
className: "quick-list-item-icon",
|
|
59
|
-
children:
|
|
83
|
+
children: option.icon
|
|
60
84
|
}), /*#__PURE__*/_jsxs("div", {
|
|
61
85
|
className: "quick-list-item-content",
|
|
62
86
|
children: [/*#__PURE__*/_jsx("div", {
|
|
63
87
|
className: "quick-list-item-label",
|
|
64
|
-
children:
|
|
65
|
-
}),
|
|
88
|
+
children: option.label
|
|
89
|
+
}), option.description && /*#__PURE__*/_jsx("div", {
|
|
66
90
|
className: "quick-list-item-desc",
|
|
67
|
-
children:
|
|
91
|
+
children: option.description
|
|
68
92
|
})]
|
|
69
93
|
})]
|
|
70
|
-
},
|
|
94
|
+
}, option.id);
|
|
71
95
|
};
|
|
72
96
|
var groupKeys = Object.keys(groupedOptions);
|
|
73
97
|
return /*#__PURE__*/_jsxs("div", {
|
|
@@ -76,6 +100,7 @@ var QuickList = function QuickList(_ref) {
|
|
|
76
100
|
className: styles.quickListHeader,
|
|
77
101
|
children: config.title
|
|
78
102
|
}), /*#__PURE__*/_jsxs("div", {
|
|
103
|
+
ref: bodyRef,
|
|
79
104
|
className: styles.quickListBody,
|
|
80
105
|
children: [groupKeys.length === 0 && /*#__PURE__*/_jsx("div", {
|
|
81
106
|
className: styles.quickListEmpty,
|
|
@@ -92,5 +117,5 @@ var QuickList = function QuickList(_ref) {
|
|
|
92
117
|
})]
|
|
93
118
|
});
|
|
94
119
|
};
|
|
95
|
-
export default
|
|
96
|
-
//# sourceMappingURL=
|
|
120
|
+
export default InputSuggestionList;
|
|
121
|
+
//# sourceMappingURL=InputSuggestionList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","useMemo","useCallback","useEffect","useRef","useStyles","jsx","_jsx","jsxs","_jsxs","InputSuggestionList","_ref","_config$options$norma","config","_ref$activeIndex","activeIndex","onSelect","onClose","visible","styles","bodyRef","itemRefs","Map","groupedOptions","groups","options","forEach","option","group","push","normalizedActiveIndex","length","activeOptionId","id","body","current","item","get","bodyRect","getBoundingClientRect","itemRect","top","scrollTop","bottom","handleSelect","setItemRef","node","set","delete","getItemClassName","concat","quickListItem","renderOption","renderItem","ref","className","onMouseDown","event","preventDefault","onClick","children","icon","label","description","groupKeys","Object","keys","quickList","title","quickListHeader","quickListBody","quickListEmpty","map","items","quickListGroup","replace"],"sources":["../../../../src/components/XAdkSender/InputSuggestionList.tsx"],"sourcesContent":["import React, { useMemo, useCallback, useEffect, useRef } from \"react\";\nimport type { QuickListOption, QuickKeyConfig } from \"@/types\";\nimport { useStyles } from \"./styles\";\n\ninterface InputSuggestionListProps {\n /** 当前触发的快捷键配置 */\n config: QuickKeyConfig;\n /** 当前键盘选中的选项下标 */\n activeIndex?: number;\n /** 选择回调 */\n onSelect: (option: QuickListOption) => void;\n /** 关闭回调 */\n onClose: () => void;\n /** 是否可见 */\n visible: boolean;\n}\n\n/** XAdkSender 内部的输入建议列表,不承载具体业务语义。 */\nconst InputSuggestionList: React.FC<InputSuggestionListProps> = ({\n config,\n activeIndex = 0,\n onSelect,\n onClose,\n visible,\n}) => {\n const styles = useStyles();\n const bodyRef = useRef<HTMLDivElement>(null);\n const itemRefs = useRef(new Map<string, HTMLDivElement>());\n\n // SDK 内置列表只负责展示 options;搜索、远程过滤、排序等能力由业务方在外部更新 options 实现。\n const groupedOptions = useMemo(() => {\n const groups: Record<string, QuickListOption[]> = {};\n config.options.forEach((option) => {\n const group = option.group || \"\";\n if (!groups[group]) groups[group] = [];\n groups[group].push(option);\n });\n return groups;\n }, [config.options]);\n\n const normalizedActiveIndex =\n config.options.length > 0\n ? ((activeIndex % config.options.length) + config.options.length) %\n config.options.length\n : 0;\n const activeOptionId = config.options[normalizedActiveIndex]?.id;\n\n useEffect(() => {\n if (!visible || !activeOptionId) return;\n const body = bodyRef.current;\n const item = itemRefs.current.get(activeOptionId);\n if (!body || !item) return;\n\n const bodyRect = body.getBoundingClientRect();\n const itemRect = item.getBoundingClientRect();\n if (itemRect.top < bodyRect.top) {\n body.scrollTop -= bodyRect.top - itemRect.top;\n } else if (itemRect.bottom > bodyRect.bottom) {\n body.scrollTop += itemRect.bottom - bodyRect.bottom;\n }\n }, [activeOptionId, visible]);\n\n const handleSelect = useCallback(\n (option: QuickListOption) => {\n onSelect(option);\n onClose();\n },\n [onSelect, onClose],\n );\n\n if (!visible) return null;\n\n const setItemRef = (id: string, node: HTMLDivElement | null) => {\n if (node) itemRefs.current.set(id, node);\n else itemRefs.current.delete(id);\n };\n\n const getItemClassName = (option: QuickListOption) =>\n `${styles.quickListItem}${option.id === activeOptionId ? \" active\" : \"\"}`;\n\n const renderOption = (option: QuickListOption) => {\n if (config.renderItem) {\n return (\n <div\n key={option.id}\n ref={(node) => setItemRef(option.id, node)}\n className={getItemClassName(option)}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => handleSelect(option)}\n >\n {config.renderItem(option)}\n </div>\n );\n }\n\n return (\n <div\n key={option.id}\n ref={(node) => setItemRef(option.id, node)}\n className={getItemClassName(option)}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => handleSelect(option)}\n >\n {option.icon && (\n <span className=\"quick-list-item-icon\">{option.icon}</span>\n )}\n <div className=\"quick-list-item-content\">\n <div className=\"quick-list-item-label\">{option.label}</div>\n {option.description && (\n <div className=\"quick-list-item-desc\">{option.description}</div>\n )}\n </div>\n </div>\n );\n };\n\n const groupKeys = Object.keys(groupedOptions);\n\n return (\n <div className={styles.quickList}>\n {config.title && (\n <div className={styles.quickListHeader}>{config.title}</div>\n )}\n <div ref={bodyRef} className={styles.quickListBody}>\n {groupKeys.length === 0 && (\n <div className={styles.quickListEmpty}>暂无可选项</div>\n )}\n {groupKeys.map((group) => {\n const items = groupedOptions[group];\n return (\n <div key={group}>\n {group && (\n <div className={styles.quickListGroup}>\n {group.replace(/_/g, \" / \")}\n </div>\n )}\n {items.map(renderOption)}\n </div>\n );\n })}\n </div>\n </div>\n );\n};\n\nexport default InputSuggestionList;\n"],"mappings":"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"}
|
|
@@ -9,7 +9,7 @@ import { Popconfirm, message, Tooltip, Input, Modal } from "antd";
|
|
|
9
9
|
import { ClearOutlined, LoadingOutlined, ArrowUpOutlined } from "@ant-design/icons";
|
|
10
10
|
import { useStyles } from "./styles";
|
|
11
11
|
import FileGallery from "../FileGallery";
|
|
12
|
-
import
|
|
12
|
+
import InputSuggestionList from "./InputSuggestionList";
|
|
13
13
|
import InputTags from "./InputTags";
|
|
14
14
|
import InlineTagInput from "./InlineTagInput";
|
|
15
15
|
import { getExt } from "../../utils/file";
|
|
@@ -134,6 +134,12 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
134
134
|
_useState16 = _slicedToArray(_useState15, 2),
|
|
135
135
|
quickKeyActiveIndex = _useState16[0],
|
|
136
136
|
setQuickKeyActiveIndex = _useState16[1];
|
|
137
|
+
var closeQuickKeyList = useCallback(function () {
|
|
138
|
+
setActiveQuickKey(null);
|
|
139
|
+
setQuickKeyKeyword("");
|
|
140
|
+
setQuickKeyTriggerIdx(-1);
|
|
141
|
+
setQuickKeyActiveIndex(0);
|
|
142
|
+
}, []);
|
|
137
143
|
|
|
138
144
|
// 生成唯一ID
|
|
139
145
|
var generateId = function generateId() {
|
|
@@ -602,7 +608,7 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
602
608
|
|
|
603
609
|
// 选择快捷项后转成结构化 Mention;inline 模式会替换掉触发字符和关键词。
|
|
604
610
|
var handleQuickKeySelect = useCallback(function (option) {
|
|
605
|
-
var _ref14, _ref15, _option$value, _ref16, _option$targetId, _option$displayName, _activeQuickKeyConfig, _inlineInputRef$
|
|
611
|
+
var _ref14, _ref15, _option$value, _ref16, _option$targetId, _option$displayName, _option$onSelect, _activeQuickKeyConfig, _inlineInputRef$curre7, _textareaRef$current2;
|
|
606
612
|
var mentionType = (activeQuickKeyConfig === null || activeQuickKeyConfig === void 0 ? void 0 : activeQuickKeyConfig.mentionType) || (activeQuickKeyConfig === null || activeQuickKeyConfig === void 0 ? void 0 : activeQuickKeyConfig.tagType) || activeQuickKey || "unknown";
|
|
607
613
|
var newMention = {
|
|
608
614
|
id: generateId(),
|
|
@@ -616,10 +622,21 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
616
622
|
icon: option.icon,
|
|
617
623
|
data: option
|
|
618
624
|
};
|
|
625
|
+
(_option$onSelect = option.onSelect) === null || _option$onSelect === void 0 || _option$onSelect.call(option, option);
|
|
619
626
|
activeQuickKeyConfig === null || activeQuickKeyConfig === void 0 || (_activeQuickKeyConfig = activeQuickKeyConfig.onSelect) === null || _activeQuickKeyConfig === void 0 || _activeQuickKeyConfig.call(activeQuickKeyConfig, option);
|
|
620
|
-
if (
|
|
621
|
-
|
|
622
|
-
|
|
627
|
+
if (option.action === "command") {
|
|
628
|
+
if (inlineTags) {
|
|
629
|
+
var _inlineInputRef$curre5;
|
|
630
|
+
(_inlineInputRef$curre5 = inlineInputRef.current) === null || _inlineInputRef$curre5 === void 0 || _inlineInputRef$curre5.deleteTextRange({
|
|
631
|
+
start: quickKeyTriggerIdx,
|
|
632
|
+
end: quickKeyTriggerIdx + 1 + quickKeyKeyword.length
|
|
633
|
+
});
|
|
634
|
+
} else if (quickKeyTriggerIdx >= 0) {
|
|
635
|
+
setValue(value.slice(0, quickKeyTriggerIdx) + value.slice(quickKeyTriggerIdx + 1 + quickKeyKeyword.length));
|
|
636
|
+
}
|
|
637
|
+
} else if (inlineTags) {
|
|
638
|
+
var _inlineInputRef$curre6;
|
|
639
|
+
(_inlineInputRef$curre6 = inlineInputRef.current) === null || _inlineInputRef$curre6 === void 0 || _inlineInputRef$curre6.insertMention(newMention, {
|
|
623
640
|
start: quickKeyTriggerIdx,
|
|
624
641
|
end: quickKeyTriggerIdx + 1 + quickKeyKeyword.length
|
|
625
642
|
});
|
|
@@ -636,7 +653,7 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
636
653
|
setQuickKeyKeyword("");
|
|
637
654
|
setQuickKeyTriggerIdx(-1);
|
|
638
655
|
setQuickKeyActiveIndex(0);
|
|
639
|
-
inlineTags ? (_inlineInputRef$
|
|
656
|
+
inlineTags ? (_inlineInputRef$curre7 = inlineInputRef.current) === null || _inlineInputRef$curre7 === void 0 ? void 0 : _inlineInputRef$curre7.focus() : (_textareaRef$current2 = textareaRef.current) === null || _textareaRef$current2 === void 0 ? void 0 : _textareaRef$current2.focus();
|
|
640
657
|
}, [activeQuickKey, activeQuickKeyConfig, inlineTags, mentions, setMentions, value, quickKeyTriggerIdx, quickKeyKeyword, setValue]);
|
|
641
658
|
|
|
642
659
|
// 处理输入框变化(含快捷键检测)
|
|
@@ -648,10 +665,10 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
648
665
|
detectQuickKey(newValue, e.target.selectionStart || 0);
|
|
649
666
|
};
|
|
650
667
|
var handleInlineInputChange = function handleInlineInputChange(newValue) {
|
|
651
|
-
var _inlineInputRef$
|
|
668
|
+
var _inlineInputRef$curre8;
|
|
652
669
|
setValue(newValue);
|
|
653
670
|
// contenteditable 的 selection 不一定和 React state 同步,需实时读取内部光标 offset。
|
|
654
|
-
detectQuickKey(newValue, ((_inlineInputRef$
|
|
671
|
+
detectQuickKey(newValue, ((_inlineInputRef$curre8 = inlineInputRef.current) === null || _inlineInputRef$curre8 === void 0 ? void 0 : _inlineInputRef$curre8.getCursorOffset()) || newValue.length);
|
|
655
672
|
};
|
|
656
673
|
var handleQuickKeyByText = function handleQuickKeyByText(text, cursorPos) {
|
|
657
674
|
var quickKeyChars = quickKeys.map(function (qk) {
|
|
@@ -686,11 +703,11 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
686
703
|
handleQuickKeyByText(target.value || "", target.selectionStart || 0);
|
|
687
704
|
};
|
|
688
705
|
var handleInlineKeyUp = function handleInlineKeyUp(e) {
|
|
689
|
-
var _inlineInputRef$
|
|
706
|
+
var _inlineInputRef$curre9, _inlineInputRef$curre10;
|
|
690
707
|
if (activeQuickKey && isQuickListControlKey(e.key)) return;
|
|
691
708
|
// inline 输入区不是 textarea,不能读 event.target.value,只能从 ref 取纯文本。
|
|
692
|
-
var text = ((_inlineInputRef$
|
|
693
|
-
var cursorPos = ((_inlineInputRef$
|
|
709
|
+
var text = ((_inlineInputRef$curre9 = inlineInputRef.current) === null || _inlineInputRef$curre9 === void 0 ? void 0 : _inlineInputRef$curre9.getText()) || "";
|
|
710
|
+
var cursorPos = ((_inlineInputRef$curre10 = inlineInputRef.current) === null || _inlineInputRef$curre10 === void 0 ? void 0 : _inlineInputRef$curre10.getCursorOffset()) || text.length;
|
|
694
711
|
handleQuickKeyByText(text, cursorPos);
|
|
695
712
|
};
|
|
696
713
|
|
|
@@ -766,6 +783,8 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
766
783
|
|
|
767
784
|
// 处理回车键
|
|
768
785
|
var handleKeyDown = function handleKeyDown(e) {
|
|
786
|
+
// 输入法候选阶段的 Enter 用于确认候选词,不能触发快捷项选择或消息发送。
|
|
787
|
+
if (e.nativeEvent.isComposing || e.keyCode === 229) return;
|
|
769
788
|
var quickKeyOptions = (activeQuickKeyConfig === null || activeQuickKeyConfig === void 0 ? void 0 : activeQuickKeyConfig.options) || [];
|
|
770
789
|
if (activeQuickKey && quickKeyOptions.length > 0) {
|
|
771
790
|
if (e.key === "ArrowDown") {
|
|
@@ -929,6 +948,13 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
929
948
|
return /*#__PURE__*/_jsxs("div", {
|
|
930
949
|
ref: containerRef,
|
|
931
950
|
className: containerClass,
|
|
951
|
+
onBlur: function onBlur(event) {
|
|
952
|
+
var nextFocusedNode = event.relatedTarget;
|
|
953
|
+
if (nextFocusedNode && event.currentTarget.contains(nextFocusedNode)) {
|
|
954
|
+
return;
|
|
955
|
+
}
|
|
956
|
+
closeQuickKeyList();
|
|
957
|
+
},
|
|
932
958
|
onDragOver: draggable ? handleDragOver : undefined,
|
|
933
959
|
onDragLeave: draggable ? handleDragLeave : undefined,
|
|
934
960
|
onDrop: draggable ? handleDrop : undefined,
|
|
@@ -983,16 +1009,11 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
983
1009
|
})]
|
|
984
1010
|
}), activeQuickKey && activeQuickKeyConfig && /*#__PURE__*/_jsx("div", {
|
|
985
1011
|
className: styles.quickListWrapper,
|
|
986
|
-
children: /*#__PURE__*/_jsx(
|
|
1012
|
+
children: /*#__PURE__*/_jsx(InputSuggestionList, {
|
|
987
1013
|
config: activeQuickKeyConfig,
|
|
988
1014
|
activeIndex: quickKeyActiveIndex,
|
|
989
1015
|
onSelect: handleQuickKeySelect,
|
|
990
|
-
onClose:
|
|
991
|
-
setActiveQuickKey(null);
|
|
992
|
-
setQuickKeyKeyword("");
|
|
993
|
-
setQuickKeyTriggerIdx(-1);
|
|
994
|
-
setQuickKeyActiveIndex(0);
|
|
995
|
-
},
|
|
1016
|
+
onClose: closeQuickKeyList,
|
|
996
1017
|
visible: true
|
|
997
1018
|
})
|
|
998
1019
|
}), footer === false ? defaultActionBar : renderSlot(footer, defaultActionBar)]
|