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

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 (75) hide show
  1. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.d.ts +10 -0
  2. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.js +89 -14
  3. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.js.map +2 -2
  4. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/styles.js +21 -0
  5. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/styles.js.map +2 -2
  6. package/dist/cjs/components/XAdkChatbot/index.js +36 -10
  7. package/dist/cjs/components/XAdkChatbot/index.js.map +2 -2
  8. package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.d.ts +6 -2
  9. package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.js +59 -15
  10. package/dist/cjs/components/XAdkProvider/compound/DefaultLayout.js.map +2 -2
  11. package/dist/cjs/components/XAdkProvider/compound/Sender.d.ts +2 -1
  12. package/dist/cjs/components/XAdkProvider/compound/Sender.js.map +2 -2
  13. package/dist/cjs/components/XAdkProvider/compound/styles.d.ts +1 -0
  14. package/dist/cjs/components/XAdkProvider/compound/styles.js +16 -0
  15. package/dist/cjs/components/XAdkProvider/compound/styles.js.map +2 -2
  16. package/dist/cjs/components/XAdkSender/InlineTagInput.js +132 -2
  17. package/dist/cjs/components/XAdkSender/InlineTagInput.js.map +2 -2
  18. package/dist/cjs/components/XAdkSender/index.js +21 -55
  19. package/dist/cjs/components/XAdkSender/index.js.map +2 -2
  20. package/dist/cjs/hooks/useADKChat.js +5 -1
  21. package/dist/cjs/hooks/useADKChat.js.map +2 -2
  22. package/dist/cjs/index.d.ts +2 -2
  23. package/dist/cjs/index.js +4 -0
  24. package/dist/cjs/index.js.map +2 -2
  25. package/dist/cjs/presets/xgroup/preset.js +2 -1
  26. package/dist/cjs/presets/xgroup/preset.js.map +2 -2
  27. package/dist/cjs/presets/xgroup/strategies.d.ts +5 -1
  28. package/dist/cjs/presets/xgroup/strategies.js +16 -1
  29. package/dist/cjs/presets/xgroup/strategies.js.map +3 -3
  30. package/dist/cjs/types/ChatStrategies.d.ts +5 -0
  31. package/dist/cjs/types/ChatStrategies.js.map +1 -1
  32. package/dist/cjs/types/XAdkSender.d.ts +10 -3
  33. package/dist/cjs/types/XAdkSender.js.map +1 -1
  34. package/dist/cjs/utils/markdownResource.d.ts +12 -5
  35. package/dist/cjs/utils/markdownResource.js +66 -14
  36. package/dist/cjs/utils/markdownResource.js.map +2 -2
  37. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.d.ts +10 -0
  38. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.js +76 -13
  39. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.js.map +1 -1
  40. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.js +1 -1
  41. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.js.map +1 -1
  42. package/dist/esm/components/XAdkChatbot/index.js +27 -4
  43. package/dist/esm/components/XAdkChatbot/index.js.map +1 -1
  44. package/dist/esm/components/XAdkProvider/compound/DefaultLayout.d.ts +6 -2
  45. package/dist/esm/components/XAdkProvider/compound/DefaultLayout.js +55 -12
  46. package/dist/esm/components/XAdkProvider/compound/DefaultLayout.js.map +1 -1
  47. package/dist/esm/components/XAdkProvider/compound/Sender.d.ts +2 -1
  48. package/dist/esm/components/XAdkProvider/compound/Sender.js +2 -1
  49. package/dist/esm/components/XAdkProvider/compound/Sender.js.map +1 -1
  50. package/dist/esm/components/XAdkProvider/compound/styles.d.ts +1 -0
  51. package/dist/esm/components/XAdkProvider/compound/styles.js +3 -2
  52. package/dist/esm/components/XAdkProvider/compound/styles.js.map +1 -1
  53. package/dist/esm/components/XAdkSender/InlineTagInput.js +154 -4
  54. package/dist/esm/components/XAdkSender/InlineTagInput.js.map +1 -1
  55. package/dist/esm/components/XAdkSender/index.js +25 -58
  56. package/dist/esm/components/XAdkSender/index.js.map +1 -1
  57. package/dist/esm/hooks/useADKChat.js +8 -2
  58. package/dist/esm/hooks/useADKChat.js.map +1 -1
  59. package/dist/esm/index.d.ts +2 -2
  60. package/dist/esm/index.js +2 -2
  61. package/dist/esm/index.js.map +1 -1
  62. package/dist/esm/presets/xgroup/preset.js +3 -2
  63. package/dist/esm/presets/xgroup/preset.js.map +1 -1
  64. package/dist/esm/presets/xgroup/strategies.d.ts +5 -1
  65. package/dist/esm/presets/xgroup/strategies.js +12 -1
  66. package/dist/esm/presets/xgroup/strategies.js.map +1 -1
  67. package/dist/esm/types/ChatStrategies.d.ts +5 -0
  68. package/dist/esm/types/ChatStrategies.js.map +1 -1
  69. package/dist/esm/types/XAdkSender.d.ts +10 -3
  70. package/dist/esm/types/XAdkSender.js.map +1 -1
  71. package/dist/esm/utils/markdownResource.d.ts +12 -5
  72. package/dist/esm/utils/markdownResource.js +69 -7
  73. package/dist/esm/utils/markdownResource.js.map +1 -1
  74. package/dist/umd/chat-sdk.min.js +1 -1
  75. package/package.json +1 -1
@@ -1,11 +1,12 @@
1
1
  import _taggedTemplateLiteral from "@babel/runtime/helpers/esm/taggedTemplateLiteral";
2
- var _templateObject, _templateObject2;
2
+ var _templateObject, _templateObject2, _templateObject3;
3
3
  import { css } from "@emotion/css";
4
4
  import { withBasicStyles } from "../../../styles/common";
5
5
  export var useStyles = withBasicStyles(function () {
6
6
  return {
7
7
  logoText: css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n font-size: 30px;\n line-height: 36px;\n font-weight: 800;\n width: 100%;\n min-width: 330px;\n margin-top: 30px;\n color: transparent;\n background: linear-gradient(to right, #ff69b4, #4169e1);\n background-clip: text;\n width: 0;\n overflow: hidden;\n text-overflow: unset;\n white-space: nowrap;\n animation: typewiriter 1s forwards;\n "]))),
8
- sendWrapper: css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n position: relative;\n width: 100%;\n align-self: center;\n transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);\n "])))
8
+ sendWrapper: css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n position: relative;\n width: 100%;\n align-self: center;\n transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);\n "]))),
9
+ uploadButton: css(_templateObject3 || (_templateObject3 = _taggedTemplateLiteral(["\n border: 0;\n background: transparent;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 6px;\n border-radius: 50%;\n color: #6b7280;\n transition: background 0.2s;\n\n &:hover {\n background: rgba(0, 0, 0, 0.04);\n }\n "])))
9
10
  };
10
11
  });
11
12
  //# sourceMappingURL=styles.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["css","withBasicStyles","useStyles","logoText","_templateObject","_taggedTemplateLiteral","sendWrapper","_templateObject2"],"sources":["../../../../../src/components/XAdkProvider/compound/styles.tsx"],"sourcesContent":["import { css } from \"@emotion/css\";\nimport { withBasicStyles } from \"@/styles/common\";\n\nexport const useStyles = withBasicStyles(() => ({\n logoText: css`\n font-size: 30px;\n line-height: 36px;\n font-weight: 800;\n width: 100%;\n min-width: 330px;\n margin-top: 30px;\n color: transparent;\n background: linear-gradient(to right, #ff69b4, #4169e1);\n background-clip: text;\n width: 0;\n overflow: hidden;\n text-overflow: unset;\n white-space: nowrap;\n animation: typewiriter 1s forwards;\n `,\n\n sendWrapper: css`\n position: relative;\n width: 100%;\n align-self: center;\n transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);\n `,\n}));\n"],"mappings":";;AAAA,SAASA,GAAG,QAAQ,cAAc;AAClC,SAASC,eAAe;AAExB,OAAO,IAAMC,SAAS,GAAGD,eAAe,CAAC;EAAA,OAAO;IAC9CE,QAAQ,EAAEH,GAAG,CAAAI,eAAA,KAAAA,eAAA,GAAAC,sBAAA,wYAeZ;IAEDC,WAAW,EAAEN,GAAG,CAAAO,gBAAA,KAAAA,gBAAA,GAAAF,sBAAA;EAMlB,CAAC;AAAA,CAAC,CAAC"}
1
+ {"version":3,"names":["css","withBasicStyles","useStyles","logoText","_templateObject","_taggedTemplateLiteral","sendWrapper","_templateObject2","uploadButton","_templateObject3"],"sources":["../../../../../src/components/XAdkProvider/compound/styles.tsx"],"sourcesContent":["import { css } from \"@emotion/css\";\nimport { withBasicStyles } from \"@/styles/common\";\n\nexport const useStyles = withBasicStyles(() => ({\n logoText: css`\n font-size: 30px;\n line-height: 36px;\n font-weight: 800;\n width: 100%;\n min-width: 330px;\n margin-top: 30px;\n color: transparent;\n background: linear-gradient(to right, #ff69b4, #4169e1);\n background-clip: text;\n width: 0;\n overflow: hidden;\n text-overflow: unset;\n white-space: nowrap;\n animation: typewiriter 1s forwards;\n `,\n\n sendWrapper: css`\n position: relative;\n width: 100%;\n align-self: center;\n transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);\n `,\n\n uploadButton: css`\n border: 0;\n background: transparent;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 6px;\n border-radius: 50%;\n color: #6b7280;\n transition: background 0.2s;\n\n &:hover {\n background: rgba(0, 0, 0, 0.04);\n }\n `,\n}));\n"],"mappings":";;AAAA,SAASA,GAAG,QAAQ,cAAc;AAClC,SAASC,eAAe;AAExB,OAAO,IAAMC,SAAS,GAAGD,eAAe,CAAC;EAAA,OAAO;IAC9CE,QAAQ,EAAEH,GAAG,CAAAI,eAAA,KAAAA,eAAA,GAAAC,sBAAA,wYAeZ;IAEDC,WAAW,EAAEN,GAAG,CAAAO,gBAAA,KAAAA,gBAAA,GAAAF,sBAAA,wIAKf;IAEDG,YAAY,EAAER,GAAG,CAAAS,gBAAA,KAAAA,gBAAA,GAAAJ,sBAAA;EAgBnB,CAAC;AAAA,CAAC,CAAC"}
@@ -1,7 +1,10 @@
1
+ import _createForOfIteratorHelper from "@babel/runtime/helpers/esm/createForOfIteratorHelper";
1
2
  import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
2
- import React, { forwardRef, useCallback, useEffect, useLayoutEffect, useImperativeHandle, useRef } from "react";
3
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
4
+ import React, { forwardRef, useCallback, useEffect, useLayoutEffect, useImperativeHandle, useRef, useState } from "react";
3
5
  import { createRoot } from "react-dom/client";
4
6
  import { useStyles } from "./styles";
7
+ import { parseMarkdownResourceLinksAsParts } from "../../utils/markdownResource";
5
8
  import { Fragment as _Fragment } from "react/jsx-runtime";
6
9
  import { jsx as _jsx } from "react/jsx-runtime";
7
10
  import { jsxs as _jsxs } from "react/jsx-runtime";
@@ -46,6 +49,14 @@ var InlineTagInput = /*#__PURE__*/forwardRef(function (_ref, ref) {
46
49
  var lastInsertedCaretRef = useRef(null);
47
50
  var savedRangeRef = useRef(null);
48
51
  var defaultInputPartsAppliedRef = useRef(false);
52
+ var skipEmptyCleanupOnceRef = useRef(false);
53
+ var structuralCleanupFrameRef = useRef(null);
54
+ var _useState = useState(function () {
55
+ return Boolean(value || mentions.length);
56
+ }),
57
+ _useState2 = _slicedToArray(_useState, 2),
58
+ hasContent = _useState2[0],
59
+ setHasContent = _useState2[1];
49
60
  var lastEmittedStateRef = useRef({
50
61
  value: value,
51
62
  mentionIds: mentions.map(function (mention) {
@@ -110,6 +121,7 @@ var InlineTagInput = /*#__PURE__*/forwardRef(function (_ref, ref) {
110
121
  var emitChange = useCallback(function () {
111
122
  var nextValue = getPlainText();
112
123
  var nextMentions = getOrderedMentions();
124
+ setHasContent(Boolean(nextValue || nextMentions.length));
113
125
  lastEmittedStateRef.current = {
114
126
  value: nextValue,
115
127
  mentionIds: nextMentions.map(function (mention) {
@@ -373,6 +385,59 @@ var InlineTagInput = /*#__PURE__*/forwardRef(function (_ref, ref) {
373
385
  }
374
386
  });
375
387
  }, []);
388
+
389
+ // Chrome 会把标签前临时输入的文字包进块级节点;文字被删空后,可能留下
390
+ // <div><br></div>。它没有消息语义,却会在 contenteditable 中占据一整行。
391
+ var cleanupEmptyStructuralNodes = useCallback(function () {
392
+ var editor = editorRef.current;
393
+ var selection = window.getSelection();
394
+ if (!editor) return;
395
+ Array.from(editor.children).forEach(function (node) {
396
+ if (node.hasAttribute(MENTION_ATTR)) return;
397
+ if (node.querySelector("[".concat(MENTION_ATTR, "]"))) return;
398
+ if (normalizeText(node.textContent || "")) return;
399
+ var range = selection !== null && selection !== void 0 && selection.rangeCount ? selection.getRangeAt(0) : null;
400
+ var nodeIndex = getNodeIndex(node);
401
+ var containsCursor = Boolean(range && range.collapsed && (range.startContainer === node || node.contains(range.startContainer) || range.startContainer === editor && (range.startOffset === nodeIndex || range.startOffset === nodeIndex + 1)));
402
+ if (containsCursor && selection) {
403
+ // 光标紧邻 contenteditable=false 的 Mention 时,单纯删除 <br> 会让 Chrome
404
+ // 再次生成它。替换成零宽文本锚点,既能承接光标,也不会增加行高。
405
+ var caretNode = createTextNode(CARET_TEXT);
406
+ node.replaceWith(caretNode);
407
+ var nextRange = document.createRange();
408
+ nextRange.setStart(caretNode, CARET_TEXT.length);
409
+ nextRange.collapse(true);
410
+ selection.removeAllRanges();
411
+ selection.addRange(nextRange);
412
+ savedRangeRef.current = nextRange.cloneRange();
413
+ return;
414
+ }
415
+ node.remove();
416
+ });
417
+ }, []);
418
+ useEffect(function () {
419
+ var editor = editorRef.current;
420
+ if (!editor) return;
421
+
422
+ // 某些业务容器会截断 React 委托事件;直接监听编辑器的原生 input,确保删除事务结束后
423
+ // 仍能清理 Chrome 在不可编辑 Mention 前生成的占行 <br>。仅处理 delete*,不影响 Enter 换行。
424
+ var handleNativeDelete = function handleNativeDelete(event) {
425
+ if (!(event instanceof InputEvent)) return;
426
+ if (!event.inputType.startsWith("delete")) return;
427
+ if (structuralCleanupFrameRef.current !== null) {
428
+ window.cancelAnimationFrame(structuralCleanupFrameRef.current);
429
+ }
430
+ structuralCleanupFrameRef.current = window.requestAnimationFrame(function () {
431
+ structuralCleanupFrameRef.current = null;
432
+ cleanupEmptyStructuralNodes();
433
+ cleanupCaretTextNodes();
434
+ });
435
+ };
436
+ editor.addEventListener("input", handleNativeDelete);
437
+ return function () {
438
+ return editor.removeEventListener("input", handleNativeDelete);
439
+ };
440
+ }, [cleanupCaretTextNodes, cleanupEmptyStructuralNodes]);
376
441
  var insertMention = useCallback(function (mention, replace) {
377
442
  var editor = editorRef.current;
378
443
  if (!editor) return;
@@ -385,6 +450,14 @@ var InlineTagInput = /*#__PURE__*/forwardRef(function (_ref, ref) {
385
450
  insertRange = replaceTextRange(replace.start, replace.end);
386
451
  cleanupCaretTextNodes();
387
452
  }
453
+ // 浏览器会在空 contenteditable 中生成 <div><br> 等占位块。
454
+ // 空编辑器插入首个 Mention 前先清掉这些无语义节点,避免标签被放进第二个视觉行。
455
+ var isSemanticallyEmpty = !getPlainText() && !editor.querySelector("[".concat(MENTION_ATTR, "]"));
456
+ if (isSemanticallyEmpty) {
457
+ editor.innerHTML = "";
458
+ savedRangeRef.current = null;
459
+ insertRange = null;
460
+ }
388
461
  var mentionNode = buildMentionNode(mention);
389
462
  var caretNode = createTextNode(CARET_TEXT);
390
463
  var selection = window.getSelection();
@@ -410,13 +483,20 @@ var InlineTagInput = /*#__PURE__*/forwardRef(function (_ref, ref) {
410
483
  restoreCursorAfterInsert(caretNode);
411
484
  }
412
485
  });
413
- }, [buildMentionNode, cleanupCaretTextNodes, emitChange, replaceTextRange, restoreCursorAfterInsert, setCursorAtTextEnd]);
486
+ }, [buildMentionNode, cleanupCaretTextNodes, emitChange, getPlainText, replaceTextRange, restoreCursorAfterInsert, setCursorAtTextEnd]);
414
487
  useEffect(function () {
415
488
  document.addEventListener("selectionchange", saveSelectionRange);
416
489
  return function () {
417
490
  document.removeEventListener("selectionchange", saveSelectionRange);
418
491
  };
419
492
  }, [saveSelectionRange]);
493
+ useEffect(function () {
494
+ return function () {
495
+ if (structuralCleanupFrameRef.current !== null) {
496
+ window.cancelAnimationFrame(structuralCleanupFrameRef.current);
497
+ }
498
+ };
499
+ }, []);
420
500
  useImperativeHandle(ref, function () {
421
501
  return {
422
502
  focus: function focus() {
@@ -437,6 +517,9 @@ var InlineTagInput = /*#__PURE__*/forwardRef(function (_ref, ref) {
437
517
  // 默认片段只在空输入首次挂载时灌入,避免外部重新渲染覆盖用户正在编辑的内容。
438
518
  if (!defaultInputPartsAppliedRef.current && defaultInputParts !== null && defaultInputParts !== void 0 && defaultInputParts.length && !value && mentions.length === 0) {
439
519
  defaultInputPartsAppliedRef.current = true;
520
+ // emitChange 的受控回写要到下一次 render 才生效;跳过本轮紧随其后的空值清理,
521
+ // 避免刚渲染的默认 Mention 被旧的空 value/mentions 立即移除。
522
+ skipEmptyCleanupOnceRef.current = true;
440
523
  renderPartsToEditor(defaultInputParts);
441
524
  emitChange();
442
525
  return;
@@ -456,6 +539,7 @@ var InlineTagInput = /*#__PURE__*/forwardRef(function (_ref, ref) {
456
539
  mention: mention
457
540
  };
458
541
  }))));
542
+ setHasContent(Boolean(value || mentions.length));
459
543
 
460
544
  // 外部主动写入 value/mentions 后,需要在首帧绘制前同步 DOM;若输入区已有焦点,则把光标放在内容末尾。
461
545
  var lastTextNode = Array.from(editor.childNodes).reverse().find(function (node) {
@@ -468,6 +552,10 @@ var InlineTagInput = /*#__PURE__*/forwardRef(function (_ref, ref) {
468
552
  useIsomorphicLayoutEffect(function () {
469
553
  var editor = editorRef.current;
470
554
  if (!editor) return;
555
+ if (skipEmptyCleanupOnceRef.current) {
556
+ skipEmptyCleanupOnceRef.current = false;
557
+ return;
558
+ }
471
559
  if (!value && mentions.length === 0 && editor.childNodes.length > 0) {
472
560
  editor.querySelectorAll("[".concat(MENTION_ATTR, "]")).forEach(function (node) {
473
561
  var _tagRootMapRef$curren3;
@@ -477,7 +565,64 @@ var InlineTagInput = /*#__PURE__*/forwardRef(function (_ref, ref) {
477
565
  }
478
566
  }, [mentions.length, value]);
479
567
  var handleInput = function handleInput() {
480
- if (!composingRef.current) emitChange();
568
+ if (!composingRef.current) {
569
+ cleanupEmptyStructuralNodes();
570
+ cleanupCaretTextNodes();
571
+ emitChange();
572
+
573
+ // Chrome 可能在 input 回调返回后才补上用于承接光标的 <br>;下一帧再归一化一次。
574
+ if (structuralCleanupFrameRef.current !== null) {
575
+ window.cancelAnimationFrame(structuralCleanupFrameRef.current);
576
+ }
577
+ structuralCleanupFrameRef.current = window.requestAnimationFrame(function () {
578
+ structuralCleanupFrameRef.current = null;
579
+ cleanupEmptyStructuralNodes();
580
+ cleanupCaretTextNodes();
581
+ });
582
+ }
583
+ };
584
+ var handlePaste = function handlePaste(event) {
585
+ event.preventDefault();
586
+ var editor = editorRef.current;
587
+ if (!editor) return;
588
+
589
+ // 始终按 text/plain 粘贴,避免消息气泡的背景色等 HTML 样式进入 contenteditable。
590
+ var text = event.clipboardData.getData("text/plain");
591
+ if (!text) return;
592
+ var parts = parseMarkdownResourceLinksAsParts(text);
593
+ var selection = window.getSelection();
594
+ var range = selection !== null && selection !== void 0 && selection.rangeCount && editor.contains(selection.getRangeAt(0).startContainer) ? selection.getRangeAt(0) : null;
595
+ var fragment = document.createDocumentFragment();
596
+ var lastTextNode = null;
597
+ var _iterator = _createForOfIteratorHelper(parts),
598
+ _step;
599
+ try {
600
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
601
+ var part = _step.value;
602
+ if (part.type === "text") {
603
+ lastTextNode = createTextNode(part.text);
604
+ fragment.append(lastTextNode);
605
+ continue;
606
+ }
607
+ latestMentionsRef.current = [].concat(_toConsumableArray(latestMentionsRef.current), [part.mention]);
608
+ fragment.append(buildMentionNode(part.mention));
609
+ lastTextNode = createTextNode(CARET_TEXT);
610
+ fragment.append(lastTextNode);
611
+ }
612
+ } catch (err) {
613
+ _iterator.e(err);
614
+ } finally {
615
+ _iterator.f();
616
+ }
617
+ if (range) {
618
+ range.deleteContents();
619
+ range.insertNode(fragment);
620
+ } else {
621
+ editor.append(fragment);
622
+ }
623
+ cleanupCaretTextNodes();
624
+ if (lastTextNode) setCursorAtTextEnd(lastTextNode);
625
+ emitChange();
481
626
  };
482
627
  var handleKeyDown = function handleKeyDown(event) {
483
628
  if (event.key === "Backspace" || event.key === "Delete") {
@@ -498,7 +643,7 @@ var InlineTagInput = /*#__PURE__*/forwardRef(function (_ref, ref) {
498
643
  };
499
644
 
500
645
  // placeholder 只由受控 value/mentions 派生,避免从 contenteditable DOM 读取导致外部插入 Mention 后状态滞后一帧。
501
- var showPlaceholder = !value && mentions.length === 0;
646
+ var showPlaceholder = !hasContent;
502
647
  return /*#__PURE__*/_jsxs("div", {
503
648
  className: styles.inlineInputWrapper,
504
649
  children: [showPlaceholder && placeholder && /*#__PURE__*/_jsx("div", {
@@ -512,8 +657,11 @@ var InlineTagInput = /*#__PURE__*/forwardRef(function (_ref, ref) {
512
657
  role: "textbox",
513
658
  "aria-multiline": "true",
514
659
  onInput: handleInput,
660
+ onPaste: handlePaste,
515
661
  onKeyDown: handleKeyDown,
516
662
  onKeyUp: function onKeyUp(event) {
663
+ cleanupEmptyStructuralNodes();
664
+ cleanupCaretTextNodes();
517
665
  saveSelectionRange();
518
666
  _onKeyUp === null || _onKeyUp === void 0 || _onKeyUp(event);
519
667
  },
@@ -521,6 +669,8 @@ var InlineTagInput = /*#__PURE__*/forwardRef(function (_ref, ref) {
521
669
  onFocus: saveSelectionRange,
522
670
  onCompositionStart: function onCompositionStart() {
523
671
  composingRef.current = true;
672
+ // 中文 IME 在 compositionend 前不会触发受控 value 更新;候选输入一出现就应隐藏 placeholder。
673
+ setHasContent(true);
524
674
  },
525
675
  onCompositionEnd: function onCompositionEnd() {
526
676
  composingRef.current = false;
@@ -1 +1 @@
1
- {"version":3,"names":["React","forwardRef","useCallback","useEffect","useLayoutEffect","useImperativeHandle","useRef","createRoot","useStyles","Fragment","_Fragment","jsx","_jsx","jsxs","_jsxs","MENTION_ATTR","CARET_TEXT","createTextNode","text","document","useIsomorphicLayoutEffect","window","normalizeText","replace","getPlainLength","length","toRawOffset","plainOffset","current","i","InlineTagInput","_ref","ref","value","mentions","defaultInputParts","placeholder","disabled","onChange","onMentionsChange","onKeyDown","onKeyUp","renderMention","styles","editorRef","latestMentionsRef","tagRootMapRef","WeakMap","composingRef","lastInsertedCaretRef","savedRangeRef","defaultInputPartsAppliedRef","lastEmittedStateRef","mentionIds","map","mention","id","join","getOrderedMentions","editor","mentionMap","Map","Array","from","querySelectorAll","concat","node","get","dataset","xadkInlineMentionId","filter","Boolean","getPlainText","childNodes","forEach","nodeType","Node","TEXT_NODE","textContent","getParts","parts","push","type","HTMLElement","hasAttribute","mentionId","emitChange","nextValue","nextMentions","removeTextRange","start","end","slice","remove","removeMentionNode","_tagRootMapRef$curren","previous","previousSibling","next","nextSibling","unmount","_text$match","caretLength","match","_text$match2","spaceLength","removeMentionById","find","item","focus","buildMentionNode","span","createElement","setAttribute","className","inlineTag","root","set","render","children","onRemove","label","displayName","close","innerHTML","onclick","event","preventDefault","stopPropagation","append","renderPartsToEditor","_tagRootMapRef$curren2","part","appendChild","tag","setCursorAtTextEnd","_node$textContent","range","createRange","selection","getSelection","setStart","collapse","removeAllRanges","addRange","cloneRange","saveSelectionRange","rangeCount","getRangeAt","contains","startContainer","endContainer","restoreCursorAfterInsert","isMentionNode","isOnlyCaretText","getMentionBeforeRange","container","beforeCursor","startOffset","getMentionAfterRange","afterCursor","getOffsetInEditor","offset","found","visit","getNodeIndex","index","replaceTextRange","insertRange","nodes","nodeStart","plainLength","nodeEnd","rawStart","Math","max","rawEnd","keepLeft","keepRight","parent","parentNode","nodeIndex","cleanupCaretTextNodes","insertMention","_toConsumableArray","mentionNode","caretNode","savedRange","fragment","createDocumentFragment","insertNode","requestAnimationFrame","addEventListener","removeEventListener","_editorRef$current","getText","getCursorOffset","insertTag","incomingMentionIds","lastEmittedState","isInternalControlledEcho","lastTextNode","reverse","activeElement","_tagRootMapRef$curren3","handleInput","handleKeyDown","key","collapsed","targetMention","showPlaceholder","inlineInputWrapper","inlinePlaceholder","inlineInput","contentEditable","suppressContentEditableWarning","role","onInput","onMouseUp","onFocus","onCompositionStart","onCompositionEnd"],"sources":["../../../../src/components/XAdkSender/InlineTagInput.tsx"],"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"],"mappings":"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"}
1
+ {"version":3,"names":["React","forwardRef","useCallback","useEffect","useLayoutEffect","useImperativeHandle","useRef","useState","createRoot","useStyles","parseMarkdownResourceLinksAsParts","Fragment","_Fragment","jsx","_jsx","jsxs","_jsxs","MENTION_ATTR","CARET_TEXT","createTextNode","text","document","useIsomorphicLayoutEffect","window","normalizeText","replace","getPlainLength","length","toRawOffset","plainOffset","current","i","InlineTagInput","_ref","ref","value","mentions","defaultInputParts","placeholder","disabled","onChange","onMentionsChange","onKeyDown","onKeyUp","renderMention","styles","editorRef","latestMentionsRef","tagRootMapRef","WeakMap","composingRef","lastInsertedCaretRef","savedRangeRef","defaultInputPartsAppliedRef","skipEmptyCleanupOnceRef","structuralCleanupFrameRef","_useState","Boolean","_useState2","_slicedToArray","hasContent","setHasContent","lastEmittedStateRef","mentionIds","map","mention","id","join","getOrderedMentions","editor","mentionMap","Map","Array","from","querySelectorAll","concat","node","get","dataset","xadkInlineMentionId","filter","getPlainText","childNodes","forEach","nodeType","Node","TEXT_NODE","textContent","getParts","parts","push","type","HTMLElement","hasAttribute","mentionId","emitChange","nextValue","nextMentions","removeTextRange","start","end","slice","remove","removeMentionNode","_tagRootMapRef$curren","previous","previousSibling","next","nextSibling","unmount","_text$match","caretLength","match","_text$match2","spaceLength","removeMentionById","find","item","focus","buildMentionNode","span","createElement","setAttribute","className","inlineTag","root","set","render","children","onRemove","label","displayName","close","innerHTML","onclick","event","preventDefault","stopPropagation","append","renderPartsToEditor","_tagRootMapRef$curren2","part","appendChild","tag","setCursorAtTextEnd","_node$textContent","range","createRange","selection","getSelection","setStart","collapse","removeAllRanges","addRange","cloneRange","saveSelectionRange","rangeCount","getRangeAt","contains","startContainer","endContainer","restoreCursorAfterInsert","isMentionNode","isOnlyCaretText","getMentionBeforeRange","container","beforeCursor","startOffset","getMentionAfterRange","afterCursor","getOffsetInEditor","offset","found","visit","getNodeIndex","index","replaceTextRange","insertRange","nodes","nodeStart","plainLength","nodeEnd","rawStart","Math","max","rawEnd","keepLeft","keepRight","parent","parentNode","nodeIndex","cleanupCaretTextNodes","cleanupEmptyStructuralNodes","querySelector","containsCursor","collapsed","caretNode","replaceWith","nextRange","handleNativeDelete","InputEvent","inputType","startsWith","cancelAnimationFrame","requestAnimationFrame","addEventListener","removeEventListener","insertMention","_toConsumableArray","isSemanticallyEmpty","mentionNode","savedRange","fragment","createDocumentFragment","insertNode","_editorRef$current","getText","getCursorOffset","insertTag","incomingMentionIds","lastEmittedState","isInternalControlledEcho","lastTextNode","reverse","activeElement","_tagRootMapRef$curren3","handleInput","handlePaste","clipboardData","getData","_iterator","_createForOfIteratorHelper","_step","s","n","done","err","e","f","deleteContents","handleKeyDown","key","targetMention","showPlaceholder","inlineInputWrapper","inlinePlaceholder","inlineInput","contentEditable","suppressContentEditableWarning","role","onInput","onPaste","onMouseUp","onFocus","onCompositionStart","onCompositionEnd"],"sources":["../../../../src/components/XAdkSender/InlineTagInput.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useCallback,\n useEffect,\n useLayoutEffect,\n useImperativeHandle,\n useRef,\n useState,\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\";\nimport { parseMarkdownResourceLinksAsParts } from \"@/utils/markdownResource\";\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 skipEmptyCleanupOnceRef = useRef(false);\n const structuralCleanupFrameRef = useRef<number | null>(null);\n const [hasContent, setHasContent] = useState(\n () => Boolean(value || mentions.length),\n );\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 setHasContent(Boolean(nextValue || nextMentions.length));\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 // Chrome 会把标签前临时输入的文字包进块级节点;文字被删空后,可能留下\n // <div><br></div>。它没有消息语义,却会在 contenteditable 中占据一整行。\n const cleanupEmptyStructuralNodes = useCallback(() => {\n const editor = editorRef.current;\n const selection = window.getSelection();\n if (!editor) return;\n\n Array.from(editor.children).forEach((node) => {\n if (node.hasAttribute(MENTION_ATTR)) return;\n if (node.querySelector(`[${MENTION_ATTR}]`)) return;\n if (normalizeText(node.textContent || \"\")) return;\n\n const range = selection?.rangeCount ? selection.getRangeAt(0) : null;\n const nodeIndex = getNodeIndex(node);\n const containsCursor = Boolean(\n range &&\n range.collapsed &&\n (range.startContainer === node ||\n node.contains(range.startContainer) ||\n (range.startContainer === editor &&\n (range.startOffset === nodeIndex ||\n range.startOffset === nodeIndex + 1))),\n );\n\n if (containsCursor && selection) {\n // 光标紧邻 contenteditable=false 的 Mention 时,单纯删除 <br> 会让 Chrome\n // 再次生成它。替换成零宽文本锚点,既能承接光标,也不会增加行高。\n const caretNode = createTextNode(CARET_TEXT);\n node.replaceWith(caretNode);\n const nextRange = document.createRange();\n nextRange.setStart(caretNode, CARET_TEXT.length);\n nextRange.collapse(true);\n selection.removeAllRanges();\n selection.addRange(nextRange);\n savedRangeRef.current = nextRange.cloneRange();\n return;\n }\n\n node.remove();\n });\n }, []);\n\n useEffect(() => {\n const editor = editorRef.current;\n if (!editor) return;\n\n // 某些业务容器会截断 React 委托事件;直接监听编辑器的原生 input,确保删除事务结束后\n // 仍能清理 Chrome 在不可编辑 Mention 前生成的占行 <br>。仅处理 delete*,不影响 Enter 换行。\n const handleNativeDelete = (event: Event) => {\n if (!(event instanceof InputEvent)) return;\n if (!event.inputType.startsWith(\"delete\")) return;\n if (structuralCleanupFrameRef.current !== null) {\n window.cancelAnimationFrame(structuralCleanupFrameRef.current);\n }\n structuralCleanupFrameRef.current = window.requestAnimationFrame(() => {\n structuralCleanupFrameRef.current = null;\n cleanupEmptyStructuralNodes();\n cleanupCaretTextNodes();\n });\n };\n\n editor.addEventListener(\"input\", handleNativeDelete);\n return () => editor.removeEventListener(\"input\", handleNativeDelete);\n }, [cleanupCaretTextNodes, cleanupEmptyStructuralNodes]);\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 // 浏览器会在空 contenteditable 中生成 <div><br> 等占位块。\n // 空编辑器插入首个 Mention 前先清掉这些无语义节点,避免标签被放进第二个视觉行。\n const isSemanticallyEmpty =\n !getPlainText() &&\n !editor.querySelector(`[${MENTION_ATTR}]`);\n if (isSemanticallyEmpty) {\n editor.innerHTML = \"\";\n savedRangeRef.current = null;\n insertRange = null;\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 getPlainText,\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 useEffect(\n () => () => {\n if (structuralCleanupFrameRef.current !== null) {\n window.cancelAnimationFrame(structuralCleanupFrameRef.current);\n }\n },\n [],\n );\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 // emitChange 的受控回写要到下一次 render 才生效;跳过本轮紧随其后的空值清理,\n // 避免刚渲染的默认 Mention 被旧的空 value/mentions 立即移除。\n skipEmptyCleanupOnceRef.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 setHasContent(Boolean(value || mentions.length));\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 (skipEmptyCleanupOnceRef.current) {\n skipEmptyCleanupOnceRef.current = false;\n return;\n }\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) {\n cleanupEmptyStructuralNodes();\n cleanupCaretTextNodes();\n emitChange();\n\n // Chrome 可能在 input 回调返回后才补上用于承接光标的 <br>;下一帧再归一化一次。\n if (structuralCleanupFrameRef.current !== null) {\n window.cancelAnimationFrame(structuralCleanupFrameRef.current);\n }\n structuralCleanupFrameRef.current = window.requestAnimationFrame(() => {\n structuralCleanupFrameRef.current = null;\n cleanupEmptyStructuralNodes();\n cleanupCaretTextNodes();\n });\n }\n };\n\n const handlePaste: React.ClipboardEventHandler<HTMLDivElement> = (event) => {\n event.preventDefault();\n const editor = editorRef.current;\n if (!editor) return;\n\n // 始终按 text/plain 粘贴,避免消息气泡的背景色等 HTML 样式进入 contenteditable。\n const text = event.clipboardData.getData(\"text/plain\");\n if (!text) return;\n const parts = parseMarkdownResourceLinksAsParts(text);\n const selection = window.getSelection();\n const range =\n selection?.rangeCount && editor.contains(selection.getRangeAt(0).startContainer)\n ? selection.getRangeAt(0)\n : null;\n const fragment = document.createDocumentFragment();\n let lastTextNode: Text | null = null;\n\n for (const part of parts) {\n if (part.type === \"text\") {\n lastTextNode = createTextNode(part.text);\n fragment.append(lastTextNode);\n continue;\n }\n latestMentionsRef.current = [...latestMentionsRef.current, part.mention];\n fragment.append(buildMentionNode(part.mention));\n lastTextNode = createTextNode(CARET_TEXT);\n fragment.append(lastTextNode);\n }\n\n if (range) {\n range.deleteContents();\n range.insertNode(fragment);\n } else {\n editor.append(fragment);\n }\n cleanupCaretTextNodes();\n if (lastTextNode) setCursorAtTextEnd(lastTextNode);\n 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 = !hasContent;\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 onPaste={handlePaste}\n onKeyDown={handleKeyDown}\n onKeyUp={(event) => {\n cleanupEmptyStructuralNodes();\n cleanupCaretTextNodes();\n saveSelectionRange();\n onKeyUp?.(event);\n }}\n onMouseUp={saveSelectionRange}\n onFocus={saveSelectionRange}\n onCompositionStart={() => {\n composingRef.current = true;\n // 中文 IME 在 compositionend 前不会触发受控 value 更新;候选输入一出现就应隐藏 placeholder。\n setHasContent(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"],"mappings":"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"}