@ai-group/chat-sdk 3.7.1-alpha3 → 3.7.1-alpha5

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 (82) hide show
  1. package/dist/cjs/components/FileGallery/styles.js +21 -1
  2. package/dist/cjs/components/FileGallery/styles.js.map +2 -2
  3. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.d.ts +9 -1
  4. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.js +102 -22
  5. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.js.map +2 -2
  6. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/styles.d.ts +3 -0
  7. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/styles.js +39 -0
  8. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/styles.js.map +2 -2
  9. package/dist/cjs/components/XAdkChatbot/index.js +42 -5
  10. package/dist/cjs/components/XAdkChatbot/index.js.map +2 -2
  11. package/dist/cjs/components/XAdkChatbot/styles.js +1 -1
  12. package/dist/cjs/components/XAdkChatbot/styles.js.map +1 -1
  13. package/dist/cjs/components/XAdkSender/InlineTagInput.d.ts +11 -5
  14. package/dist/cjs/components/XAdkSender/InlineTagInput.js +119 -77
  15. package/dist/cjs/components/XAdkSender/InlineTagInput.js.map +2 -2
  16. package/dist/cjs/components/XAdkSender/InputTags.d.ts +2 -2
  17. package/dist/cjs/components/XAdkSender/InputTags.js +8 -8
  18. package/dist/cjs/components/XAdkSender/InputTags.js.map +2 -2
  19. package/dist/cjs/components/XAdkSender/index.js +73 -45
  20. package/dist/cjs/components/XAdkSender/index.js.map +2 -2
  21. package/dist/cjs/index.d.ts +2 -1
  22. package/dist/cjs/index.js +7 -0
  23. package/dist/cjs/index.js.map +2 -2
  24. package/dist/cjs/presets/xgroup/preset.js +2 -1
  25. package/dist/cjs/presets/xgroup/preset.js.map +2 -2
  26. package/dist/cjs/presets/xgroup/strategies.d.ts +5 -1
  27. package/dist/cjs/presets/xgroup/strategies.js +16 -1
  28. package/dist/cjs/presets/xgroup/strategies.js.map +3 -3
  29. package/dist/cjs/types/ChatStrategies.d.ts +5 -0
  30. package/dist/cjs/types/ChatStrategies.js.map +1 -1
  31. package/dist/cjs/types/XAdkChatbot.d.ts +15 -0
  32. package/dist/cjs/types/XAdkChatbot.js.map +1 -1
  33. package/dist/cjs/types/XAdkSender.d.ts +62 -24
  34. package/dist/cjs/types/XAdkSender.js.map +1 -1
  35. package/dist/cjs/utils/index.d.ts +1 -0
  36. package/dist/cjs/utils/index.js +3 -1
  37. package/dist/cjs/utils/index.js.map +2 -2
  38. package/dist/cjs/utils/markdownResource.d.ts +11 -0
  39. package/dist/cjs/utils/markdownResource.js +79 -0
  40. package/dist/cjs/utils/markdownResource.js.map +7 -0
  41. package/dist/esm/components/FileGallery/styles.js +2 -2
  42. package/dist/esm/components/FileGallery/styles.js.map +1 -1
  43. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.d.ts +9 -1
  44. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.js +64 -7
  45. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.js.map +1 -1
  46. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.d.ts +3 -0
  47. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.js +5 -2
  48. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.js.map +1 -1
  49. package/dist/esm/components/XAdkChatbot/index.js +25 -6
  50. package/dist/esm/components/XAdkChatbot/index.js.map +1 -1
  51. package/dist/esm/components/XAdkChatbot/styles.js +1 -1
  52. package/dist/esm/components/XAdkChatbot/styles.js.map +1 -1
  53. package/dist/esm/components/XAdkSender/InlineTagInput.d.ts +11 -5
  54. package/dist/esm/components/XAdkSender/InlineTagInput.js +125 -97
  55. package/dist/esm/components/XAdkSender/InlineTagInput.js.map +1 -1
  56. package/dist/esm/components/XAdkSender/InputTags.d.ts +2 -2
  57. package/dist/esm/components/XAdkSender/InputTags.js +9 -9
  58. package/dist/esm/components/XAdkSender/InputTags.js.map +1 -1
  59. package/dist/esm/components/XAdkSender/index.js +97 -71
  60. package/dist/esm/components/XAdkSender/index.js.map +1 -1
  61. package/dist/esm/index.d.ts +2 -1
  62. package/dist/esm/index.js +2 -1
  63. package/dist/esm/index.js.map +1 -1
  64. package/dist/esm/presets/xgroup/preset.js +3 -2
  65. package/dist/esm/presets/xgroup/preset.js.map +1 -1
  66. package/dist/esm/presets/xgroup/strategies.d.ts +5 -1
  67. package/dist/esm/presets/xgroup/strategies.js +12 -1
  68. package/dist/esm/presets/xgroup/strategies.js.map +1 -1
  69. package/dist/esm/types/ChatStrategies.d.ts +5 -0
  70. package/dist/esm/types/ChatStrategies.js.map +1 -1
  71. package/dist/esm/types/XAdkChatbot.d.ts +15 -0
  72. package/dist/esm/types/XAdkChatbot.js.map +1 -1
  73. package/dist/esm/types/XAdkSender.d.ts +62 -24
  74. package/dist/esm/types/XAdkSender.js.map +1 -1
  75. package/dist/esm/utils/index.d.ts +1 -0
  76. package/dist/esm/utils/index.js +1 -0
  77. package/dist/esm/utils/index.js.map +1 -1
  78. package/dist/esm/utils/markdownResource.d.ts +11 -0
  79. package/dist/esm/utils/markdownResource.js +36 -0
  80. package/dist/esm/utils/markdownResource.js.map +1 -0
  81. package/dist/umd/chat-sdk.min.js +1 -1
  82. package/package.json +1 -1
@@ -26,7 +26,7 @@ var import_react = require("react");
26
26
  var import_client = require("react-dom/client");
27
27
  var import_styles = require("./styles");
28
28
  var import_jsx_runtime = require("react/jsx-runtime");
29
- var TAG_ATTR = "data-xadk-inline-tag-id";
29
+ var MENTION_ATTR = "data-xadk-inline-mention-id";
30
30
  var CARET_TEXT = "​";
31
31
  var createTextNode = (text) => document.createTextNode(text);
32
32
  var useIsomorphicLayoutEffect = typeof window === "undefined" ? import_react.useEffect : import_react.useLayoutEffect;
@@ -45,35 +45,41 @@ var toRawOffset = (text, plainOffset) => {
45
45
  var InlineTagInput = (0, import_react.forwardRef)(
46
46
  ({
47
47
  value,
48
- tags,
48
+ mentions,
49
+ defaultInputParts,
49
50
  placeholder,
50
51
  disabled,
51
52
  onChange,
52
- onTagsChange,
53
+ onMentionsChange,
53
54
  onKeyDown,
54
55
  onKeyUp,
55
- renderTag
56
+ renderMention
56
57
  }, ref) => {
57
58
  const styles = (0, import_styles.useStyles)();
58
59
  const editorRef = (0, import_react.useRef)(null);
59
- const latestTagsRef = (0, import_react.useRef)(tags);
60
+ const latestMentionsRef = (0, import_react.useRef)(mentions);
60
61
  const tagRootMapRef = (0, import_react.useRef)(/* @__PURE__ */ new WeakMap());
61
62
  const composingRef = (0, import_react.useRef)(false);
62
63
  const lastInsertedCaretRef = (0, import_react.useRef)(null);
63
64
  const savedRangeRef = (0, import_react.useRef)(null);
65
+ const defaultInputPartsAppliedRef = (0, import_react.useRef)(false);
64
66
  const lastEmittedStateRef = (0, import_react.useRef)({
65
67
  value,
66
- tagIds: tags.map((tag) => tag.id).join("|")
68
+ mentionIds: mentions.map((mention) => mention.id).join("|")
67
69
  });
68
70
  (0, import_react.useEffect)(() => {
69
- latestTagsRef.current = tags;
70
- }, [tags]);
71
- const getOrderedTags = (0, import_react.useCallback)(() => {
71
+ latestMentionsRef.current = mentions;
72
+ }, [mentions]);
73
+ const getOrderedMentions = (0, import_react.useCallback)(() => {
72
74
  const editor = editorRef.current;
73
75
  if (!editor)
74
76
  return [];
75
- const tagMap = new Map(latestTagsRef.current.map((tag) => [tag.id, tag]));
76
- return Array.from(editor.querySelectorAll(`[${TAG_ATTR}]`)).map((node) => tagMap.get(node.dataset.xadkInlineTagId || "")).filter(Boolean);
77
+ const mentionMap = new Map(
78
+ latestMentionsRef.current.map((mention) => [mention.id, mention])
79
+ );
80
+ return Array.from(editor.querySelectorAll(`[${MENTION_ATTR}]`)).map(
81
+ (node) => mentionMap.get(node.dataset.xadkInlineMentionId || "")
82
+ ).filter(Boolean);
77
83
  }, []);
78
84
  const getPlainText = (0, import_react.useCallback)(() => {
79
85
  const editor = editorRef.current;
@@ -91,7 +97,9 @@ var InlineTagInput = (0, import_react.forwardRef)(
91
97
  const editor = editorRef.current;
92
98
  if (!editor)
93
99
  return [];
94
- const tagMap = new Map(latestTagsRef.current.map((tag) => [tag.id, tag]));
100
+ const mentionMap = new Map(
101
+ latestMentionsRef.current.map((mention) => [mention.id, mention])
102
+ );
95
103
  const parts = [];
96
104
  editor.childNodes.forEach((node) => {
97
105
  if (node.nodeType === Node.TEXT_NODE) {
@@ -100,32 +108,32 @@ var InlineTagInput = (0, import_react.forwardRef)(
100
108
  parts.push({ type: "text", text });
101
109
  return;
102
110
  }
103
- if (node instanceof HTMLElement && node.hasAttribute(TAG_ATTR)) {
104
- const tagId = node.dataset.xadkInlineTagId || "";
105
- const tag = tagMap.get(tagId);
106
- if (tag)
107
- parts.push({ type: "tag", tag });
111
+ if (node instanceof HTMLElement && node.hasAttribute(MENTION_ATTR)) {
112
+ const mentionId = node.dataset.xadkInlineMentionId || "";
113
+ const mention = mentionMap.get(mentionId);
114
+ if (mention)
115
+ parts.push({ type: "mention", mention });
108
116
  }
109
117
  });
110
118
  return parts;
111
119
  }, []);
112
120
  const emitChange = (0, import_react.useCallback)(() => {
113
121
  const nextValue = getPlainText();
114
- const nextTags = getOrderedTags();
122
+ const nextMentions = getOrderedMentions();
115
123
  lastEmittedStateRef.current = {
116
124
  value: nextValue,
117
- tagIds: nextTags.map((tag) => tag.id).join("|")
125
+ mentionIds: nextMentions.map((mention) => mention.id).join("|")
118
126
  };
119
127
  onChange(nextValue);
120
- onTagsChange(nextTags);
121
- }, [getOrderedTags, getPlainText, onChange, onTagsChange]);
128
+ onMentionsChange(nextMentions);
129
+ }, [getOrderedMentions, getPlainText, onChange, onMentionsChange]);
122
130
  const removeTextRange = (0, import_react.useCallback)((node, start, end) => {
123
131
  const text = node.textContent || "";
124
132
  node.textContent = `${text.slice(0, start)}${text.slice(end)}`;
125
133
  if (!node.textContent)
126
134
  node.remove();
127
135
  }, []);
128
- const removeTagNode = (0, import_react.useCallback)(
136
+ const removeMentionNode = (0, import_react.useCallback)(
129
137
  (node) => {
130
138
  var _a, _b, _c;
131
139
  const previous = node.previousSibling;
@@ -150,50 +158,76 @@ var InlineTagInput = (0, import_react.forwardRef)(
150
158
  },
151
159
  [removeTextRange]
152
160
  );
153
- const removeTagById = (0, import_react.useCallback)(
161
+ const removeMentionById = (0, import_react.useCallback)(
154
162
  (id) => {
155
163
  const editor = editorRef.current;
156
- const node = Array.from((editor == null ? void 0 : editor.querySelectorAll(`[${TAG_ATTR}]`)) || []).find(
157
- (item) => item.dataset.xadkInlineTagId === id
164
+ const node = Array.from(
165
+ (editor == null ? void 0 : editor.querySelectorAll(`[${MENTION_ATTR}]`)) || []
166
+ ).find(
167
+ (item) => item.dataset.xadkInlineMentionId === id
158
168
  );
159
169
  if (node) {
160
- removeTagNode(node);
170
+ removeMentionNode(node);
161
171
  }
162
172
  emitChange();
163
173
  editor == null ? void 0 : editor.focus();
164
174
  },
165
- [emitChange, removeTagNode]
175
+ [emitChange, removeMentionNode]
166
176
  );
167
- const buildTagNode = (0, import_react.useCallback)(
168
- (tag) => {
177
+ const buildMentionNode = (0, import_react.useCallback)(
178
+ (mention) => {
169
179
  const span = document.createElement("span");
170
180
  span.setAttribute("contenteditable", "false");
171
- span.setAttribute(TAG_ATTR, tag.id);
172
- span.dataset.xadkInlineTagId = tag.id;
181
+ span.setAttribute(MENTION_ATTR, mention.id);
182
+ span.dataset.xadkInlineMentionId = mention.id;
173
183
  span.className = styles.inlineTag;
174
- if (renderTag) {
184
+ if (renderMention) {
175
185
  const root = (0, import_client.createRoot)(span);
176
186
  tagRootMapRef.current.set(span, root);
177
187
  root.render(
178
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children: renderTag(tag, { onRemove: () => removeTagById(tag.id) }) })
188
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children: renderMention(mention, {
189
+ onRemove: () => removeMentionById(mention.id)
190
+ }) })
179
191
  );
180
192
  } else {
181
193
  const label = document.createElement("span");
182
194
  label.className = "xadk-inline-tag-label";
183
- label.textContent = tag.label;
195
+ label.textContent = mention.displayName || mention.label;
184
196
  const close = document.createElement("span");
185
197
  close.className = "xadk-inline-tag-close";
186
198
  close.innerHTML = "×";
187
199
  close.onclick = (event) => {
188
200
  event.preventDefault();
189
201
  event.stopPropagation();
190
- removeTagById(tag.id);
202
+ removeMentionById(mention.id);
191
203
  };
192
204
  span.append(label, close);
193
205
  }
194
206
  return span;
195
207
  },
196
- [removeTagById, renderTag, styles.inlineTag]
208
+ [removeMentionById, renderMention, styles.inlineTag]
209
+ );
210
+ const renderPartsToEditor = (0, import_react.useCallback)(
211
+ (parts) => {
212
+ const editor = editorRef.current;
213
+ if (!editor)
214
+ return;
215
+ editor.querySelectorAll(`[${MENTION_ATTR}]`).forEach((node) => {
216
+ var _a;
217
+ (_a = tagRootMapRef.current.get(node)) == null ? void 0 : _a.unmount();
218
+ });
219
+ editor.innerHTML = "";
220
+ parts.forEach((part) => {
221
+ if (part.type === "text") {
222
+ if (part.text)
223
+ editor.appendChild(createTextNode(part.text));
224
+ return;
225
+ }
226
+ const mention = part.type === "mention" ? part.mention : part.tag;
227
+ editor.append(buildMentionNode(mention), createTextNode(CARET_TEXT));
228
+ });
229
+ },
230
+ [buildMentionNode]
197
231
  );
198
232
  const setCursorAtTextEnd = (0, import_react.useCallback)((node) => {
199
233
  var _a;
@@ -226,41 +260,41 @@ var InlineTagInput = (0, import_react.forwardRef)(
226
260
  },
227
261
  [setCursorAtTextEnd]
228
262
  );
229
- const isTagNode = (node) => node instanceof HTMLElement && node.hasAttribute(TAG_ATTR);
263
+ const isMentionNode = (node) => node instanceof HTMLElement && node.hasAttribute(MENTION_ATTR);
230
264
  const isOnlyCaretText = (text) => normalizeText(text) === "";
231
- const getTagBeforeRange = (range) => {
265
+ const getMentionBeforeRange = (range) => {
232
266
  const container = range.startContainer;
233
267
  if (container.nodeType === Node.TEXT_NODE) {
234
268
  const text = container.textContent || "";
235
269
  const beforeCursor = text.slice(0, range.startOffset);
236
- if (isOnlyCaretText(beforeCursor) && isTagNode(container.previousSibling)) {
270
+ if (isOnlyCaretText(beforeCursor) && isMentionNode(container.previousSibling)) {
237
271
  return container.previousSibling;
238
272
  }
239
273
  }
240
274
  if (container instanceof HTMLElement) {
241
275
  const previous = container.childNodes[range.startOffset - 1];
242
- if (isTagNode(previous))
276
+ if (isMentionNode(previous))
243
277
  return previous;
244
- if ((previous == null ? void 0 : previous.nodeType) === Node.TEXT_NODE && isOnlyCaretText(previous.textContent || "") && isTagNode(previous.previousSibling)) {
278
+ if ((previous == null ? void 0 : previous.nodeType) === Node.TEXT_NODE && isOnlyCaretText(previous.textContent || "") && isMentionNode(previous.previousSibling)) {
245
279
  return previous.previousSibling;
246
280
  }
247
281
  }
248
282
  return null;
249
283
  };
250
- const getTagAfterRange = (range) => {
284
+ const getMentionAfterRange = (range) => {
251
285
  const container = range.startContainer;
252
286
  if (container.nodeType === Node.TEXT_NODE) {
253
287
  const text = container.textContent || "";
254
288
  const afterCursor = text.slice(range.startOffset);
255
- if (isOnlyCaretText(afterCursor) && isTagNode(container.nextSibling)) {
289
+ if (isOnlyCaretText(afterCursor) && isMentionNode(container.nextSibling)) {
256
290
  return container.nextSibling;
257
291
  }
258
292
  }
259
293
  if (container instanceof HTMLElement) {
260
294
  const next = container.childNodes[range.startOffset];
261
- if (isTagNode(next))
295
+ if (isMentionNode(next))
262
296
  return next;
263
- if ((next == null ? void 0 : next.nodeType) === Node.TEXT_NODE && isOnlyCaretText(next.textContent || "") && isTagNode(next.nextSibling)) {
297
+ if ((next == null ? void 0 : next.nodeType) === Node.TEXT_NODE && isOnlyCaretText(next.textContent || "") && isMentionNode(next.nextSibling)) {
264
298
  return next.nextSibling;
265
299
  }
266
300
  }
@@ -286,7 +320,7 @@ var InlineTagInput = (0, import_react.forwardRef)(
286
320
  found = true;
287
321
  return;
288
322
  }
289
- if (node instanceof HTMLElement && node.hasAttribute(TAG_ATTR))
323
+ if (node instanceof HTMLElement && node.hasAttribute(MENTION_ATTR))
290
324
  return;
291
325
  if (node.nodeType === Node.TEXT_NODE) {
292
326
  offset += getPlainLength(node.textContent || "");
@@ -361,32 +395,32 @@ var InlineTagInput = (0, import_react.forwardRef)(
361
395
  }
362
396
  });
363
397
  }, []);
364
- const insertTag = (0, import_react.useCallback)(
365
- (tag, replace) => {
398
+ const insertMention = (0, import_react.useCallback)(
399
+ (mention, replace) => {
366
400
  const editor = editorRef.current;
367
401
  if (!editor)
368
402
  return;
369
403
  editor.focus();
370
- latestTagsRef.current = [
371
- ...latestTagsRef.current.filter((item) => item.id !== tag.id),
372
- tag
404
+ latestMentionsRef.current = [
405
+ ...latestMentionsRef.current.filter((item) => item.id !== mention.id),
406
+ mention
373
407
  ];
374
408
  let insertRange = null;
375
409
  if (replace) {
376
410
  insertRange = replaceTextRange(replace.start, replace.end);
377
411
  cleanupCaretTextNodes();
378
412
  }
379
- const tagNode = buildTagNode(tag);
413
+ const mentionNode = buildMentionNode(mention);
380
414
  const caretNode = createTextNode(CARET_TEXT);
381
415
  const selection = window.getSelection();
382
416
  const savedRange = savedRangeRef.current;
383
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);
384
418
  if (range && editor.contains(range.startContainer)) {
385
419
  const fragment = document.createDocumentFragment();
386
- fragment.append(tagNode, caretNode);
420
+ fragment.append(mentionNode, caretNode);
387
421
  range.insertNode(fragment);
388
422
  } else {
389
- editor.append(tagNode, caretNode);
423
+ editor.append(mentionNode, caretNode);
390
424
  }
391
425
  cleanupCaretTextNodes();
392
426
  lastInsertedCaretRef.current = caretNode;
@@ -399,7 +433,7 @@ var InlineTagInput = (0, import_react.forwardRef)(
399
433
  });
400
434
  },
401
435
  [
402
- buildTagNode,
436
+ buildMentionNode,
403
437
  cleanupCaretTextNodes,
404
438
  emitChange,
405
439
  replaceTextRange,
@@ -421,44 +455,52 @@ var InlineTagInput = (0, import_react.forwardRef)(
421
455
  getText: getPlainText,
422
456
  getParts,
423
457
  getCursorOffset: getOffsetInEditor,
424
- insertTag
425
- }), [getOffsetInEditor, getParts, getPlainText, insertTag]);
458
+ insertMention,
459
+ insertTag: insertMention
460
+ }), [getOffsetInEditor, getParts, getPlainText, insertMention]);
426
461
  useIsomorphicLayoutEffect(() => {
427
462
  const editor = editorRef.current;
428
463
  if (!editor)
429
464
  return;
430
- const incomingTagIds = tags.map((tag) => tag.id).join("|");
465
+ if (!defaultInputPartsAppliedRef.current && (defaultInputParts == null ? void 0 : defaultInputParts.length) && !value && mentions.length === 0) {
466
+ defaultInputPartsAppliedRef.current = true;
467
+ renderPartsToEditor(defaultInputParts);
468
+ emitChange();
469
+ return;
470
+ }
471
+ const incomingMentionIds = mentions.map((mention) => mention.id).join("|");
431
472
  const lastEmittedState = lastEmittedStateRef.current;
432
- const isInternalControlledEcho = value === lastEmittedState.value && incomingTagIds === lastEmittedState.tagIds;
473
+ const isInternalControlledEcho = value === lastEmittedState.value && incomingMentionIds === lastEmittedState.mentionIds;
433
474
  if (isInternalControlledEcho && editor.childNodes.length > 0)
434
475
  return;
435
- editor.querySelectorAll(`[${TAG_ATTR}]`).forEach((node) => {
436
- var _a;
437
- (_a = tagRootMapRef.current.get(node)) == null ? void 0 : _a.unmount();
438
- });
439
- editor.innerHTML = "";
440
- if (value)
441
- editor.appendChild(createTextNode(value));
442
- tags.forEach((tag) => {
443
- editor.append(buildTagNode(tag), createTextNode(CARET_TEXT));
444
- });
476
+ renderPartsToEditor([
477
+ ...value ? [{ type: "text", text: value }] : [],
478
+ ...mentions.map((mention) => ({ type: "mention", mention }))
479
+ ]);
445
480
  const lastTextNode = Array.from(editor.childNodes).reverse().find((node) => node.nodeType === Node.TEXT_NODE);
446
481
  if (document.activeElement === editor && lastTextNode) {
447
482
  setCursorAtTextEnd(lastTextNode);
448
483
  }
449
- }, [buildTagNode, setCursorAtTextEnd, tags, value]);
484
+ }, [
485
+ defaultInputParts,
486
+ emitChange,
487
+ renderPartsToEditor,
488
+ setCursorAtTextEnd,
489
+ mentions,
490
+ value
491
+ ]);
450
492
  useIsomorphicLayoutEffect(() => {
451
493
  const editor = editorRef.current;
452
494
  if (!editor)
453
495
  return;
454
- if (!value && tags.length === 0 && editor.childNodes.length > 0) {
455
- editor.querySelectorAll(`[${TAG_ATTR}]`).forEach((node) => {
496
+ if (!value && mentions.length === 0 && editor.childNodes.length > 0) {
497
+ editor.querySelectorAll(`[${MENTION_ATTR}]`).forEach((node) => {
456
498
  var _a;
457
499
  (_a = tagRootMapRef.current.get(node)) == null ? void 0 : _a.unmount();
458
500
  });
459
501
  editor.innerHTML = "";
460
502
  }
461
- }, [tags.length, value]);
503
+ }, [mentions.length, value]);
462
504
  const handleInput = () => {
463
505
  if (!composingRef.current)
464
506
  emitChange();
@@ -469,10 +511,10 @@ var InlineTagInput = (0, import_react.forwardRef)(
469
511
  if (selection == null ? void 0 : selection.rangeCount) {
470
512
  const range = selection.getRangeAt(0);
471
513
  if (range.collapsed) {
472
- const targetTag = event.key === "Backspace" ? getTagBeforeRange(range) : getTagAfterRange(range);
473
- if (targetTag) {
514
+ const targetMention = event.key === "Backspace" ? getMentionBeforeRange(range) : getMentionAfterRange(range);
515
+ if (targetMention) {
474
516
  event.preventDefault();
475
- removeTagById(targetTag.dataset.xadkInlineTagId || "");
517
+ removeMentionById(targetMention.dataset.xadkInlineMentionId || "");
476
518
  return;
477
519
  }
478
520
  }
@@ -480,7 +522,7 @@ var InlineTagInput = (0, import_react.forwardRef)(
480
522
  }
481
523
  onKeyDown == null ? void 0 : onKeyDown(event);
482
524
  };
483
- const showPlaceholder = !value && tags.length === 0;
525
+ const showPlaceholder = !value && mentions.length === 0;
484
526
  return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: styles.inlineInputWrapper, children: [
485
527
  showPlaceholder && placeholder && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.inlinePlaceholder, children: placeholder }),
486
528
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/XAdkSender/InlineTagInput.tsx"],
4
- "sourcesContent": ["import React, {\n forwardRef,\n useCallback,\n useEffect,\n useLayoutEffect,\n useImperativeHandle,\n useRef,\n} from \"react\";\nimport { createRoot, type Root } from \"react-dom/client\";\nimport type { InlineTagRenderInfo, InputTag, XAdkSenderSubmitPart } from \"@/types\";\nimport { useStyles } from \"./styles\";\n\nexport interface InlineTagInputRef {\n focus: () => void;\n getText: () => string;\n getParts: () => XAdkSenderSubmitPart[];\n getCursorOffset: () => number;\n insertTag: (tag: InputTag, replace?: { start: number; end: number }) => void;\n}\n\nexport interface InlineTagInputProps {\n value: string;\n tags: InputTag[];\n placeholder?: string;\n disabled?: boolean;\n onChange: (value: string) => void;\n onTagsChange: (tags: InputTag[]) => void;\n onKeyDown?: React.KeyboardEventHandler<HTMLDivElement>;\n onKeyUp?: React.KeyboardEventHandler<HTMLDivElement>;\n renderTag?: (tag: InputTag, info: InlineTagRenderInfo) => React.ReactNode;\n}\n\nconst TAG_ATTR = \"data-xadk-inline-tag-id\";\n// contenteditable 无法把光标放进 contenteditable=false 的标签里,需用零宽字符承接“标签后方”的光标。\nconst CARET_TEXT = \"\\u200B\";\n\nconst createTextNode = (text: string) => document.createTextNode(text);\nconst useIsomorphicLayoutEffect =\n typeof window === \"undefined\" ? useEffect : useLayoutEffect;\nconst normalizeText = (text: string) =>\n text.replace(/\\u200B/g, \"\").replace(/\\u00a0/g, \" \");\nconst getPlainLength = (text: string) => normalizeText(text).length;\n// DOM 文本里包含零宽光标锚点,快捷键替换和光标定位都要在“用户可见文本 offset”和 DOM raw offset 之间转换。\nconst toRawOffset = (text: string, plainOffset: number) => {\n let current = 0;\n for (let i = 0; i < text.length; i++) {\n if (current >= plainOffset) return i;\n if (text[i] !== CARET_TEXT) current += 1;\n }\n return text.length;\n};\n\nconst InlineTagInput = forwardRef<InlineTagInputRef, InlineTagInputProps>(\n (\n {\n value,\n tags,\n placeholder,\n disabled,\n onChange,\n onTagsChange,\n onKeyDown,\n onKeyUp,\n renderTag,\n },\n ref,\n ) => {\n const styles = useStyles();\n const editorRef = useRef<HTMLDivElement>(null);\n const latestTagsRef = useRef<InputTag[]>(tags);\n const tagRootMapRef = useRef<WeakMap<Element, Root>>(new WeakMap());\n const composingRef = useRef(false);\n const lastInsertedCaretRef = useRef<Text | null>(null);\n const savedRangeRef = useRef<Range | null>(null);\n const lastEmittedStateRef = useRef({\n value,\n tagIds: tags.map((tag) => tag.id).join(\"|\"),\n });\n\n useEffect(() => {\n latestTagsRef.current = tags;\n }, [tags]);\n\n const getOrderedTags = useCallback(() => {\n const editor = editorRef.current;\n if (!editor) return [];\n const tagMap = new Map(latestTagsRef.current.map((tag) => [tag.id, tag]));\n return Array.from(editor.querySelectorAll(`[${TAG_ATTR}]`))\n .map((node) => tagMap.get((node as HTMLElement).dataset.xadkInlineTagId || \"\"))\n .filter(Boolean) as InputTag[];\n }, []);\n\n // 对外只暴露用户输入的纯文本,内部零宽锚点不进入 value。\n const getPlainText = useCallback(() => {\n const editor = editorRef.current;\n if (!editor) return \"\";\n let text = \"\";\n editor.childNodes.forEach((node) => {\n if (node.nodeType === Node.TEXT_NODE) {\n text += node.textContent || \"\";\n }\n });\n return normalizeText(text);\n }, []);\n\n // 提交时需要保留文本与 tag 的真实顺序;仅靠 value + tags 无法区分 tag 在句首、句中还是句尾。\n const getParts = useCallback((): XAdkSenderSubmitPart[] => {\n const editor = editorRef.current;\n if (!editor) return [];\n const tagMap = new Map(latestTagsRef.current.map((tag) => [tag.id, tag]));\n const parts: XAdkSenderSubmitPart[] = [];\n\n editor.childNodes.forEach((node) => {\n if (node.nodeType === Node.TEXT_NODE) {\n const text = normalizeText(node.textContent || \"\");\n if (text) parts.push({ type: \"text\", text });\n return;\n }\n\n if (node instanceof HTMLElement && node.hasAttribute(TAG_ATTR)) {\n const tagId = node.dataset.xadkInlineTagId || \"\";\n const tag = tagMap.get(tagId);\n if (tag) parts.push({ type: \"tag\", tag });\n }\n });\n\n return parts;\n }, []);\n\n const emitChange = useCallback(() => {\n const nextValue = getPlainText();\n const nextTags = getOrderedTags();\n lastEmittedStateRef.current = {\n value: nextValue,\n tagIds: nextTags.map((tag) => tag.id).join(\"|\"),\n };\n onChange(nextValue);\n onTagsChange(nextTags);\n }, [getOrderedTags, getPlainText, onChange, onTagsChange]);\n\n const removeTextRange = useCallback((node: Text, start: number, end: number) => {\n const text = node.textContent || \"\";\n node.textContent = `${text.slice(0, start)}${text.slice(end)}`;\n if (!node.textContent) node.remove();\n }, []);\n\n const removeTagNode = useCallback(\n (node: Element) => {\n const previous = node.previousSibling;\n const next = node.nextSibling;\n\n tagRootMapRef.current.get(node)?.unmount();\n node.remove();\n\n // 标签后会补一个不可见光标锚点;删除标签时同步清理,避免留下冗余节点。\n if (next?.nodeType === Node.TEXT_NODE) {\n const text = next.textContent || \"\";\n const caretLength = text.match(/^\\u200B+/)?.[0].length || 0;\n if (caretLength > 0) {\n removeTextRange(next as Text, 0, caretLength);\n return;\n }\n }\n\n if (previous?.nodeType === Node.TEXT_NODE) {\n const text = previous.textContent || \"\";\n const spaceLength = text.match(/\\s+$/)?.[0].length || 0;\n if (spaceLength > 0) {\n removeTextRange(previous as Text, text.length - spaceLength, text.length);\n }\n }\n },\n [removeTextRange],\n );\n\n const removeTagById = useCallback(\n (id: string) => {\n const editor = editorRef.current;\n const node = Array.from(editor?.querySelectorAll(`[${TAG_ATTR}]`) || []).find(\n (item) => (item as HTMLElement).dataset.xadkInlineTagId === id,\n );\n if (node) {\n removeTagNode(node);\n }\n emitChange();\n editor?.focus();\n },\n [emitChange, removeTagNode],\n );\n\n // 标签节点本身不可编辑;删除入口通过 onRemove 回到组件内部统一维护 DOM 与 tags。\n const buildTagNode = useCallback(\n (tag: InputTag) => {\n const span = document.createElement(\"span\");\n span.setAttribute(\"contenteditable\", \"false\");\n span.setAttribute(TAG_ATTR, tag.id);\n span.dataset.xadkInlineTagId = tag.id;\n span.className = styles.inlineTag;\n\n if (renderTag) {\n const root = createRoot(span);\n tagRootMapRef.current.set(span, root);\n root.render(\n <>{renderTag(tag, { onRemove: () => removeTagById(tag.id) })}</>,\n );\n } else {\n const label = document.createElement(\"span\");\n label.className = \"xadk-inline-tag-label\";\n label.textContent = tag.label;\n const close = document.createElement(\"span\");\n close.className = \"xadk-inline-tag-close\";\n close.innerHTML = \"×\";\n close.onclick = (event) => {\n event.preventDefault();\n event.stopPropagation();\n removeTagById(tag.id);\n };\n span.append(label, close);\n }\n return span;\n },\n [removeTagById, renderTag, styles.inlineTag],\n );\n\n const setCursorAtTextEnd = useCallback((node: Text) => {\n const range = document.createRange();\n const selection = window.getSelection();\n range.setStart(node, node.textContent?.length || 0);\n range.collapse(true);\n selection?.removeAllRanges();\n selection?.addRange(range);\n savedRangeRef.current = range.cloneRange();\n }, []);\n\n const saveSelectionRange = useCallback(() => {\n const editor = editorRef.current;\n const selection = window.getSelection();\n if (!editor || !selection || selection.rangeCount === 0) return;\n const range = selection.getRangeAt(0);\n if (!editor.contains(range.startContainer) || !editor.contains(range.endContainer)) {\n return;\n }\n savedRangeRef.current = range.cloneRange();\n }, []);\n\n const restoreCursorAfterInsert = useCallback(\n (node: Text) => {\n const editor = editorRef.current;\n if (!editor || !editor.contains(node)) return;\n editor.focus();\n setCursorAtTextEnd(node);\n },\n [setCursorAtTextEnd],\n );\n\n const isTagNode = (node: Node | null): node is HTMLElement =>\n node instanceof HTMLElement && node.hasAttribute(TAG_ATTR);\n\n const isOnlyCaretText = (text: string) => normalizeText(text) === \"\";\n\n // Backspace/Delete 需要跨过零宽锚点识别相邻标签,不能只看光标所在文本节点。\n const getTagBeforeRange = (range: Range) => {\n const container = range.startContainer;\n if (container.nodeType === Node.TEXT_NODE) {\n const text = container.textContent || \"\";\n const beforeCursor = text.slice(0, range.startOffset);\n if (isOnlyCaretText(beforeCursor) && isTagNode(container.previousSibling)) {\n return container.previousSibling;\n }\n }\n\n if (container instanceof HTMLElement) {\n const previous = container.childNodes[range.startOffset - 1];\n if (isTagNode(previous)) return previous;\n if (\n previous?.nodeType === Node.TEXT_NODE &&\n isOnlyCaretText(previous.textContent || \"\") &&\n isTagNode(previous.previousSibling)\n ) {\n return previous.previousSibling;\n }\n }\n\n return null;\n };\n\n const getTagAfterRange = (range: Range) => {\n const container = range.startContainer;\n if (container.nodeType === Node.TEXT_NODE) {\n const text = container.textContent || \"\";\n const afterCursor = text.slice(range.startOffset);\n if (isOnlyCaretText(afterCursor) && isTagNode(container.nextSibling)) {\n return container.nextSibling;\n }\n }\n\n if (container instanceof HTMLElement) {\n const next = container.childNodes[range.startOffset];\n if (isTagNode(next)) return next;\n if (\n next?.nodeType === Node.TEXT_NODE &&\n isOnlyCaretText(next.textContent || \"\") &&\n isTagNode(next.nextSibling)\n ) {\n return next.nextSibling;\n }\n }\n\n return null;\n };\n\n // 读取光标在纯文本中的位置,供快捷键搜索词和 tag 插入位置复用。\n const getOffsetInEditor = useCallback(() => {\n const editor = editorRef.current;\n const selection = window.getSelection();\n if (!editor || !selection || selection.rangeCount === 0) return 0;\n const range = selection.getRangeAt(0);\n let offset = 0;\n let found = false;\n\n const visit = (node: Node) => {\n if (found) return;\n if (node === range.startContainer) {\n if (node.nodeType === Node.TEXT_NODE) {\n offset += getPlainLength(\n (node.textContent || \"\").slice(0, range.startOffset),\n );\n }\n found = true;\n return;\n }\n if (node instanceof HTMLElement && node.hasAttribute(TAG_ATTR)) return;\n if (node.nodeType === Node.TEXT_NODE) {\n offset += getPlainLength(node.textContent || \"\");\n return;\n }\n node.childNodes.forEach(visit);\n };\n\n editor.childNodes.forEach(visit);\n return offset;\n }, []);\n\n const getNodeIndex = (node: Node) => {\n let index = 0;\n let current = node;\n while (current.previousSibling) {\n index += 1;\n current = current.previousSibling;\n }\n return index;\n };\n\n // 删除快捷键触发片段,例如把 “@文档” 替换成一个结构化 tag,并返回删除位置对应的真实 DOM Range。\n // 注意:纯文本 offset 不包含 tag,标签前后可能都是 offset 0;插入 tag 必须依赖真实 Range,不能再反推 offset。\n const replaceTextRange = useCallback((start: number, end: number) => {\n const editor = editorRef.current;\n if (!editor) return null;\n let offset = 0;\n let insertRange: Range | null = null;\n const nodes = Array.from(editor.childNodes);\n nodes.forEach((node) => {\n if (node.nodeType !== Node.TEXT_NODE) return;\n const text = node.textContent || \"\";\n const nodeStart = offset;\n const plainLength = getPlainLength(text);\n const nodeEnd = offset + plainLength;\n offset = nodeEnd;\n if (nodeEnd <= start || nodeStart >= end) return;\n const rawStart = toRawOffset(text, Math.max(0, start - nodeStart));\n const rawEnd = toRawOffset(text, Math.max(0, end - nodeStart));\n const keepLeft = text.slice(0, rawStart);\n const keepRight = text.slice(rawEnd);\n const parent = node.parentNode;\n const nodeIndex = getNodeIndex(node);\n\n node.textContent = `${keepLeft}${keepRight}`;\n if (!insertRange) {\n insertRange = document.createRange();\n if (node.textContent) {\n insertRange.setStart(node, rawStart);\n } else if (parent) {\n insertRange.setStart(parent, nodeIndex);\n }\n insertRange.collapse(true);\n }\n if (!node.textContent) node.remove();\n });\n\n return insertRange;\n }, []);\n\n // 浏览器拆分 Range 后可能留下空文本节点;清理后才能保证后续 tag 继续 append 在队尾。\n const cleanupCaretTextNodes = useCallback(() => {\n const editor = editorRef.current;\n if (!editor) return;\n Array.from(editor.childNodes).forEach((node) => {\n if (node.nodeType !== Node.TEXT_NODE) return;\n const text = node.textContent || \"\";\n if (!text) {\n node.remove();\n return;\n }\n if (text && normalizeText(text) === \"\") {\n node.textContent = CARET_TEXT;\n }\n });\n }, []);\n\n const insertTag = useCallback(\n (tag: InputTag, replace?: { start: number; end: number }) => {\n const editor = editorRef.current;\n if (!editor) return;\n editor.focus();\n latestTagsRef.current = [\n ...latestTagsRef.current.filter((item) => item.id !== tag.id),\n tag,\n ];\n let insertRange: Range | null = null;\n if (replace) {\n insertRange = replaceTextRange(replace.start, replace.end);\n cleanupCaretTextNodes();\n }\n const tagNode = buildTagNode(tag);\n const caretNode = createTextNode(CARET_TEXT);\n const selection = window.getSelection();\n const savedRange = savedRangeRef.current;\n const range =\n insertRange ||\n (selection?.rangeCount &&\n editor.contains(selection.getRangeAt(0).startContainer)\n ? selection.getRangeAt(0)\n : savedRange && editor.contains(savedRange.startContainer)\n ? savedRange\n : null);\n if (range && editor.contains(range.startContainer)) {\n // 用 DocumentFragment 一次性插入,避免连续 insertNode 导致 tag/caret 顺序被浏览器 Range 状态打乱。\n const fragment = document.createDocumentFragment();\n fragment.append(tagNode, caretNode);\n range.insertNode(fragment);\n } else {\n editor.append(tagNode, caretNode);\n }\n cleanupCaretTextNodes();\n lastInsertedCaretRef.current = caretNode;\n setCursorAtTextEnd(caretNode);\n emitChange();\n\n // 关闭快捷列表和父组件同步 tags/value 会触发一次 React 更新;\n // 下一帧再恢复到刚插入 tag 后的零宽锚点,避免光标被 focus 或重渲染带回旧位置。\n window.requestAnimationFrame(() => {\n if (lastInsertedCaretRef.current === caretNode) {\n restoreCursorAfterInsert(caretNode);\n }\n });\n },\n [\n buildTagNode,\n cleanupCaretTextNodes,\n emitChange,\n replaceTextRange,\n restoreCursorAfterInsert,\n setCursorAtTextEnd,\n ],\n );\n\n useEffect(() => {\n document.addEventListener(\"selectionchange\", saveSelectionRange);\n return () => {\n document.removeEventListener(\"selectionchange\", saveSelectionRange);\n };\n }, [saveSelectionRange]);\n\n useImperativeHandle(ref, () => ({\n focus: () => editorRef.current?.focus(),\n getText: getPlainText,\n getParts,\n getCursorOffset: getOffsetInEditor,\n insertTag,\n }), [getOffsetInEditor, getParts, getPlainText, insertTag]);\n\n useIsomorphicLayoutEffect(() => {\n const editor = editorRef.current;\n if (!editor) return;\n\n const incomingTagIds = tags.map((tag) => tag.id).join(\"|\");\n const lastEmittedState = lastEmittedStateRef.current;\n const isInternalControlledEcho =\n value === lastEmittedState.value &&\n incomingTagIds === lastEmittedState.tagIds;\n\n if (isInternalControlledEcho && editor.childNodes.length > 0) return;\n\n editor.querySelectorAll(`[${TAG_ATTR}]`).forEach((node) => {\n tagRootMapRef.current.get(node)?.unmount();\n });\n editor.innerHTML = \"\";\n\n if (value) editor.appendChild(createTextNode(value));\n tags.forEach((tag) => {\n editor.append(buildTagNode(tag), createTextNode(CARET_TEXT));\n });\n\n // 外部主动写入 value/tags 后,需要在首帧绘制前同步 DOM;若输入区已有焦点,则把光标放在内容末尾。\n const lastTextNode = Array.from(editor.childNodes)\n .reverse()\n .find((node): node is Text => node.nodeType === Node.TEXT_NODE);\n if (document.activeElement === editor && lastTextNode) {\n setCursorAtTextEnd(lastTextNode);\n }\n }, [buildTagNode, setCursorAtTextEnd, tags, value]);\n\n useIsomorphicLayoutEffect(() => {\n const editor = editorRef.current;\n if (!editor) return;\n if (!value && tags.length === 0 && editor.childNodes.length > 0) {\n editor.querySelectorAll(`[${TAG_ATTR}]`).forEach((node) => {\n tagRootMapRef.current.get(node)?.unmount();\n });\n editor.innerHTML = \"\";\n }\n }, [tags.length, value]);\n\n const handleInput = () => {\n if (!composingRef.current) emitChange();\n };\n\n const handleKeyDown: React.KeyboardEventHandler<HTMLDivElement> = (event) => {\n if (event.key === \"Backspace\" || event.key === \"Delete\") {\n const selection = window.getSelection();\n if (selection?.rangeCount) {\n const range = selection.getRangeAt(0);\n if (range.collapsed) {\n const targetTag =\n event.key === \"Backspace\"\n ? getTagBeforeRange(range)\n : getTagAfterRange(range);\n\n if (targetTag) {\n event.preventDefault();\n removeTagById(targetTag.dataset.xadkInlineTagId || \"\");\n return;\n }\n }\n }\n }\n onKeyDown?.(event);\n };\n\n // placeholder 只由受控 value/tags 派生,避免从 contenteditable DOM 读取导致外部插入 tag 后状态滞后一帧。\n const showPlaceholder = !value && tags.length === 0;\n\n return (\n <div className={styles.inlineInputWrapper}>\n {showPlaceholder && placeholder && (\n <div className={styles.inlinePlaceholder}>{placeholder}</div>\n )}\n <div\n ref={editorRef}\n className={styles.inlineInput}\n contentEditable={!disabled}\n suppressContentEditableWarning\n role=\"textbox\"\n aria-multiline=\"true\"\n onInput={handleInput}\n onKeyDown={handleKeyDown}\n onKeyUp={(event) => {\n saveSelectionRange();\n onKeyUp?.(event);\n }}\n onMouseUp={saveSelectionRange}\n onFocus={saveSelectionRange}\n onCompositionStart={() => {\n composingRef.current = true;\n }}\n onCompositionEnd={() => {\n composingRef.current = false;\n emitChange();\n }}\n data-cursor-offset={getOffsetInEditor()}\n />\n </div>\n );\n },\n);\n\nInlineTagInput.displayName = \"InlineTagInput\";\n\nexport default InlineTagInput;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import React, {\n forwardRef,\n useCallback,\n useEffect,\n useLayoutEffect,\n useImperativeHandle,\n useRef,\n} from \"react\";\nimport { createRoot, type Root } from \"react-dom/client\";\nimport type {\n InlineTagRenderInfo,\n MentionTag,\n XAdkSenderInputPart,\n XAdkSenderSubmitPart,\n} from \"@/types\";\nimport { useStyles } from \"./styles\";\n\nexport interface InlineTagInputRef {\n focus: () => void;\n getText: () => string;\n getParts: () => XAdkSenderSubmitPart[];\n getCursorOffset: () => number;\n insertMention: (\n mention: MentionTag,\n replace?: { start: number; end: number },\n ) => void;\n /** @deprecated 请使用 insertMention。 */\n insertTag: (mention: MentionTag, replace?: { start: number; end: number }) => void;\n}\n\nexport interface InlineTagInputProps {\n value: string;\n mentions: MentionTag[];\n defaultInputParts?: XAdkSenderInputPart[];\n placeholder?: string;\n disabled?: boolean;\n onChange: (value: string) => void;\n onMentionsChange: (mentions: MentionTag[]) => void;\n onKeyDown?: React.KeyboardEventHandler<HTMLDivElement>;\n onKeyUp?: React.KeyboardEventHandler<HTMLDivElement>;\n renderMention?: (mention: MentionTag, info: InlineTagRenderInfo) => React.ReactNode;\n}\n\nconst MENTION_ATTR = \"data-xadk-inline-mention-id\";\n// contenteditable 无法把光标放进 contenteditable=false 的 Mention 里,需用零宽字符承接“Mention 后方”的光标。\nconst CARET_TEXT = \"\\u200B\";\n\nconst createTextNode = (text: string) => document.createTextNode(text);\nconst useIsomorphicLayoutEffect =\n typeof window === \"undefined\" ? useEffect : useLayoutEffect;\nconst normalizeText = (text: string) =>\n text.replace(/\\u200B/g, \"\").replace(/\\u00a0/g, \" \");\nconst getPlainLength = (text: string) => normalizeText(text).length;\n// DOM 文本里包含零宽光标锚点,快捷键替换和光标定位都要在“用户可见文本 offset”和 DOM raw offset 之间转换。\nconst toRawOffset = (text: string, plainOffset: number) => {\n let current = 0;\n for (let i = 0; i < text.length; i++) {\n if (current >= plainOffset) return i;\n if (text[i] !== CARET_TEXT) current += 1;\n }\n return text.length;\n};\n\nconst InlineTagInput = forwardRef<InlineTagInputRef, InlineTagInputProps>(\n (\n {\n value,\n mentions,\n defaultInputParts,\n placeholder,\n disabled,\n onChange,\n onMentionsChange,\n onKeyDown,\n onKeyUp,\n renderMention,\n },\n ref,\n ) => {\n const styles = useStyles();\n const editorRef = useRef<HTMLDivElement>(null);\n const latestMentionsRef = useRef<MentionTag[]>(mentions);\n const tagRootMapRef = useRef<WeakMap<Element, Root>>(new WeakMap());\n const composingRef = useRef(false);\n const lastInsertedCaretRef = useRef<Text | null>(null);\n const savedRangeRef = useRef<Range | null>(null);\n const defaultInputPartsAppliedRef = useRef(false);\n const lastEmittedStateRef = useRef({\n value,\n mentionIds: mentions.map((mention) => mention.id).join(\"|\"),\n });\n\n useEffect(() => {\n latestMentionsRef.current = mentions;\n }, [mentions]);\n\n const getOrderedMentions = useCallback(() => {\n const editor = editorRef.current;\n if (!editor) return [];\n const mentionMap = new Map(\n latestMentionsRef.current.map((mention) => [mention.id, mention]),\n );\n return Array.from(editor.querySelectorAll(`[${MENTION_ATTR}]`))\n .map((node) =>\n mentionMap.get((node as HTMLElement).dataset.xadkInlineMentionId || \"\"),\n )\n .filter(Boolean) as MentionTag[];\n }, []);\n\n // 对外只暴露用户输入的纯文本,内部零宽锚点不进入 value。\n const getPlainText = useCallback(() => {\n const editor = editorRef.current;\n if (!editor) return \"\";\n let text = \"\";\n editor.childNodes.forEach((node) => {\n if (node.nodeType === Node.TEXT_NODE) {\n text += node.textContent || \"\";\n }\n });\n return normalizeText(text);\n }, []);\n\n // 提交时需要保留文本与 Mention 的真实顺序;仅靠 value + mentions 无法区分 Mention 在句首、句中还是句尾。\n const getParts = useCallback((): XAdkSenderSubmitPart[] => {\n const editor = editorRef.current;\n if (!editor) return [];\n const mentionMap = new Map(\n latestMentionsRef.current.map((mention) => [mention.id, mention]),\n );\n const parts: XAdkSenderSubmitPart[] = [];\n\n editor.childNodes.forEach((node) => {\n if (node.nodeType === Node.TEXT_NODE) {\n const text = normalizeText(node.textContent || \"\");\n if (text) parts.push({ type: \"text\", text });\n return;\n }\n\n if (node instanceof HTMLElement && node.hasAttribute(MENTION_ATTR)) {\n const mentionId = node.dataset.xadkInlineMentionId || \"\";\n const mention = mentionMap.get(mentionId);\n if (mention) parts.push({ type: \"mention\", mention });\n }\n });\n\n return parts;\n }, []);\n\n const emitChange = useCallback(() => {\n const nextValue = getPlainText();\n const nextMentions = getOrderedMentions();\n lastEmittedStateRef.current = {\n value: nextValue,\n mentionIds: nextMentions.map((mention) => mention.id).join(\"|\"),\n };\n onChange(nextValue);\n onMentionsChange(nextMentions);\n }, [getOrderedMentions, getPlainText, onChange, onMentionsChange]);\n\n const removeTextRange = useCallback((node: Text, start: number, end: number) => {\n const text = node.textContent || \"\";\n node.textContent = `${text.slice(0, start)}${text.slice(end)}`;\n if (!node.textContent) node.remove();\n }, []);\n\n const removeMentionNode = useCallback(\n (node: Element) => {\n const previous = node.previousSibling;\n const next = node.nextSibling;\n\n tagRootMapRef.current.get(node)?.unmount();\n node.remove();\n\n // Mention 后会补一个不可见光标锚点;删除 Mention 时同步清理,避免留下冗余节点。\n if (next?.nodeType === Node.TEXT_NODE) {\n const text = next.textContent || \"\";\n const caretLength = text.match(/^\\u200B+/)?.[0].length || 0;\n if (caretLength > 0) {\n removeTextRange(next as Text, 0, caretLength);\n return;\n }\n }\n\n if (previous?.nodeType === Node.TEXT_NODE) {\n const text = previous.textContent || \"\";\n const spaceLength = text.match(/\\s+$/)?.[0].length || 0;\n if (spaceLength > 0) {\n removeTextRange(previous as Text, text.length - spaceLength, text.length);\n }\n }\n },\n [removeTextRange],\n );\n\n const removeMentionById = useCallback(\n (id: string) => {\n const editor = editorRef.current;\n const node = Array.from(\n editor?.querySelectorAll(`[${MENTION_ATTR}]`) || [],\n ).find(\n (item) => (item as HTMLElement).dataset.xadkInlineMentionId === id,\n );\n if (node) {\n removeMentionNode(node);\n }\n emitChange();\n editor?.focus();\n },\n [emitChange, removeMentionNode],\n );\n\n // Mention 节点本身不可编辑;删除入口通过 onRemove 回到组件内部统一维护 DOM 与 mentions。\n const buildMentionNode = useCallback(\n (mention: MentionTag) => {\n const span = document.createElement(\"span\");\n span.setAttribute(\"contenteditable\", \"false\");\n span.setAttribute(MENTION_ATTR, mention.id);\n span.dataset.xadkInlineMentionId = mention.id;\n span.className = styles.inlineTag;\n\n if (renderMention) {\n const root = createRoot(span);\n tagRootMapRef.current.set(span, root);\n root.render(\n <>\n {renderMention(mention, {\n onRemove: () => removeMentionById(mention.id),\n })}\n </>,\n );\n } else {\n const label = document.createElement(\"span\");\n label.className = \"xadk-inline-tag-label\";\n label.textContent = mention.displayName || mention.label;\n const close = document.createElement(\"span\");\n close.className = \"xadk-inline-tag-close\";\n close.innerHTML = \"×\";\n close.onclick = (event) => {\n event.preventDefault();\n event.stopPropagation();\n removeMentionById(mention.id);\n };\n span.append(label, close);\n }\n return span;\n },\n [removeMentionById, renderMention, styles.inlineTag],\n );\n\n const renderPartsToEditor = useCallback(\n (parts: XAdkSenderInputPart[]) => {\n const editor = editorRef.current;\n if (!editor) return;\n\n editor.querySelectorAll(`[${MENTION_ATTR}]`).forEach((node) => {\n tagRootMapRef.current.get(node)?.unmount();\n });\n editor.innerHTML = \"\";\n\n parts.forEach((part) => {\n if (part.type === \"text\") {\n if (part.text) editor.appendChild(createTextNode(part.text));\n return;\n }\n const mention = part.type === \"mention\" ? part.mention : part.tag;\n editor.append(buildMentionNode(mention), createTextNode(CARET_TEXT));\n });\n },\n [buildMentionNode],\n );\n\n const setCursorAtTextEnd = useCallback((node: Text) => {\n const range = document.createRange();\n const selection = window.getSelection();\n range.setStart(node, node.textContent?.length || 0);\n range.collapse(true);\n selection?.removeAllRanges();\n selection?.addRange(range);\n savedRangeRef.current = range.cloneRange();\n }, []);\n\n const saveSelectionRange = useCallback(() => {\n const editor = editorRef.current;\n const selection = window.getSelection();\n if (!editor || !selection || selection.rangeCount === 0) return;\n const range = selection.getRangeAt(0);\n if (!editor.contains(range.startContainer) || !editor.contains(range.endContainer)) {\n return;\n }\n savedRangeRef.current = range.cloneRange();\n }, []);\n\n const restoreCursorAfterInsert = useCallback(\n (node: Text) => {\n const editor = editorRef.current;\n if (!editor || !editor.contains(node)) return;\n editor.focus();\n setCursorAtTextEnd(node);\n },\n [setCursorAtTextEnd],\n );\n\n const isMentionNode = (node: Node | null): node is HTMLElement =>\n node instanceof HTMLElement && node.hasAttribute(MENTION_ATTR);\n\n const isOnlyCaretText = (text: string) => normalizeText(text) === \"\";\n\n // Backspace/Delete 需要跨过零宽锚点识别相邻 Mention,不能只看光标所在文本节点。\n const getMentionBeforeRange = (range: Range) => {\n const container = range.startContainer;\n if (container.nodeType === Node.TEXT_NODE) {\n const text = container.textContent || \"\";\n const beforeCursor = text.slice(0, range.startOffset);\n if (isOnlyCaretText(beforeCursor) && isMentionNode(container.previousSibling)) {\n return container.previousSibling;\n }\n }\n\n if (container instanceof HTMLElement) {\n const previous = container.childNodes[range.startOffset - 1];\n if (isMentionNode(previous)) return previous;\n if (\n previous?.nodeType === Node.TEXT_NODE &&\n isOnlyCaretText(previous.textContent || \"\") &&\n isMentionNode(previous.previousSibling)\n ) {\n return previous.previousSibling;\n }\n }\n\n return null;\n };\n\n const getMentionAfterRange = (range: Range) => {\n const container = range.startContainer;\n if (container.nodeType === Node.TEXT_NODE) {\n const text = container.textContent || \"\";\n const afterCursor = text.slice(range.startOffset);\n if (isOnlyCaretText(afterCursor) && isMentionNode(container.nextSibling)) {\n return container.nextSibling;\n }\n }\n\n if (container instanceof HTMLElement) {\n const next = container.childNodes[range.startOffset];\n if (isMentionNode(next)) return next;\n if (\n next?.nodeType === Node.TEXT_NODE &&\n isOnlyCaretText(next.textContent || \"\") &&\n isMentionNode(next.nextSibling)\n ) {\n return next.nextSibling;\n }\n }\n\n return null;\n };\n\n // 读取光标在纯文本中的位置,供快捷键搜索词和 Mention 插入位置复用。\n const getOffsetInEditor = useCallback(() => {\n const editor = editorRef.current;\n const selection = window.getSelection();\n if (!editor || !selection || selection.rangeCount === 0) return 0;\n const range = selection.getRangeAt(0);\n let offset = 0;\n let found = false;\n\n const visit = (node: Node) => {\n if (found) return;\n if (node === range.startContainer) {\n if (node.nodeType === Node.TEXT_NODE) {\n offset += getPlainLength(\n (node.textContent || \"\").slice(0, range.startOffset),\n );\n }\n found = true;\n return;\n }\n if (node instanceof HTMLElement && node.hasAttribute(MENTION_ATTR)) return;\n if (node.nodeType === Node.TEXT_NODE) {\n offset += getPlainLength(node.textContent || \"\");\n return;\n }\n node.childNodes.forEach(visit);\n };\n\n editor.childNodes.forEach(visit);\n return offset;\n }, []);\n\n const getNodeIndex = (node: Node) => {\n let index = 0;\n let current = node;\n while (current.previousSibling) {\n index += 1;\n current = current.previousSibling;\n }\n return index;\n };\n\n // 删除快捷键触发片段,例如把 “@文档” 替换成一个结构化 Mention,并返回删除位置对应的真实 DOM Range。\n // 注意:纯文本 offset 不包含 Mention,Mention 前后可能都是 offset 0;插入 Mention 必须依赖真实 Range,不能再反推 offset。\n const replaceTextRange = useCallback((start: number, end: number) => {\n const editor = editorRef.current;\n if (!editor) return null;\n let offset = 0;\n let insertRange: Range | null = null;\n const nodes = Array.from(editor.childNodes);\n nodes.forEach((node) => {\n if (node.nodeType !== Node.TEXT_NODE) return;\n const text = node.textContent || \"\";\n const nodeStart = offset;\n const plainLength = getPlainLength(text);\n const nodeEnd = offset + plainLength;\n offset = nodeEnd;\n if (nodeEnd <= start || nodeStart >= end) return;\n const rawStart = toRawOffset(text, Math.max(0, start - nodeStart));\n const rawEnd = toRawOffset(text, Math.max(0, end - nodeStart));\n const keepLeft = text.slice(0, rawStart);\n const keepRight = text.slice(rawEnd);\n const parent = node.parentNode;\n const nodeIndex = getNodeIndex(node);\n\n node.textContent = `${keepLeft}${keepRight}`;\n if (!insertRange) {\n insertRange = document.createRange();\n if (node.textContent) {\n insertRange.setStart(node, rawStart);\n } else if (parent) {\n insertRange.setStart(parent, nodeIndex);\n }\n insertRange.collapse(true);\n }\n if (!node.textContent) node.remove();\n });\n\n return insertRange;\n }, []);\n\n // 浏览器拆分 Range 后可能留下空文本节点;清理后才能保证后续 Mention 继续 append 在队尾。\n const cleanupCaretTextNodes = useCallback(() => {\n const editor = editorRef.current;\n if (!editor) return;\n Array.from(editor.childNodes).forEach((node) => {\n if (node.nodeType !== Node.TEXT_NODE) return;\n const text = node.textContent || \"\";\n if (!text) {\n node.remove();\n return;\n }\n if (text && normalizeText(text) === \"\") {\n node.textContent = CARET_TEXT;\n }\n });\n }, []);\n\n const insertMention = useCallback(\n (mention: MentionTag, replace?: { start: number; end: number }) => {\n const editor = editorRef.current;\n if (!editor) return;\n editor.focus();\n latestMentionsRef.current = [\n ...latestMentionsRef.current.filter((item) => item.id !== mention.id),\n mention,\n ];\n let insertRange: Range | null = null;\n if (replace) {\n insertRange = replaceTextRange(replace.start, replace.end);\n cleanupCaretTextNodes();\n }\n const mentionNode = buildMentionNode(mention);\n const caretNode = createTextNode(CARET_TEXT);\n const selection = window.getSelection();\n const savedRange = savedRangeRef.current;\n const range =\n insertRange ||\n (selection?.rangeCount &&\n editor.contains(selection.getRangeAt(0).startContainer)\n ? selection.getRangeAt(0)\n : savedRange && editor.contains(savedRange.startContainer)\n ? savedRange\n : null);\n if (range && editor.contains(range.startContainer)) {\n // 用 DocumentFragment 一次性插入,避免连续 insertNode 导致 mention/caret 顺序被浏览器 Range 状态打乱。\n const fragment = document.createDocumentFragment();\n fragment.append(mentionNode, caretNode);\n range.insertNode(fragment);\n } else {\n editor.append(mentionNode, caretNode);\n }\n cleanupCaretTextNodes();\n lastInsertedCaretRef.current = caretNode;\n setCursorAtTextEnd(caretNode);\n emitChange();\n\n // 关闭快捷列表和父组件同步 mentions/value 会触发一次 React 更新;\n // 下一帧再恢复到刚插入 Mention 后的零宽锚点,避免光标被 focus 或重渲染带回旧位置。\n window.requestAnimationFrame(() => {\n if (lastInsertedCaretRef.current === caretNode) {\n restoreCursorAfterInsert(caretNode);\n }\n });\n },\n [\n buildMentionNode,\n cleanupCaretTextNodes,\n emitChange,\n replaceTextRange,\n restoreCursorAfterInsert,\n setCursorAtTextEnd,\n ],\n );\n\n useEffect(() => {\n document.addEventListener(\"selectionchange\", saveSelectionRange);\n return () => {\n document.removeEventListener(\"selectionchange\", saveSelectionRange);\n };\n }, [saveSelectionRange]);\n\n useImperativeHandle(ref, () => ({\n focus: () => editorRef.current?.focus(),\n getText: getPlainText,\n getParts,\n getCursorOffset: getOffsetInEditor,\n insertMention,\n insertTag: insertMention,\n }), [getOffsetInEditor, getParts, getPlainText, insertMention]);\n\n useIsomorphicLayoutEffect(() => {\n const editor = editorRef.current;\n if (!editor) return;\n\n // 默认片段只在空输入首次挂载时灌入,避免外部重新渲染覆盖用户正在编辑的内容。\n if (\n !defaultInputPartsAppliedRef.current &&\n defaultInputParts?.length &&\n !value &&\n mentions.length === 0\n ) {\n defaultInputPartsAppliedRef.current = true;\n renderPartsToEditor(defaultInputParts);\n emitChange();\n return;\n }\n\n const incomingMentionIds = mentions.map((mention) => mention.id).join(\"|\");\n const lastEmittedState = lastEmittedStateRef.current;\n const isInternalControlledEcho =\n value === lastEmittedState.value &&\n incomingMentionIds === lastEmittedState.mentionIds;\n\n if (isInternalControlledEcho && editor.childNodes.length > 0) return;\n\n renderPartsToEditor([\n ...(value ? [{ type: \"text\" as const, text: value }] : []),\n ...mentions.map((mention) => ({ type: \"mention\" as const, mention })),\n ]);\n\n // 外部主动写入 value/mentions 后,需要在首帧绘制前同步 DOM;若输入区已有焦点,则把光标放在内容末尾。\n const lastTextNode = Array.from(editor.childNodes)\n .reverse()\n .find((node): node is Text => node.nodeType === Node.TEXT_NODE);\n if (document.activeElement === editor && lastTextNode) {\n setCursorAtTextEnd(lastTextNode);\n }\n }, [\n defaultInputParts,\n emitChange,\n renderPartsToEditor,\n setCursorAtTextEnd,\n mentions,\n value,\n ]);\n\n useIsomorphicLayoutEffect(() => {\n const editor = editorRef.current;\n if (!editor) return;\n if (!value && mentions.length === 0 && editor.childNodes.length > 0) {\n editor.querySelectorAll(`[${MENTION_ATTR}]`).forEach((node) => {\n tagRootMapRef.current.get(node)?.unmount();\n });\n editor.innerHTML = \"\";\n }\n }, [mentions.length, value]);\n\n const handleInput = () => {\n if (!composingRef.current) emitChange();\n };\n\n const handleKeyDown: React.KeyboardEventHandler<HTMLDivElement> = (event) => {\n if (event.key === \"Backspace\" || event.key === \"Delete\") {\n const selection = window.getSelection();\n if (selection?.rangeCount) {\n const range = selection.getRangeAt(0);\n if (range.collapsed) {\n const targetMention =\n event.key === \"Backspace\"\n ? getMentionBeforeRange(range)\n : getMentionAfterRange(range);\n\n if (targetMention) {\n event.preventDefault();\n removeMentionById(targetMention.dataset.xadkInlineMentionId || \"\");\n return;\n }\n }\n }\n }\n onKeyDown?.(event);\n };\n\n // placeholder 只由受控 value/mentions 派生,避免从 contenteditable DOM 读取导致外部插入 Mention 后状态滞后一帧。\n const showPlaceholder = !value && mentions.length === 0;\n\n return (\n <div className={styles.inlineInputWrapper}>\n {showPlaceholder && placeholder && (\n <div className={styles.inlinePlaceholder}>{placeholder}</div>\n )}\n <div\n ref={editorRef}\n className={styles.inlineInput}\n contentEditable={!disabled}\n suppressContentEditableWarning\n role=\"textbox\"\n aria-multiline=\"true\"\n onInput={handleInput}\n onKeyDown={handleKeyDown}\n onKeyUp={(event) => {\n saveSelectionRange();\n onKeyUp?.(event);\n }}\n onMouseUp={saveSelectionRange}\n onFocus={saveSelectionRange}\n onCompositionStart={() => {\n composingRef.current = true;\n }}\n onCompositionEnd={() => {\n composingRef.current = false;\n emitChange();\n }}\n data-cursor-offset={getOffsetInEditor()}\n />\n </div>\n );\n },\n);\n\nInlineTagInput.displayName = \"InlineTagInput\";\n\nexport default InlineTagInput;\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  import React from "react";
2
- import type { InputTag as InputTagType } from "../../types";
2
+ import type { MentionTag } from "../../types";
3
3
  export interface InputTagsProps {
4
- tags: InputTagType[];
4
+ mentions: MentionTag[];
5
5
  onRemove: (id: string) => void;
6
6
  }
7
7
  declare const InputTags: React.FC<InputTagsProps>;
@@ -26,25 +26,25 @@ var import_antd = require("antd");
26
26
  var import_icons = require("@ant-design/icons");
27
27
  var import_styles = require("./styles");
28
28
  var import_jsx_runtime = require("react/jsx-runtime");
29
- var InputTags = ({ tags, onRemove }) => {
29
+ var InputTags = ({ mentions, onRemove }) => {
30
30
  const styles = (0, import_styles.useStyles)();
31
- if (!tags.length)
31
+ if (!mentions.length)
32
32
  return null;
33
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.inputTags, children: tags.map((tag) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
33
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: styles.inputTags, children: mentions.map((mention) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
34
34
  import_antd.Tag,
35
35
  {
36
36
  className: styles.inputTag,
37
37
  closable: true,
38
38
  onClose: (e) => {
39
39
  e.preventDefault();
40
- onRemove(tag.id);
40
+ onRemove(mention.id);
41
41
  },
42
42
  closeIcon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.CloseOutlined, { style: { fontSize: 10 } }),
43
- color: tag.color,
44
- icon: tag.icon,
45
- children: tag.label
43
+ color: mention.color,
44
+ icon: mention.icon,
45
+ children: mention.displayName || mention.label
46
46
  },
47
- tag.id
47
+ mention.id
48
48
  )) });
49
49
  };
50
50
  var InputTags_default = InputTags;