@ai-group/chat-sdk 3.7.1-alpha2 → 3.7.1-alpha4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/dist/cjs/components/FileGallery/index.js +59 -40
  2. package/dist/cjs/components/FileGallery/index.js.map +2 -2
  3. package/dist/cjs/components/FileGallery/styles.d.ts +7 -0
  4. package/dist/cjs/components/FileGallery/styles.js +78 -0
  5. package/dist/cjs/components/FileGallery/styles.js.map +2 -2
  6. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.d.ts +7 -1
  7. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.js +82 -22
  8. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.js.map +2 -2
  9. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/styles.d.ts +3 -0
  10. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/styles.js +39 -0
  11. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/styles.js.map +2 -2
  12. package/dist/cjs/components/XAdkChatbot/index.js +35 -5
  13. package/dist/cjs/components/XAdkChatbot/index.js.map +2 -2
  14. package/dist/cjs/components/XAdkChatbot/styles.js +1 -1
  15. package/dist/cjs/components/XAdkChatbot/styles.js.map +1 -1
  16. package/dist/cjs/components/XAdkSender/InlineTagInput.d.ts +11 -5
  17. package/dist/cjs/components/XAdkSender/InlineTagInput.js +188 -113
  18. package/dist/cjs/components/XAdkSender/InlineTagInput.js.map +2 -2
  19. package/dist/cjs/components/XAdkSender/InputTags.d.ts +2 -2
  20. package/dist/cjs/components/XAdkSender/InputTags.js +8 -8
  21. package/dist/cjs/components/XAdkSender/InputTags.js.map +2 -2
  22. package/dist/cjs/components/XAdkSender/index.js +104 -64
  23. package/dist/cjs/components/XAdkSender/index.js.map +2 -2
  24. package/dist/cjs/components/XAdkSender/styles.d.ts +4 -0
  25. package/dist/cjs/components/XAdkSender/styles.js +34 -6
  26. package/dist/cjs/components/XAdkSender/styles.js.map +2 -2
  27. package/dist/cjs/index.d.ts +2 -1
  28. package/dist/cjs/index.js +7 -0
  29. package/dist/cjs/index.js.map +2 -2
  30. package/dist/cjs/types/FileGallery.d.ts +3 -0
  31. package/dist/cjs/types/FileGallery.js.map +1 -1
  32. package/dist/cjs/types/XAdkChatbot.d.ts +15 -0
  33. package/dist/cjs/types/XAdkChatbot.js.map +1 -1
  34. package/dist/cjs/types/XAdkSender.d.ts +74 -23
  35. package/dist/cjs/types/XAdkSender.js.map +1 -1
  36. package/dist/cjs/utils/index.d.ts +1 -0
  37. package/dist/cjs/utils/index.js +3 -1
  38. package/dist/cjs/utils/index.js.map +2 -2
  39. package/dist/cjs/utils/markdownResource.d.ts +7 -0
  40. package/dist/cjs/utils/markdownResource.js +73 -0
  41. package/dist/cjs/utils/markdownResource.js.map +7 -0
  42. package/dist/esm/components/FileGallery/index.js +22 -16
  43. package/dist/esm/components/FileGallery/index.js.map +1 -1
  44. package/dist/esm/components/FileGallery/styles.d.ts +7 -0
  45. package/dist/esm/components/FileGallery/styles.js +24 -17
  46. package/dist/esm/components/FileGallery/styles.js.map +1 -1
  47. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.d.ts +7 -1
  48. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.js +57 -7
  49. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.js.map +1 -1
  50. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.d.ts +3 -0
  51. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.js +5 -2
  52. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.js.map +1 -1
  53. package/dist/esm/components/XAdkChatbot/index.js +20 -6
  54. package/dist/esm/components/XAdkChatbot/index.js.map +1 -1
  55. package/dist/esm/components/XAdkChatbot/styles.js +1 -1
  56. package/dist/esm/components/XAdkChatbot/styles.js.map +1 -1
  57. package/dist/esm/components/XAdkSender/InlineTagInput.d.ts +11 -5
  58. package/dist/esm/components/XAdkSender/InlineTagInput.js +185 -117
  59. package/dist/esm/components/XAdkSender/InlineTagInput.js.map +1 -1
  60. package/dist/esm/components/XAdkSender/InputTags.d.ts +2 -2
  61. package/dist/esm/components/XAdkSender/InputTags.js +9 -9
  62. package/dist/esm/components/XAdkSender/InputTags.js.map +1 -1
  63. package/dist/esm/components/XAdkSender/index.js +124 -77
  64. package/dist/esm/components/XAdkSender/index.js.map +1 -1
  65. package/dist/esm/components/XAdkSender/styles.d.ts +4 -0
  66. package/dist/esm/components/XAdkSender/styles.js +29 -25
  67. package/dist/esm/components/XAdkSender/styles.js.map +1 -1
  68. package/dist/esm/index.d.ts +2 -1
  69. package/dist/esm/index.js +2 -1
  70. package/dist/esm/index.js.map +1 -1
  71. package/dist/esm/types/FileGallery.d.ts +3 -0
  72. package/dist/esm/types/FileGallery.js.map +1 -1
  73. package/dist/esm/types/XAdkChatbot.d.ts +15 -0
  74. package/dist/esm/types/XAdkChatbot.js.map +1 -1
  75. package/dist/esm/types/XAdkSender.d.ts +74 -23
  76. package/dist/esm/types/XAdkSender.js.map +1 -1
  77. package/dist/esm/utils/index.d.ts +1 -0
  78. package/dist/esm/utils/index.js +1 -0
  79. package/dist/esm/utils/index.js.map +1 -1
  80. package/dist/esm/utils/markdownResource.d.ts +7 -0
  81. package/dist/esm/utils/markdownResource.js +33 -0
  82. package/dist/esm/utils/markdownResource.js.map +1 -0
  83. package/dist/umd/chat-sdk.min.js +1 -1
  84. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
2
- import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
3
2
  import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
4
3
  import _createForOfIteratorHelper from "@babel/runtime/helpers/esm/createForOfIteratorHelper";
4
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
5
5
  import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
6
6
  import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
7
7
  import React, { useState, useRef, useCallback, forwardRef, useImperativeHandle, useMemo, useEffect } from "react";
@@ -59,15 +59,22 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
59
59
  quickKeys = _ref$quickKeys === void 0 ? [] : _ref$quickKeys,
60
60
  _ref$inlineTags = _ref.inlineTags,
61
61
  inlineTags = _ref$inlineTags === void 0 ? false : _ref$inlineTags,
62
+ renderMention = _ref.renderMention,
62
63
  renderTag = _ref.renderTag,
64
+ controlledMentions = _ref.mentions,
63
65
  controlledTags = _ref.tags,
66
+ defaultMentions = _ref.defaultMentions,
64
67
  _ref$defaultTags = _ref.defaultTags,
65
68
  defaultTags = _ref$defaultTags === void 0 ? [] : _ref$defaultTags,
69
+ defaultInputParts = _ref.defaultInputParts,
70
+ onMentionsChange = _ref.onMentionsChange,
66
71
  onTagsChange = _ref.onTagsChange,
67
72
  onQuickKeyTrigger = _ref.onQuickKeyTrigger,
68
73
  _ref$submitFormat = _ref.submitFormat,
69
74
  submitFormat = _ref$submitFormat === void 0 ? "text" : _ref$submitFormat,
70
- formatTag = _ref.formatTag;
75
+ formatMention = _ref.formatMention,
76
+ formatTag = _ref.formatTag,
77
+ transformSubmitData = _ref.transformSubmitData;
71
78
  var styles = useStyles();
72
79
  var isControlled = controlledValue !== undefined;
73
80
  var _useState = useState(defaultValue),
@@ -82,18 +89,21 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
82
89
  onChange === null || onChange === void 0 || onChange(newValue);
83
90
  };
84
91
 
85
- // tags 支持受控/非受控两种模式;inlineTags 打开时会和输入内容混排。
86
- var isTagsControlled = controlledTags !== undefined;
87
- var _useState3 = useState(defaultTags),
92
+ // mentions 支持受控/非受控两种模式;inlineTags 打开时会和输入内容混排。
93
+ var resolvedControlledMentions = controlledMentions !== null && controlledMentions !== void 0 ? controlledMentions : controlledTags;
94
+ var initialMentions = defaultMentions !== null && defaultMentions !== void 0 ? defaultMentions : defaultTags;
95
+ var isMentionsControlled = resolvedControlledMentions !== undefined;
96
+ var _useState3 = useState(initialMentions),
88
97
  _useState4 = _slicedToArray(_useState3, 2),
89
- internalTags = _useState4[0],
90
- setInternalTags = _useState4[1];
91
- var tags = isTagsControlled ? controlledTags : internalTags;
92
- var setTags = function setTags(newTags) {
93
- if (!isTagsControlled) {
94
- setInternalTags(newTags);
98
+ internalMentions = _useState4[0],
99
+ setInternalMentions = _useState4[1];
100
+ var mentions = isMentionsControlled ? resolvedControlledMentions : internalMentions;
101
+ var setMentions = function setMentions(newMentions) {
102
+ if (!isMentionsControlled) {
103
+ setInternalMentions(newMentions);
95
104
  }
96
- onTagsChange === null || onTagsChange === void 0 || onTagsChange(newTags);
105
+ onMentionsChange === null || onMentionsChange === void 0 || onMentionsChange(newMentions);
106
+ onTagsChange === null || onTagsChange === void 0 || onTagsChange(newMentions);
97
107
  };
98
108
  var _useState5 = useState([]),
99
109
  _useState6 = _slicedToArray(_useState5, 2),
@@ -142,26 +152,30 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
142
152
  var escapeMarkdownLabel = function escapeMarkdownLabel(text) {
143
153
  return text.replace(/\\/g, "\\\\").replace(/\]/g, "\\]");
144
154
  };
145
- var getTagSubmitValue = function getTagSubmitValue(tag) {
146
- var _ref3, _ref4, _ref5, _tag$value, _tag$data, _tag$data2;
147
- return String((_ref3 = (_ref4 = (_ref5 = (_tag$value = tag.value) !== null && _tag$value !== void 0 ? _tag$value : (_tag$data = tag.data) === null || _tag$data === void 0 ? void 0 : _tag$data.value) !== null && _ref5 !== void 0 ? _ref5 : (_tag$data2 = tag.data) === null || _tag$data2 === void 0 ? void 0 : _tag$data2.name) !== null && _ref4 !== void 0 ? _ref4 : tag.label) !== null && _ref3 !== void 0 ? _ref3 : "");
155
+ var getMentionSubmitValue = function getMentionSubmitValue(mention) {
156
+ var _ref3, _ref4, _ref5, _ref6, _ref7, _ref8, _ref9, _mention$value, _mention$data, _mention$data2, _mention$data3;
157
+ return String((_ref3 = (_ref4 = (_ref5 = (_ref6 = (_ref7 = (_ref8 = (_ref9 = (_mention$value = mention.value) !== null && _mention$value !== void 0 ? _mention$value : mention.uri) !== null && _ref9 !== void 0 ? _ref9 : (_mention$data = mention.data) === null || _mention$data === void 0 ? void 0 : _mention$data.uri) !== null && _ref8 !== void 0 ? _ref8 : (_mention$data2 = mention.data) === null || _mention$data2 === void 0 ? void 0 : _mention$data2.value) !== null && _ref7 !== void 0 ? _ref7 : (_mention$data3 = mention.data) === null || _mention$data3 === void 0 ? void 0 : _mention$data3.name) !== null && _ref6 !== void 0 ? _ref6 : mention.targetId) !== null && _ref5 !== void 0 ? _ref5 : mention.displayName) !== null && _ref4 !== void 0 ? _ref4 : mention.label) !== null && _ref3 !== void 0 ? _ref3 : "");
148
158
  };
149
- var defaultFormatTag = function defaultFormatTag(tag, format, index) {
150
- var value = getTagSubmitValue(tag);
159
+ var defaultFormatMention = function defaultFormatMention(mention, format, index) {
160
+ var value = getMentionSubmitValue(mention);
151
161
  if (format === "xml") {
152
- return "<tag type=\"".concat(escapeXml(tag.type), "\" id=\"").concat(escapeXml(tag.id), "\" label=\"").concat(escapeXml(tag.label), "\" value=\"").concat(escapeXml(value), "\" />");
162
+ return "<mention type=\"".concat(escapeXml(mention.type), "\" id=\"").concat(escapeXml(mention.id), "\" label=\"").concat(escapeXml(mention.label), "\" value=\"").concat(escapeXml(value), "\" />");
153
163
  }
154
164
  if (format === "markdown") {
155
- return "[/".concat(escapeMarkdownLabel(tag.label), "](xadk-tag://").concat(encodeURIComponent(tag.type), "/").concat(encodeURIComponent(tag.id), ")");
165
+ var href = mention.uri || (value.includes("://") ? value : "xadk-mention://".concat(encodeURIComponent(mention.type), "/").concat(encodeURIComponent(mention.id)));
166
+ return "[@".concat(escapeMarkdownLabel(mention.displayName || mention.label), "](").concat(href, ")");
156
167
  }
157
- return "/".concat(value || "tag-".concat(index + 1));
168
+ return "@".concat(mention.displayName || value || "mention-".concat(index + 1));
158
169
  };
159
- var serializeTag = function serializeTag(tag, format, index) {
160
- var _formatTag;
161
- return (_formatTag = formatTag === null || formatTag === void 0 ? void 0 : formatTag(tag, {
170
+ var serializeMention = function serializeMention(mention, format, index) {
171
+ var _ref10, _formatMention;
172
+ return (_ref10 = (_formatMention = formatMention === null || formatMention === void 0 ? void 0 : formatMention(mention, {
173
+ format: format,
174
+ index: index
175
+ })) !== null && _formatMention !== void 0 ? _formatMention : formatTag === null || formatTag === void 0 ? void 0 : formatTag(mention, {
162
176
  format: format,
163
177
  index: index
164
- })) !== null && _formatTag !== void 0 ? _formatTag : defaultFormatTag(tag, format, index);
178
+ })) !== null && _ref10 !== void 0 ? _ref10 : defaultFormatMention(mention, format, index);
165
179
  };
166
180
  var getSubmitParts = useCallback(function () {
167
181
  if (inlineTags) {
@@ -173,14 +187,14 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
173
187
  type: "text",
174
188
  text: value
175
189
  }] : [];
176
- var tagParts = tags.map(function (tag) {
190
+ var mentionParts = mentions.map(function (mention) {
177
191
  return {
178
- type: "tag",
179
- tag: tag
192
+ type: "mention",
193
+ mention: mention
180
194
  };
181
195
  });
182
- return [].concat(_toConsumableArray(tagParts), textParts);
183
- }, [inlineTags, tags, value]);
196
+ return [].concat(_toConsumableArray(mentionParts), textParts);
197
+ }, [inlineTags, mentions, value]);
184
198
  var serializeParts = function serializeParts(parts, format) {
185
199
  if (format === "structured") {
186
200
  return parts.reduce(function (content, part) {
@@ -190,7 +204,7 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
190
204
  var tagIndex = 0;
191
205
  return parts.map(function (part) {
192
206
  if (part.type === "text") return part.text;
193
- var result = serializeTag(part.tag, format, tagIndex);
207
+ var result = serializeMention(part.mention, format, tagIndex);
194
208
  tagIndex += 1;
195
209
  return result;
196
210
  }).join("");
@@ -200,14 +214,18 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
200
214
  var rawText = parts.reduce(function (content, part) {
201
215
  return content + (part.type === "text" ? part.text : "");
202
216
  }, "");
203
- return {
217
+ var standardData = {
204
218
  text: serializeParts(parts, submitFormat),
205
219
  rawText: rawText,
206
220
  format: submitFormat,
207
221
  parts: parts,
208
222
  files: formattedFiles,
209
- tags: tags
223
+ mentions: mentions,
224
+ tags: mentions
210
225
  };
226
+ return _objectSpread(_objectSpread({}, standardData), {}, {
227
+ payload: transformSubmitData === null || transformSubmitData === void 0 ? void 0 : transformSubmitData(standardData)
228
+ });
211
229
  };
212
230
 
213
231
  // 检查文件类型
@@ -238,8 +256,8 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
238
256
  };
239
257
 
240
258
  // 内置校验器集合
241
- var builtInValidators = [function (_file, _ref6) {
242
- var files = _ref6.files;
259
+ var builtInValidators = [function (_file, _ref11) {
260
+ var files = _ref11.files;
243
261
  if (files.length >= maxFiles) {
244
262
  return "\u6700\u591A\u53EA\u80FD\u4E0A\u4F20 ".concat(maxFiles, " \u4E2A\u6587\u4EF6");
245
263
  }
@@ -255,8 +273,8 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
255
273
  return "不支持的文件类型";
256
274
  }
257
275
  return null;
258
- }, function (file, _ref7) {
259
- var files = _ref7.files;
276
+ }, function (file, _ref12) {
277
+ var files = _ref12.files;
260
278
  if (isDuplicateFile(file, files)) {
261
279
  return "文件已存在";
262
280
  }
@@ -327,14 +345,34 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
327
345
  }
328
346
  }, [files, maxFiles, maxFileSize, allowedFileTypes]);
329
347
 
330
- // 暴露 addFiles 方法
348
+ // 暴露给业务工具栏调用的命令式能力;外部 Popover 选择标签时可插入到当前光标位置。
331
349
  useImperativeHandle(ref, function () {
332
350
  return {
333
351
  addFiles: function addFiles(rawFiles) {
334
352
  handleFileSelect(rawFiles);
353
+ },
354
+ insertMention: function insertMention(mention) {
355
+ if (inlineTags) {
356
+ var _inlineInputRef$curre2;
357
+ (_inlineInputRef$curre2 = inlineInputRef.current) === null || _inlineInputRef$curre2 === void 0 || _inlineInputRef$curre2.insertMention(mention);
358
+ return;
359
+ }
360
+ setMentions([].concat(_toConsumableArray(mentions), [mention]));
361
+ },
362
+ insertTag: function insertTag(mention) {
363
+ if (inlineTags) {
364
+ var _inlineInputRef$curre3;
365
+ (_inlineInputRef$curre3 = inlineInputRef.current) === null || _inlineInputRef$curre3 === void 0 || _inlineInputRef$curre3.insertMention(mention);
366
+ return;
367
+ }
368
+ setMentions([].concat(_toConsumableArray(mentions), [mention]));
369
+ },
370
+ focus: function focus() {
371
+ var _inlineInputRef$curre4, _textareaRef$current;
372
+ inlineTags ? (_inlineInputRef$curre4 = inlineInputRef.current) === null || _inlineInputRef$curre4 === void 0 ? void 0 : _inlineInputRef$curre4.focus() : (_textareaRef$current = textareaRef.current) === null || _textareaRef$current === void 0 ? void 0 : _textareaRef$current.focus();
335
373
  }
336
374
  };
337
- }, [handleFileSelect]);
375
+ }, [handleFileSelect, inlineTags, setMentions, mentions]);
338
376
 
339
377
  // 触发文件选择
340
378
  var triggerFileSelect = function triggerFileSelect() {
@@ -345,7 +383,7 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
345
383
 
346
384
  // 上传文件
347
385
  var uploadFiles = /*#__PURE__*/function () {
348
- var _ref8 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(fileList) {
386
+ var _ref13 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(fileList) {
349
387
  var _iterator2, _step2, _loop;
350
388
  return _regeneratorRuntime().wrap(function _callee$(_context2) {
351
389
  while (1) switch (_context2.prev = _context2.next) {
@@ -460,7 +498,7 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
460
498
  }, _callee, null, [[1, 10, 13, 16]]);
461
499
  }));
462
500
  return function uploadFiles(_x) {
463
- return _ref8.apply(this, arguments);
501
+ return _ref13.apply(this, arguments);
464
502
  };
465
503
  }();
466
504
 
@@ -500,11 +538,11 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
500
538
  }, [allowUpload, handleFileSelect]);
501
539
 
502
540
  // 删除标签
503
- var handleRemoveTag = useCallback(function (id) {
504
- setTags(tags.filter(function (t) {
505
- return t.id !== id;
541
+ var handleRemoveMention = useCallback(function (id) {
542
+ setMentions(mentions.filter(function (item) {
543
+ return item.id !== id;
506
544
  }));
507
- }, [tags, setTags]);
545
+ }, [mentions, setMentions]);
508
546
 
509
547
  // 查找当前活跃的快捷键配置
510
548
  var activeQuickKeyConfig = useMemo(function () {
@@ -570,27 +608,31 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
570
608
  }
571
609
  }, [activeQuickKey, onQuickKeyTrigger, quickKeyTriggerIdx, quickKeys]);
572
610
 
573
- // 选择快捷项后转成结构化 tag;inline 模式会替换掉触发字符和关键词。
611
+ // 选择快捷项后转成结构化 Mention;inline 模式会替换掉触发字符和关键词。
574
612
  var handleQuickKeySelect = useCallback(function (option) {
575
- var _ref9, _option$value, _activeQuickKeyConfig, _inlineInputRef$curre3, _textareaRef$current;
576
- var newTag = {
613
+ var _ref14, _ref15, _option$value, _ref16, _option$targetId, _option$displayName, _activeQuickKeyConfig, _inlineInputRef$curre6, _textareaRef$current2;
614
+ var mentionType = (activeQuickKeyConfig === null || activeQuickKeyConfig === void 0 ? void 0 : activeQuickKeyConfig.mentionType) || (activeQuickKeyConfig === null || activeQuickKeyConfig === void 0 ? void 0 : activeQuickKeyConfig.tagType) || activeQuickKey || "unknown";
615
+ var newMention = {
577
616
  id: generateId(),
578
617
  label: option.label,
579
- type: activeQuickKey || "unknown",
580
- value: (_ref9 = (_option$value = option.value) !== null && _option$value !== void 0 ? _option$value : option.name) !== null && _ref9 !== void 0 ? _ref9 : option.label,
618
+ type: mentionType,
619
+ value: (_ref14 = (_ref15 = (_option$value = option.value) !== null && _option$value !== void 0 ? _option$value : option.uri) !== null && _ref15 !== void 0 ? _ref15 : option.name) !== null && _ref14 !== void 0 ? _ref14 : option.label,
620
+ uri: option.uri,
621
+ targetId: (_ref16 = (_option$targetId = option.targetId) !== null && _option$targetId !== void 0 ? _option$targetId : option.skillNo) !== null && _ref16 !== void 0 ? _ref16 : option.pluginNo,
622
+ displayName: (_option$displayName = option.displayName) !== null && _option$displayName !== void 0 ? _option$displayName : option.label,
581
623
  trigger: activeQuickKey || undefined,
582
624
  icon: option.icon,
583
625
  data: option
584
626
  };
585
627
  activeQuickKeyConfig === null || activeQuickKeyConfig === void 0 || (_activeQuickKeyConfig = activeQuickKeyConfig.onSelect) === null || _activeQuickKeyConfig === void 0 || _activeQuickKeyConfig.call(activeQuickKeyConfig, option);
586
628
  if (inlineTags) {
587
- var _inlineInputRef$curre2;
588
- (_inlineInputRef$curre2 = inlineInputRef.current) === null || _inlineInputRef$curre2 === void 0 || _inlineInputRef$curre2.insertTag(newTag, {
629
+ var _inlineInputRef$curre5;
630
+ (_inlineInputRef$curre5 = inlineInputRef.current) === null || _inlineInputRef$curre5 === void 0 || _inlineInputRef$curre5.insertMention(newMention, {
589
631
  start: quickKeyTriggerIdx,
590
632
  end: quickKeyTriggerIdx + 1 + quickKeyKeyword.length
591
633
  });
592
634
  } else {
593
- setTags([].concat(_toConsumableArray(tags), [newTag]));
635
+ setMentions([].concat(_toConsumableArray(mentions), [newMention]));
594
636
 
595
637
  // 从输入框中删除快捷键字符和关键词
596
638
  if (quickKeyTriggerIdx >= 0) {
@@ -602,8 +644,8 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
602
644
  setQuickKeyKeyword("");
603
645
  setQuickKeyTriggerIdx(-1);
604
646
  setQuickKeyActiveIndex(0);
605
- inlineTags ? (_inlineInputRef$curre3 = inlineInputRef.current) === null || _inlineInputRef$curre3 === void 0 ? void 0 : _inlineInputRef$curre3.focus() : (_textareaRef$current = textareaRef.current) === null || _textareaRef$current === void 0 ? void 0 : _textareaRef$current.focus();
606
- }, [activeQuickKey, activeQuickKeyConfig, inlineTags, tags, setTags, value, quickKeyTriggerIdx, quickKeyKeyword, setValue]);
647
+ inlineTags ? (_inlineInputRef$curre6 = inlineInputRef.current) === null || _inlineInputRef$curre6 === void 0 ? void 0 : _inlineInputRef$curre6.focus() : (_textareaRef$current2 = textareaRef.current) === null || _textareaRef$current2 === void 0 ? void 0 : _textareaRef$current2.focus();
648
+ }, [activeQuickKey, activeQuickKeyConfig, inlineTags, mentions, setMentions, value, quickKeyTriggerIdx, quickKeyKeyword, setValue]);
607
649
 
608
650
  // 处理输入框变化(含快捷键检测)
609
651
  var handleInputChange = function handleInputChange(e) {
@@ -614,10 +656,10 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
614
656
  detectQuickKey(newValue, e.target.selectionStart || 0);
615
657
  };
616
658
  var handleInlineInputChange = function handleInlineInputChange(newValue) {
617
- var _inlineInputRef$curre4;
659
+ var _inlineInputRef$curre7;
618
660
  setValue(newValue);
619
661
  // contenteditable 的 selection 不一定和 React state 同步,需实时读取内部光标 offset。
620
- detectQuickKey(newValue, ((_inlineInputRef$curre4 = inlineInputRef.current) === null || _inlineInputRef$curre4 === void 0 ? void 0 : _inlineInputRef$curre4.getCursorOffset()) || newValue.length);
662
+ detectQuickKey(newValue, ((_inlineInputRef$curre7 = inlineInputRef.current) === null || _inlineInputRef$curre7 === void 0 ? void 0 : _inlineInputRef$curre7.getCursorOffset()) || newValue.length);
621
663
  };
622
664
  var handleQuickKeyByText = function handleQuickKeyByText(text, cursorPos) {
623
665
  var quickKeyChars = quickKeys.map(function (qk) {
@@ -652,17 +694,17 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
652
694
  handleQuickKeyByText(target.value || "", target.selectionStart || 0);
653
695
  };
654
696
  var handleInlineKeyUp = function handleInlineKeyUp(e) {
655
- var _inlineInputRef$curre5, _inlineInputRef$curre6;
697
+ var _inlineInputRef$curre8, _inlineInputRef$curre9;
656
698
  if (activeQuickKey && isQuickListControlKey(e.key)) return;
657
699
  // inline 输入区不是 textarea,不能读 event.target.value,只能从 ref 取纯文本。
658
- var text = ((_inlineInputRef$curre5 = inlineInputRef.current) === null || _inlineInputRef$curre5 === void 0 ? void 0 : _inlineInputRef$curre5.getText()) || "";
659
- var cursorPos = ((_inlineInputRef$curre6 = inlineInputRef.current) === null || _inlineInputRef$curre6 === void 0 ? void 0 : _inlineInputRef$curre6.getCursorOffset()) || text.length;
700
+ var text = ((_inlineInputRef$curre8 = inlineInputRef.current) === null || _inlineInputRef$curre8 === void 0 ? void 0 : _inlineInputRef$curre8.getText()) || "";
701
+ var cursorPos = ((_inlineInputRef$curre9 = inlineInputRef.current) === null || _inlineInputRef$curre9 === void 0 ? void 0 : _inlineInputRef$curre9.getCursorOffset()) || text.length;
660
702
  handleQuickKeyByText(text, cursorPos);
661
703
  };
662
704
 
663
705
  // 处理提交
664
706
  var handleSubmit = function handleSubmit() {
665
- if (!value.trim() && files.length === 0 && tags.length === 0) {
707
+ if (!value.trim() && files.length === 0 && mentions.length === 0) {
666
708
  message.warning("请输入消息或选择文件");
667
709
  return;
668
710
  }
@@ -684,7 +726,7 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
684
726
  onSubmit(createSubmitData(formattedFiles));
685
727
  }
686
728
  setValue("");
687
- setTags([]);
729
+ setMentions([]);
688
730
  setFiles(function (prev) {
689
731
  return prev.filter(function (f) {
690
732
  return f.status !== "success";
@@ -701,7 +743,7 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
701
743
  onSubmit(createSubmitData(formattedFiles));
702
744
  }
703
745
  setValue("");
704
- setTags([]);
746
+ setMentions([]);
705
747
  setFiles(function (prev) {
706
748
  return prev.filter(function (f) {
707
749
  return f.status !== "success";
@@ -770,15 +812,11 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
770
812
  var renderFileList = function renderFileList() {
771
813
  if (files.length === 0) return null;
772
814
  return /*#__PURE__*/_jsx("div", {
773
- style: {
774
- display: "flex",
775
- flexWrap: "wrap",
776
- gap: "8px",
777
- padding: "12px 0"
778
- },
815
+ className: styles.contextFiles,
779
816
  children: files.map(function (file) {
780
817
  return /*#__PURE__*/_jsx(FileGallery, {
781
818
  file: file,
819
+ size: "small",
782
820
  removable: true,
783
821
  onRemove: handleRemoveFile
784
822
  }, file.id);
@@ -794,8 +832,8 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
794
832
  var hasFiles = files.some(function (f) {
795
833
  return f.status === "success";
796
834
  });
797
- var hasTags = tags.length > 0;
798
- var canSend = hasContent || hasFiles || hasTags;
835
+ var hasMentions = mentions.length > 0;
836
+ var canSend = hasContent || hasFiles || hasMentions;
799
837
 
800
838
  // 定义按钮组件
801
839
  var SendButton = function SendButton(props) {
@@ -872,6 +910,8 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
872
910
  }
873
911
  return slot;
874
912
  };
913
+ var headerNode = renderSlot(header, false);
914
+ var fileListNode = allowUpload && files.length > 0 ? renderFileList() : null;
875
915
 
876
916
  // 默认后缀仅保留发送/停止按钮;上传与清空统一放到底部 actionBar,方便业务扩展左侧按钮组。
877
917
  var defaultSuffix = /*#__PURE__*/_jsx("div", {
@@ -911,7 +951,7 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
911
951
  onDragOver: allowUpload && draggable ? handleDragOver : undefined,
912
952
  onDragLeave: allowUpload && draggable ? handleDragLeave : undefined,
913
953
  onDrop: allowUpload && draggable ? handleDrop : undefined,
914
- children: [renderSlot(header, false), allowUpload && files.length > 0 && renderFileList(), allowUpload && /*#__PURE__*/_jsx("input", {
954
+ children: [allowUpload && /*#__PURE__*/_jsx("input", {
915
955
  ref: fileInputRef,
916
956
  type: "file",
917
957
  multiple: true,
@@ -929,22 +969,29 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
929
969
  className: styles.mainArea,
930
970
  children: /*#__PURE__*/_jsxs("div", {
931
971
  className: styles.senderWrap,
932
- children: [!inlineTags && /*#__PURE__*/_jsx(InputTags, {
933
- tags: tags,
934
- onRemove: handleRemoveTag
972
+ children: [(headerNode || fileListNode) && /*#__PURE__*/_jsxs("div", {
973
+ className: styles.contextBar,
974
+ children: [headerNode && /*#__PURE__*/_jsx("div", {
975
+ className: styles.contextHeader,
976
+ children: headerNode
977
+ }), fileListNode]
978
+ }), !inlineTags && /*#__PURE__*/_jsx(InputTags, {
979
+ mentions: mentions,
980
+ onRemove: handleRemoveMention
935
981
  }), /*#__PURE__*/_jsxs("div", {
936
982
  className: styles.inputAndButtons,
937
983
  children: [renderSlot(prefix, false), inlineTags ? /*#__PURE__*/_jsx(InlineTagInput, {
938
984
  ref: inlineInputRef,
939
985
  value: value,
940
- tags: tags,
986
+ mentions: mentions,
987
+ defaultInputParts: defaultInputParts,
941
988
  placeholder: placeholder,
942
989
  disabled: isDisabled,
943
990
  onChange: handleInlineInputChange,
944
- onTagsChange: setTags,
991
+ onMentionsChange: setMentions,
945
992
  onKeyDown: handleKeyDown,
946
993
  onKeyUp: handleInlineKeyUp,
947
- renderTag: renderTag
994
+ renderMention: renderMention !== null && renderMention !== void 0 ? renderMention : renderTag
948
995
  }) : /*#__PURE__*/_jsx("div", {
949
996
  className: styles.textAreaWrapper,
950
997
  children: /*#__PURE__*/_jsx(Input.TextArea, {