@ai-group/chat-sdk 3.7.1-alpha1 → 3.7.1-alpha11

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 (225) hide show
  1. package/README.md +22 -0
  2. package/dist/cjs/components/FileGallery/index.js +59 -40
  3. package/dist/cjs/components/FileGallery/index.js.map +2 -2
  4. package/dist/cjs/components/FileGallery/styles.d.ts +7 -0
  5. package/dist/cjs/components/FileGallery/styles.js +78 -0
  6. package/dist/cjs/components/FileGallery/styles.js.map +2 -2
  7. package/dist/cjs/components/Sources/components/CarouselCard.d.ts +12 -0
  8. package/dist/cjs/components/Sources/components/CarouselCard.js +130 -0
  9. package/dist/cjs/components/Sources/components/CarouselCard.js.map +7 -0
  10. package/dist/cjs/components/Sources/index.d.ts +5 -0
  11. package/dist/cjs/components/Sources/index.js +162 -0
  12. package/dist/cjs/components/Sources/index.js.map +7 -0
  13. package/dist/cjs/components/Sources/styles.d.ts +59 -0
  14. package/dist/cjs/components/Sources/styles.js +179 -0
  15. package/dist/cjs/components/Sources/styles.js.map +7 -0
  16. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.d.ts +19 -1
  17. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.js +232 -22
  18. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.js.map +2 -2
  19. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/styles.d.ts +3 -0
  20. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/styles.js +83 -0
  21. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/styles.js.map +2 -2
  22. package/dist/cjs/components/XAdkChatbot/index.d.ts +2 -2
  23. package/dist/cjs/components/XAdkChatbot/index.js +75 -8
  24. package/dist/cjs/components/XAdkChatbot/index.js.map +2 -2
  25. package/dist/cjs/components/XAdkChatbot/styles.js +1 -1
  26. package/dist/cjs/components/XAdkChatbot/styles.js.map +1 -1
  27. package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.d.ts +7 -2
  28. package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.js +30 -12
  29. package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.js.map +2 -2
  30. package/dist/cjs/components/XAdkProvider/compound/Sender.d.ts +3 -1
  31. package/dist/cjs/components/XAdkProvider/compound/Sender.js +81 -4
  32. package/dist/cjs/components/XAdkProvider/compound/Sender.js.map +3 -3
  33. package/dist/cjs/components/XAdkProvider/compound/styles.d.ts +1 -0
  34. package/dist/cjs/components/XAdkProvider/compound/styles.js +16 -0
  35. package/dist/cjs/components/XAdkProvider/compound/styles.js.map +2 -2
  36. package/dist/cjs/components/XAdkProvider/context/ChatSenderStateContext.d.ts +4 -0
  37. package/dist/cjs/components/XAdkProvider/context/ChatSenderStateContext.js.map +2 -2
  38. package/dist/cjs/components/XAdkProvider/context/DefaultLayoutContext.d.ts +9 -0
  39. package/dist/cjs/components/XAdkProvider/context/DefaultLayoutContext.js +34 -0
  40. package/dist/cjs/components/XAdkProvider/context/DefaultLayoutContext.js.map +7 -0
  41. package/dist/cjs/components/XAdkProvider/context/index.d.ts +5 -4
  42. package/dist/cjs/components/XAdkProvider/context/index.js +3 -1
  43. package/dist/cjs/components/XAdkProvider/context/index.js.map +2 -2
  44. package/dist/cjs/components/XAdkProvider/index.js +11 -10
  45. package/dist/cjs/components/XAdkProvider/index.js.map +2 -2
  46. package/dist/cjs/components/XAdkSender/InlineTagInput.d.ts +12 -5
  47. package/dist/cjs/components/XAdkSender/InlineTagInput.js +419 -121
  48. package/dist/cjs/components/XAdkSender/InlineTagInput.js.map +2 -2
  49. package/dist/cjs/components/XAdkSender/InputTags.d.ts +2 -2
  50. package/dist/cjs/components/XAdkSender/InputTags.js +8 -8
  51. package/dist/cjs/components/XAdkSender/InputTags.js.map +2 -2
  52. package/dist/cjs/components/XAdkSender/index.js +173 -112
  53. package/dist/cjs/components/XAdkSender/index.js.map +3 -3
  54. package/dist/cjs/components/XAdkSender/styles.d.ts +4 -0
  55. package/dist/cjs/components/XAdkSender/styles.js +47 -6
  56. package/dist/cjs/components/XAdkSender/styles.js.map +2 -2
  57. package/dist/cjs/components/XAiConversations/index.js +1 -1
  58. package/dist/cjs/components/XAiConversations/index.js.map +2 -2
  59. package/dist/cjs/components/XAiConversations/styles.js +11 -1
  60. package/dist/cjs/components/XAiConversations/styles.js.map +2 -2
  61. package/dist/cjs/hooks/useADKChat.js +5 -1
  62. package/dist/cjs/hooks/useADKChat.js.map +2 -2
  63. package/dist/cjs/index.d.ts +8 -2
  64. package/dist/cjs/index.js +44 -7
  65. package/dist/cjs/index.js.map +3 -3
  66. package/dist/cjs/presets/base.d.ts +6 -0
  67. package/dist/cjs/presets/base.js +50 -0
  68. package/dist/cjs/presets/base.js.map +7 -0
  69. package/dist/cjs/presets/define.d.ts +11 -0
  70. package/dist/cjs/presets/define.js +58 -0
  71. package/dist/cjs/presets/define.js.map +7 -0
  72. package/dist/cjs/presets/index.d.ts +3 -0
  73. package/dist/cjs/presets/index.js +28 -0
  74. package/dist/cjs/presets/index.js.map +7 -0
  75. package/dist/cjs/presets/runtime.d.ts +22 -0
  76. package/dist/cjs/presets/runtime.js +75 -0
  77. package/dist/cjs/presets/runtime.js.map +7 -0
  78. package/dist/cjs/presets/xgroup/index.d.ts +5 -0
  79. package/dist/cjs/presets/xgroup/index.js +10 -0
  80. package/dist/cjs/presets/xgroup/index.js.map +2 -2
  81. package/dist/cjs/presets/xgroup/knowledgeReference.d.ts +17 -0
  82. package/dist/cjs/presets/xgroup/knowledgeReference.js +162 -0
  83. package/dist/cjs/presets/xgroup/knowledgeReference.js.map +7 -0
  84. package/dist/cjs/presets/xgroup/preset.d.ts +1 -13
  85. package/dist/cjs/presets/xgroup/preset.js +16 -37
  86. package/dist/cjs/presets/xgroup/preset.js.map +2 -2
  87. package/dist/cjs/presets/xgroup/strategies.d.ts +5 -4
  88. package/dist/cjs/presets/xgroup/strategies.js +11 -15
  89. package/dist/cjs/presets/xgroup/strategies.js.map +3 -3
  90. package/dist/cjs/presets/xgroup/webReference.d.ts +10 -0
  91. package/dist/cjs/presets/xgroup/webReference.js +85 -0
  92. package/dist/cjs/presets/xgroup/webReference.js.map +7 -0
  93. package/dist/cjs/types/ChatStrategies.d.ts +11 -2
  94. package/dist/cjs/types/ChatStrategies.js.map +1 -1
  95. package/dist/cjs/types/FileGallery.d.ts +3 -0
  96. package/dist/cjs/types/FileGallery.js.map +1 -1
  97. package/dist/cjs/types/Sources.d.ts +30 -0
  98. package/dist/cjs/types/Sources.js +18 -0
  99. package/dist/cjs/types/Sources.js.map +7 -0
  100. package/dist/cjs/types/XAdkChatbot.d.ts +33 -0
  101. package/dist/cjs/types/XAdkChatbot.js.map +1 -1
  102. package/dist/cjs/types/XAdkSender.d.ts +112 -21
  103. package/dist/cjs/types/XAdkSender.js.map +1 -1
  104. package/dist/cjs/types/index.d.ts +1 -0
  105. package/dist/cjs/types/index.js +3 -1
  106. package/dist/cjs/types/index.js.map +2 -2
  107. package/dist/cjs/utils/index.d.ts +1 -0
  108. package/dist/cjs/utils/index.js +3 -1
  109. package/dist/cjs/utils/index.js.map +2 -2
  110. package/dist/cjs/utils/markdownResource.d.ts +14 -0
  111. package/dist/cjs/utils/markdownResource.js +131 -0
  112. package/dist/cjs/utils/markdownResource.js.map +7 -0
  113. package/dist/esm/components/FileGallery/index.js +22 -16
  114. package/dist/esm/components/FileGallery/index.js.map +1 -1
  115. package/dist/esm/components/FileGallery/styles.d.ts +7 -0
  116. package/dist/esm/components/FileGallery/styles.js +24 -17
  117. package/dist/esm/components/FileGallery/styles.js.map +1 -1
  118. package/dist/esm/components/Sources/components/CarouselCard.d.ts +12 -0
  119. package/dist/esm/components/Sources/components/CarouselCard.js +107 -0
  120. package/dist/esm/components/Sources/components/CarouselCard.js.map +1 -0
  121. package/dist/esm/components/Sources/index.d.ts +5 -0
  122. package/dist/esm/components/Sources/index.js +127 -0
  123. package/dist/esm/components/Sources/index.js.map +1 -0
  124. package/dist/esm/components/Sources/styles.d.ts +59 -0
  125. package/dist/esm/components/Sources/styles.js +34 -0
  126. package/dist/esm/components/Sources/styles.js.map +1 -0
  127. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.d.ts +19 -1
  128. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.js +190 -11
  129. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.js.map +1 -1
  130. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.d.ts +3 -0
  131. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.js +5 -2
  132. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.js.map +1 -1
  133. package/dist/esm/components/XAdkChatbot/index.d.ts +2 -2
  134. package/dist/esm/components/XAdkChatbot/index.js +55 -10
  135. package/dist/esm/components/XAdkChatbot/index.js.map +1 -1
  136. package/dist/esm/components/XAdkChatbot/styles.js +1 -1
  137. package/dist/esm/components/XAdkChatbot/styles.js.map +1 -1
  138. package/dist/esm/components/XAdkProvider/compound/DefaultLayout.d.ts +7 -2
  139. package/dist/esm/components/XAdkProvider/compound/DefaultLayout.js +40 -17
  140. package/dist/esm/components/XAdkProvider/compound/DefaultLayout.js.map +1 -1
  141. package/dist/esm/components/XAdkProvider/compound/Sender.d.ts +3 -1
  142. package/dist/esm/components/XAdkProvider/compound/Sender.js +70 -6
  143. package/dist/esm/components/XAdkProvider/compound/Sender.js.map +1 -1
  144. package/dist/esm/components/XAdkProvider/compound/styles.d.ts +1 -0
  145. package/dist/esm/components/XAdkProvider/compound/styles.js +3 -2
  146. package/dist/esm/components/XAdkProvider/compound/styles.js.map +1 -1
  147. package/dist/esm/components/XAdkProvider/context/ChatSenderStateContext.d.ts +4 -0
  148. package/dist/esm/components/XAdkProvider/context/ChatSenderStateContext.js.map +1 -1
  149. package/dist/esm/components/XAdkProvider/context/DefaultLayoutContext.d.ts +9 -0
  150. package/dist/esm/components/XAdkProvider/context/DefaultLayoutContext.js +9 -0
  151. package/dist/esm/components/XAdkProvider/context/DefaultLayoutContext.js.map +1 -0
  152. package/dist/esm/components/XAdkProvider/context/index.d.ts +5 -4
  153. package/dist/esm/components/XAdkProvider/context/index.js +1 -0
  154. package/dist/esm/components/XAdkProvider/context/index.js.map +1 -1
  155. package/dist/esm/components/XAdkProvider/index.js +7 -3
  156. package/dist/esm/components/XAdkProvider/index.js.map +1 -1
  157. package/dist/esm/components/XAdkSender/InlineTagInput.d.ts +12 -5
  158. package/dist/esm/components/XAdkSender/InlineTagInput.js +408 -111
  159. package/dist/esm/components/XAdkSender/InlineTagInput.js.map +1 -1
  160. package/dist/esm/components/XAdkSender/InputTags.d.ts +2 -2
  161. package/dist/esm/components/XAdkSender/InputTags.js +10 -9
  162. package/dist/esm/components/XAdkSender/InputTags.js.map +1 -1
  163. package/dist/esm/components/XAdkSender/index.js +206 -122
  164. package/dist/esm/components/XAdkSender/index.js.map +1 -1
  165. package/dist/esm/components/XAdkSender/styles.d.ts +4 -0
  166. package/dist/esm/components/XAdkSender/styles.js +29 -25
  167. package/dist/esm/components/XAdkSender/styles.js.map +1 -1
  168. package/dist/esm/components/XAiConversations/index.js +2 -1
  169. package/dist/esm/components/XAiConversations/index.js.map +1 -1
  170. package/dist/esm/components/XAiConversations/styles.js +3 -3
  171. package/dist/esm/components/XAiConversations/styles.js.map +1 -1
  172. package/dist/esm/hooks/useADKChat.js +8 -2
  173. package/dist/esm/hooks/useADKChat.js.map +1 -1
  174. package/dist/esm/index.d.ts +8 -2
  175. package/dist/esm/index.js +7 -3
  176. package/dist/esm/index.js.map +1 -1
  177. package/dist/esm/presets/base.d.ts +6 -0
  178. package/dist/esm/presets/base.js +28 -0
  179. package/dist/esm/presets/base.js.map +1 -0
  180. package/dist/esm/presets/define.d.ts +11 -0
  181. package/dist/esm/presets/define.js +33 -0
  182. package/dist/esm/presets/define.js.map +1 -0
  183. package/dist/esm/presets/index.d.ts +3 -0
  184. package/dist/esm/presets/index.js +4 -0
  185. package/dist/esm/presets/index.js.map +1 -0
  186. package/dist/esm/presets/runtime.d.ts +22 -0
  187. package/dist/esm/presets/runtime.js +45 -0
  188. package/dist/esm/presets/runtime.js.map +1 -0
  189. package/dist/esm/presets/xgroup/index.d.ts +5 -0
  190. package/dist/esm/presets/xgroup/index.js +6 -0
  191. package/dist/esm/presets/xgroup/index.js.map +1 -1
  192. package/dist/esm/presets/xgroup/knowledgeReference.d.ts +17 -0
  193. package/dist/esm/presets/xgroup/knowledgeReference.js +95 -0
  194. package/dist/esm/presets/xgroup/knowledgeReference.js.map +1 -0
  195. package/dist/esm/presets/xgroup/preset.d.ts +1 -13
  196. package/dist/esm/presets/xgroup/preset.js +9 -29
  197. package/dist/esm/presets/xgroup/preset.js.map +1 -1
  198. package/dist/esm/presets/xgroup/strategies.d.ts +5 -4
  199. package/dist/esm/presets/xgroup/strategies.js +8 -20
  200. package/dist/esm/presets/xgroup/strategies.js.map +1 -1
  201. package/dist/esm/presets/xgroup/webReference.d.ts +10 -0
  202. package/dist/esm/presets/xgroup/webReference.js +46 -0
  203. package/dist/esm/presets/xgroup/webReference.js.map +1 -0
  204. package/dist/esm/types/ChatStrategies.d.ts +11 -2
  205. package/dist/esm/types/ChatStrategies.js.map +1 -1
  206. package/dist/esm/types/FileGallery.d.ts +3 -0
  207. package/dist/esm/types/FileGallery.js.map +1 -1
  208. package/dist/esm/types/Sources.d.ts +30 -0
  209. package/dist/esm/types/Sources.js +2 -0
  210. package/dist/esm/types/Sources.js.map +1 -0
  211. package/dist/esm/types/XAdkChatbot.d.ts +33 -0
  212. package/dist/esm/types/XAdkChatbot.js.map +1 -1
  213. package/dist/esm/types/XAdkSender.d.ts +112 -21
  214. package/dist/esm/types/XAdkSender.js.map +1 -1
  215. package/dist/esm/types/index.d.ts +1 -0
  216. package/dist/esm/types/index.js +1 -0
  217. package/dist/esm/types/index.js.map +1 -1
  218. package/dist/esm/utils/index.d.ts +1 -0
  219. package/dist/esm/utils/index.js +1 -0
  220. package/dist/esm/utils/index.js.map +1 -1
  221. package/dist/esm/utils/markdownResource.d.ts +14 -0
  222. package/dist/esm/utils/markdownResource.js +101 -0
  223. package/dist/esm/utils/markdownResource.js.map +1 -0
  224. package/dist/umd/chat-sdk.min.js +1 -1
  225. package/package.json +6 -1
@@ -45,8 +45,8 @@ var import_jsx_runtime = require("react/jsx-runtime");
45
45
  var XAdkSender = (0, import_react.forwardRef)(
46
46
  ({
47
47
  clearBtnShow = true,
48
- allowUpload = false,
49
- draggable = true,
48
+ draggable = false,
49
+ onFileSelect,
50
50
  loading = false,
51
51
  disabled = false,
52
52
  value: controlledValue,
@@ -73,11 +73,20 @@ var XAdkSender = (0, import_react.forwardRef)(
73
73
  footerLeft,
74
74
  quickKeys = [],
75
75
  inlineTags = false,
76
+ renderMention,
76
77
  renderTag,
78
+ mentions: controlledMentions,
77
79
  tags: controlledTags,
80
+ defaultMentions,
78
81
  defaultTags = [],
82
+ defaultInputParts,
83
+ onMentionsChange,
79
84
  onTagsChange,
80
- onQuickKeyTrigger
85
+ onQuickKeyTrigger,
86
+ submitFormat = "text",
87
+ formatMention,
88
+ formatTag,
89
+ transformSubmitData
81
90
  }, ref) => {
82
91
  const styles = (0, import_styles.useStyles)();
83
92
  const isControlled = controlledValue !== void 0;
@@ -89,19 +98,21 @@ var XAdkSender = (0, import_react.forwardRef)(
89
98
  }
90
99
  onChange == null ? void 0 : onChange(newValue);
91
100
  };
92
- const isTagsControlled = controlledTags !== void 0;
93
- const [internalTags, setInternalTags] = (0, import_react.useState)(defaultTags);
94
- const tags = isTagsControlled ? controlledTags : internalTags;
95
- const setTags = (newTags) => {
96
- if (!isTagsControlled) {
97
- setInternalTags(newTags);
101
+ const resolvedControlledMentions = controlledMentions ?? controlledTags;
102
+ const initialMentions = defaultMentions ?? defaultTags;
103
+ const isMentionsControlled = resolvedControlledMentions !== void 0;
104
+ const [internalMentions, setInternalMentions] = (0, import_react.useState)(initialMentions);
105
+ const mentions = isMentionsControlled ? resolvedControlledMentions : internalMentions;
106
+ const setMentions = (newMentions) => {
107
+ if (!isMentionsControlled) {
108
+ setInternalMentions(newMentions);
98
109
  }
99
- onTagsChange == null ? void 0 : onTagsChange(newTags);
110
+ onMentionsChange == null ? void 0 : onMentionsChange(newMentions);
111
+ onTagsChange == null ? void 0 : onTagsChange(newMentions);
100
112
  };
101
113
  const [files, setFiles] = (0, import_react.useState)([]);
102
114
  const [isDragOver, setIsDragOver] = (0, import_react.useState)(false);
103
115
  const containerRef = (0, import_react.useRef)(null);
104
- const fileInputRef = (0, import_react.useRef)(null);
105
116
  const textareaRef = (0, import_react.useRef)(null);
106
117
  const inlineInputRef = (0, import_react.useRef)(null);
107
118
  const [activeQuickKey, setActiveQuickKey] = (0, import_react.useState)(null);
@@ -115,6 +126,76 @@ var XAdkSender = (0, import_react.forwardRef)(
115
126
  const data = (response == null ? void 0 : response.data) ?? response;
116
127
  return (Array.isArray(data) ? data[0] : data) ?? {};
117
128
  };
129
+ const escapeXml = (text) => text.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&apos;");
130
+ const escapeMarkdownLabel = (text) => text.replace(/\\/g, "\\\\").replace(/\]/g, "\\]");
131
+ const getMentionSubmitValue = (mention) => {
132
+ var _a, _b, _c;
133
+ return String(
134
+ mention.value ?? mention.uri ?? ((_a = mention.data) == null ? void 0 : _a.uri) ?? ((_b = mention.data) == null ? void 0 : _b.value) ?? ((_c = mention.data) == null ? void 0 : _c.name) ?? mention.targetId ?? mention.displayName ?? mention.label ?? ""
135
+ );
136
+ };
137
+ const defaultFormatMention = (mention, format, index) => {
138
+ const value2 = getMentionSubmitValue(mention);
139
+ if (format === "xml") {
140
+ return `<mention type="${escapeXml(mention.type)}" id="${escapeXml(mention.id)}" label="${escapeXml(mention.label)}" value="${escapeXml(value2)}" />`;
141
+ }
142
+ if (format === "markdown") {
143
+ const href = mention.uri || (value2.includes("://") ? value2 : `xadk-mention://${encodeURIComponent(mention.type)}/${encodeURIComponent(mention.id)}`);
144
+ return `[@${escapeMarkdownLabel(mention.displayName || mention.label)}](${href})`;
145
+ }
146
+ return `@${mention.displayName || value2 || `mention-${index + 1}`}`;
147
+ };
148
+ const serializeMention = (mention, format, index) => (formatMention == null ? void 0 : formatMention(mention, { format, index })) ?? (formatTag == null ? void 0 : formatTag(mention, { format, index })) ?? defaultFormatMention(mention, format, index);
149
+ const getSubmitParts = (0, import_react.useCallback)(() => {
150
+ var _a;
151
+ if (inlineTags) {
152
+ const parts = ((_a = inlineInputRef.current) == null ? void 0 : _a.getParts()) || [];
153
+ if (parts.length > 0)
154
+ return parts;
155
+ }
156
+ const textParts = value ? [{ type: "text", text: value }] : [];
157
+ const mentionParts = mentions.map((mention) => ({
158
+ type: "mention",
159
+ mention
160
+ }));
161
+ return [...mentionParts, ...textParts];
162
+ }, [inlineTags, mentions, value]);
163
+ const serializeParts = (parts, format) => {
164
+ if (format === "structured") {
165
+ return parts.reduce(
166
+ (content, part) => content + (part.type === "text" ? part.text : ""),
167
+ ""
168
+ );
169
+ }
170
+ let tagIndex = 0;
171
+ return parts.map((part) => {
172
+ if (part.type === "text")
173
+ return part.text;
174
+ const result = serializeMention(part.mention, format, tagIndex);
175
+ tagIndex += 1;
176
+ return result;
177
+ }).join("");
178
+ };
179
+ const createSubmitData = (formattedFiles) => {
180
+ const parts = getSubmitParts();
181
+ const rawText = parts.reduce(
182
+ (content, part) => content + (part.type === "text" ? part.text : ""),
183
+ ""
184
+ );
185
+ const standardData = {
186
+ text: serializeParts(parts, submitFormat),
187
+ rawText,
188
+ format: submitFormat,
189
+ parts,
190
+ files: formattedFiles,
191
+ mentions,
192
+ tags: mentions
193
+ };
194
+ return {
195
+ ...standardData,
196
+ payload: transformSubmitData == null ? void 0 : transformSubmitData(standardData)
197
+ };
198
+ };
118
199
  const checkFileType = (file) => {
119
200
  if ((allowedFileTypes == null ? void 0 : allowedFileTypes.length) > 0) {
120
201
  const ext = (0, import_file.getExt)(file);
@@ -215,15 +296,30 @@ var XAdkSender = (0, import_react.forwardRef)(
215
296
  () => ({
216
297
  addFiles: (rawFiles) => {
217
298
  handleFileSelect(rawFiles);
299
+ },
300
+ insertMention: (mention) => {
301
+ var _a;
302
+ if (inlineTags) {
303
+ (_a = inlineInputRef.current) == null ? void 0 : _a.insertMention(mention);
304
+ return;
305
+ }
306
+ setMentions([...mentions, mention]);
307
+ },
308
+ insertTag: (mention) => {
309
+ var _a;
310
+ if (inlineTags) {
311
+ (_a = inlineInputRef.current) == null ? void 0 : _a.insertMention(mention);
312
+ return;
313
+ }
314
+ setMentions([...mentions, mention]);
315
+ },
316
+ focus: () => {
317
+ var _a, _b;
318
+ inlineTags ? (_a = inlineInputRef.current) == null ? void 0 : _a.focus() : (_b = textareaRef.current) == null ? void 0 : _b.focus();
218
319
  }
219
320
  }),
220
- [handleFileSelect]
321
+ [handleFileSelect, inlineTags, setMentions, mentions]
221
322
  );
222
- const triggerFileSelect = () => {
223
- if (fileInputRef.current) {
224
- fileInputRef.current.click();
225
- }
226
- };
227
323
  const uploadFiles = async (fileList) => {
228
324
  for (const localFile of fileList) {
229
325
  setFiles(
@@ -302,38 +398,38 @@ var XAdkSender = (0, import_react.forwardRef)(
302
398
  (e) => {
303
399
  e.preventDefault();
304
400
  e.stopPropagation();
305
- if (allowUpload) {
401
+ if (draggable) {
306
402
  setIsDragOver(true);
307
403
  }
308
404
  },
309
- [allowUpload]
405
+ [draggable]
310
406
  );
311
407
  const handleDragLeave = (0, import_react.useCallback)(
312
408
  (e) => {
313
409
  e.preventDefault();
314
410
  e.stopPropagation();
315
- if (allowUpload) {
411
+ if (draggable) {
316
412
  setIsDragOver(false);
317
413
  }
318
414
  },
319
- [allowUpload]
415
+ [draggable]
320
416
  );
321
417
  const handleDrop = (0, import_react.useCallback)(
322
418
  (e) => {
323
419
  e.preventDefault();
324
420
  e.stopPropagation();
325
421
  setIsDragOver(false);
326
- if (allowUpload && e.dataTransfer.files && e.dataTransfer.files.length > 0) {
327
- handleFileSelect(Array.from(e.dataTransfer.files));
422
+ if (draggable && e.dataTransfer.files && e.dataTransfer.files.length > 0) {
423
+ onFileSelect == null ? void 0 : onFileSelect(Array.from(e.dataTransfer.files));
328
424
  }
329
425
  },
330
- [allowUpload, handleFileSelect]
426
+ [draggable, onFileSelect]
331
427
  );
332
- const handleRemoveTag = (0, import_react.useCallback)(
428
+ const handleRemoveMention = (0, import_react.useCallback)(
333
429
  (id) => {
334
- setTags(tags.filter((t) => t.id !== id));
430
+ setMentions(mentions.filter((item) => item.id !== id));
335
431
  },
336
- [tags, setTags]
432
+ [mentions, setMentions]
337
433
  );
338
434
  const activeQuickKeyConfig = (0, import_react.useMemo)(() => {
339
435
  if (!activeQuickKey)
@@ -401,21 +497,27 @@ var XAdkSender = (0, import_react.forwardRef)(
401
497
  const handleQuickKeySelect = (0, import_react.useCallback)(
402
498
  (option) => {
403
499
  var _a, _b, _c, _d;
404
- const newTag = {
500
+ const mentionType = (activeQuickKeyConfig == null ? void 0 : activeQuickKeyConfig.mentionType) || (activeQuickKeyConfig == null ? void 0 : activeQuickKeyConfig.tagType) || activeQuickKey || "unknown";
501
+ const newMention = {
405
502
  id: generateId(),
406
503
  label: option.label,
407
- type: activeQuickKey || "unknown",
504
+ type: mentionType,
505
+ value: option.value ?? option.uri ?? option.name ?? option.label,
506
+ uri: option.uri,
507
+ targetId: option.targetId ?? option.skillNo ?? option.pluginNo,
508
+ displayName: option.displayName ?? option.label,
509
+ trigger: activeQuickKey || void 0,
408
510
  icon: option.icon,
409
511
  data: option
410
512
  };
411
513
  (_a = activeQuickKeyConfig == null ? void 0 : activeQuickKeyConfig.onSelect) == null ? void 0 : _a.call(activeQuickKeyConfig, option);
412
514
  if (inlineTags) {
413
- (_b = inlineInputRef.current) == null ? void 0 : _b.insertTag(newTag, {
515
+ (_b = inlineInputRef.current) == null ? void 0 : _b.insertMention(newMention, {
414
516
  start: quickKeyTriggerIdx,
415
517
  end: quickKeyTriggerIdx + 1 + quickKeyKeyword.length
416
518
  });
417
519
  } else {
418
- setTags([...tags, newTag]);
520
+ setMentions([...mentions, newMention]);
419
521
  if (quickKeyTriggerIdx >= 0) {
420
522
  const newValue = value.slice(0, quickKeyTriggerIdx) + value.slice(quickKeyTriggerIdx + 1 + quickKeyKeyword.length);
421
523
  setValue(newValue);
@@ -431,8 +533,8 @@ var XAdkSender = (0, import_react.forwardRef)(
431
533
  activeQuickKey,
432
534
  activeQuickKeyConfig,
433
535
  inlineTags,
434
- tags,
435
- setTags,
536
+ mentions,
537
+ setMentions,
436
538
  value,
437
539
  quickKeyTriggerIdx,
438
540
  quickKeyKeyword,
@@ -485,7 +587,9 @@ var XAdkSender = (0, import_react.forwardRef)(
485
587
  handleQuickKeyByText(text, cursorPos);
486
588
  };
487
589
  const handleSubmit = () => {
488
- if (!value.trim() && files.length === 0 && tags.length === 0) {
590
+ if (loading)
591
+ return;
592
+ if (!value.trim() && files.length === 0 && mentions.length === 0) {
489
593
  import_antd.message.warning("请输入消息或选择文件");
490
594
  return;
491
595
  }
@@ -502,14 +606,10 @@ var XAdkSender = (0, import_react.forwardRef)(
502
606
  onOk: () => {
503
607
  const formattedFiles = formatFilesForServer(successFiles);
504
608
  if (onSubmit) {
505
- onSubmit({
506
- text: value,
507
- files: formattedFiles,
508
- tags
509
- });
609
+ onSubmit(createSubmitData(formattedFiles));
510
610
  }
511
611
  setValue("");
512
- setTags([]);
612
+ setMentions([]);
513
613
  setFiles((prev) => prev.filter((f) => f.status !== "success"));
514
614
  },
515
615
  onCancel: () => {
@@ -519,14 +619,10 @@ var XAdkSender = (0, import_react.forwardRef)(
519
619
  } else {
520
620
  const formattedFiles = formatFilesForServer(successFiles);
521
621
  if (onSubmit) {
522
- onSubmit({
523
- text: value,
524
- files: formattedFiles,
525
- tags
526
- });
622
+ onSubmit(createSubmitData(formattedFiles));
527
623
  }
528
624
  setValue("");
529
- setTags([]);
625
+ setMentions([]);
530
626
  setFiles((prev) => prev.filter((f) => f.status !== "success"));
531
627
  }
532
628
  };
@@ -583,34 +679,25 @@ var XAdkSender = (0, import_react.forwardRef)(
583
679
  const renderFileList = () => {
584
680
  if (files.length === 0)
585
681
  return null;
586
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
587
- "div",
682
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.contextFiles, children: files.map((file) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
683
+ import_FileGallery.default,
588
684
  {
589
- style: {
590
- display: "flex",
591
- flexWrap: "wrap",
592
- gap: "8px",
593
- padding: "12px 0"
594
- },
595
- children: files.map((file) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
596
- import_FileGallery.default,
597
- {
598
- file,
599
- removable: true,
600
- onRemove: handleRemoveFile
601
- },
602
- file.id
603
- ))
604
- }
605
- );
685
+ file,
686
+ size: "small",
687
+ removable: true,
688
+ onRemove: handleRemoveFile
689
+ },
690
+ file.id
691
+ )) });
606
692
  };
607
693
  const containerClass = `${styles.container} ${isDragOver ? "drag-over" : ""}`;
608
694
  const uploading = files.some((f) => f.status === "uploading");
609
- const isDisabled = disabled || uploading || loading;
695
+ const controlsDisabled = disabled || uploading || loading;
696
+ const inputDisabled = disabled || uploading;
610
697
  const hasContent = value.trim().length > 0;
611
698
  const hasFiles = files.some((f) => f.status === "success");
612
- const hasTags = tags.length > 0;
613
- const canSend = hasContent || hasFiles || hasTags;
699
+ const hasMentions = mentions.length > 0;
700
+ const canSend = hasContent || hasFiles || hasMentions;
614
701
  const SendButton = (props) => {
615
702
  if (sendButtonRender) {
616
703
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children: sendButtonRender({
@@ -633,17 +720,6 @@ var XAdkSender = (0, import_react.forwardRef)(
633
720
  }
634
721
  ) });
635
722
  };
636
- const UploadButton = (props) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_antd.Tooltip, { title: "上传文件", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
637
- "button",
638
- {
639
- className: `${styles.iconButton} ${styles.uploadButton}`,
640
- onClick: triggerFileSelect,
641
- disabled: isDisabled,
642
- "aria-label": "上传文件",
643
- ...props,
644
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.PaperClipOutlined, {})
645
- }
646
- ) });
647
723
  const ClearButton = (props) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
648
724
  import_antd.Popconfirm,
649
725
  {
@@ -652,12 +728,12 @@ var XAdkSender = (0, import_react.forwardRef)(
652
728
  placement: "top",
653
729
  okText: "确定",
654
730
  cancelText: "取消",
655
- disabled: isDisabled,
731
+ disabled: controlsDisabled,
656
732
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
657
733
  "button",
658
734
  {
659
735
  className: `${styles.iconButton} ${styles.clearButton}`,
660
- disabled: isDisabled,
736
+ disabled: controlsDisabled,
661
737
  "aria-label": "清空聊天记录",
662
738
  ...props,
663
739
  children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.ClearOutlined, {})
@@ -667,7 +743,6 @@ var XAdkSender = (0, import_react.forwardRef)(
667
743
  );
668
744
  const actionsComponents = {
669
745
  SendButton,
670
- UploadButton,
671
746
  ClearButton
672
747
  };
673
748
  const renderSlot = (slot, oriNode) => {
@@ -681,6 +756,8 @@ var XAdkSender = (0, import_react.forwardRef)(
681
756
  }
682
757
  return slot;
683
758
  };
759
+ const headerNode = renderSlot(header, false);
760
+ const fileListNode = files.length > 0 ? renderFileList() : null;
684
761
  const defaultSuffix = /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.buttonGroup, children: sendButtonRender ? sendButtonRender({
685
762
  loading,
686
763
  disabled: uploading || disabled,
@@ -698,10 +775,7 @@ var XAdkSender = (0, import_react.forwardRef)(
698
775
  }
699
776
  ) }) });
700
777
  const defaultActionBar = /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.actionBar, children: [
701
- /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.actionBarLeft, children: [
702
- allowUpload && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(UploadButton, {}),
703
- renderSlot(footerLeft, false)
704
- ] }),
778
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.actionBarLeft, children: renderSlot(footerLeft, false) }),
705
779
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.actionBarRight, children: [
706
780
  clearBtnShow && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ClearButton, {}),
707
781
  renderSlot(suffix, defaultSuffix)
@@ -712,30 +786,16 @@ var XAdkSender = (0, import_react.forwardRef)(
712
786
  {
713
787
  ref: containerRef,
714
788
  className: containerClass,
715
- onDragOver: allowUpload && draggable ? handleDragOver : void 0,
716
- onDragLeave: allowUpload && draggable ? handleDragLeave : void 0,
717
- onDrop: allowUpload && draggable ? handleDrop : void 0,
789
+ onDragOver: draggable ? handleDragOver : void 0,
790
+ onDragLeave: draggable ? handleDragLeave : void 0,
791
+ onDrop: draggable ? handleDrop : void 0,
718
792
  children: [
719
- renderSlot(header, false),
720
- allowUpload && files.length > 0 && renderFileList(),
721
- allowUpload && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
722
- "input",
723
- {
724
- ref: fileInputRef,
725
- type: "file",
726
- multiple: true,
727
- accept: allowedFileTypes.join(","),
728
- style: { display: "none" },
729
- onChange: (e) => {
730
- if (e.target.files) {
731
- handleFileSelect(Array.from(e.target.files));
732
- e.target.value = "";
733
- }
734
- }
735
- }
736
- ),
737
793
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.mainArea, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.senderWrap, children: [
738
- !inlineTags && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_InputTags.default, { tags, onRemove: handleRemoveTag }),
794
+ (headerNode || fileListNode) && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.contextBar, children: [
795
+ headerNode && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.contextHeader, children: headerNode }),
796
+ fileListNode
797
+ ] }),
798
+ !inlineTags && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_InputTags.default, { mentions, onRemove: handleRemoveMention }),
739
799
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.inputAndButtons, children: [
740
800
  renderSlot(prefix, false),
741
801
  inlineTags ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
@@ -743,14 +803,15 @@ var XAdkSender = (0, import_react.forwardRef)(
743
803
  {
744
804
  ref: inlineInputRef,
745
805
  value,
746
- tags,
806
+ mentions,
807
+ defaultInputParts,
747
808
  placeholder,
748
- disabled: isDisabled,
809
+ disabled: inputDisabled,
749
810
  onChange: handleInlineInputChange,
750
- onTagsChange: setTags,
811
+ onMentionsChange: setMentions,
751
812
  onKeyDown: handleKeyDown,
752
813
  onKeyUp: handleInlineKeyUp,
753
- renderTag
814
+ renderMention: renderMention ?? renderTag
754
815
  }
755
816
  ) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.textAreaWrapper, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
756
817
  import_antd.Input.TextArea,