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

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 (34) hide show
  1. package/dist/cjs/components/FileGallery/index.js +59 -40
  2. package/dist/cjs/components/FileGallery/index.js.map +2 -2
  3. package/dist/cjs/components/FileGallery/styles.d.ts +7 -0
  4. package/dist/cjs/components/FileGallery/styles.js +58 -0
  5. package/dist/cjs/components/FileGallery/styles.js.map +2 -2
  6. package/dist/cjs/components/XAdkSender/InlineTagInput.js +83 -50
  7. package/dist/cjs/components/XAdkSender/InlineTagInput.js.map +2 -2
  8. package/dist/cjs/components/XAdkSender/index.js +37 -25
  9. package/dist/cjs/components/XAdkSender/index.js.map +2 -2
  10. package/dist/cjs/components/XAdkSender/styles.d.ts +4 -0
  11. package/dist/cjs/components/XAdkSender/styles.js +34 -6
  12. package/dist/cjs/components/XAdkSender/styles.js.map +2 -2
  13. package/dist/cjs/types/FileGallery.d.ts +3 -0
  14. package/dist/cjs/types/FileGallery.js.map +1 -1
  15. package/dist/cjs/types/XAdkSender.d.ts +15 -2
  16. package/dist/cjs/types/XAdkSender.js.map +1 -1
  17. package/dist/esm/components/FileGallery/index.js +22 -16
  18. package/dist/esm/components/FileGallery/index.js.map +1 -1
  19. package/dist/esm/components/FileGallery/styles.d.ts +7 -0
  20. package/dist/esm/components/FileGallery/styles.js +24 -17
  21. package/dist/esm/components/FileGallery/styles.js.map +1 -1
  22. package/dist/esm/components/XAdkSender/InlineTagInput.js +79 -39
  23. package/dist/esm/components/XAdkSender/InlineTagInput.js.map +1 -1
  24. package/dist/esm/components/XAdkSender/index.js +44 -23
  25. package/dist/esm/components/XAdkSender/index.js.map +1 -1
  26. package/dist/esm/components/XAdkSender/styles.d.ts +4 -0
  27. package/dist/esm/components/XAdkSender/styles.js +29 -25
  28. package/dist/esm/components/XAdkSender/styles.js.map +1 -1
  29. package/dist/esm/types/FileGallery.d.ts +3 -0
  30. package/dist/esm/types/FileGallery.js.map +1 -1
  31. package/dist/esm/types/XAdkSender.d.ts +15 -2
  32. package/dist/esm/types/XAdkSender.js.map +1 -1
  33. package/dist/umd/chat-sdk.min.js +1 -1
  34. package/package.json +1 -1
@@ -1,15 +1,17 @@
1
1
  import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
2
- import React, { forwardRef, useCallback, useEffect, useImperativeHandle, useRef } from "react";
2
+ import React, { forwardRef, useCallback, useEffect, useLayoutEffect, useImperativeHandle, useRef } from "react";
3
3
  import { createRoot } from "react-dom/client";
4
4
  import { useStyles } from "./styles";
5
5
  import { Fragment as _Fragment } from "react/jsx-runtime";
6
6
  import { jsx as _jsx } from "react/jsx-runtime";
7
+ import { jsxs as _jsxs } from "react/jsx-runtime";
7
8
  var TAG_ATTR = "data-xadk-inline-tag-id";
8
9
  // contenteditable 无法把光标放进 contenteditable=false 的标签里,需用零宽字符承接“标签后方”的光标。
9
10
  var CARET_TEXT = "\u200B";
10
11
  var createTextNode = function createTextNode(text) {
11
12
  return document.createTextNode(text);
12
13
  };
14
+ var useIsomorphicLayoutEffect = typeof window === "undefined" ? useEffect : useLayoutEffect;
13
15
  var normalizeText = function normalizeText(text) {
14
16
  return text.replace(/\u200B/g, "").replace(/\u00a0/g, " ");
15
17
  };
@@ -33,7 +35,7 @@ var InlineTagInput = /*#__PURE__*/forwardRef(function (_ref, ref) {
33
35
  onChange = _ref.onChange,
34
36
  onTagsChange = _ref.onTagsChange,
35
37
  onKeyDown = _ref.onKeyDown,
36
- onKeyUp = _ref.onKeyUp,
38
+ _onKeyUp = _ref.onKeyUp,
37
39
  renderTag = _ref.renderTag;
38
40
  var styles = useStyles();
39
41
  var editorRef = useRef(null);
@@ -41,6 +43,13 @@ var InlineTagInput = /*#__PURE__*/forwardRef(function (_ref, ref) {
41
43
  var tagRootMapRef = useRef(new WeakMap());
42
44
  var composingRef = useRef(false);
43
45
  var lastInsertedCaretRef = useRef(null);
46
+ var savedRangeRef = useRef(null);
47
+ var lastEmittedStateRef = useRef({
48
+ value: value,
49
+ tagIds: tags.map(function (tag) {
50
+ return tag.id;
51
+ }).join("|")
52
+ });
44
53
  useEffect(function () {
45
54
  latestTagsRef.current = tags;
46
55
  }, [tags]);
@@ -97,8 +106,16 @@ var InlineTagInput = /*#__PURE__*/forwardRef(function (_ref, ref) {
97
106
  return parts;
98
107
  }, []);
99
108
  var emitChange = useCallback(function () {
100
- onChange(getPlainText());
101
- onTagsChange(getOrderedTags());
109
+ var nextValue = getPlainText();
110
+ var nextTags = getOrderedTags();
111
+ lastEmittedStateRef.current = {
112
+ value: nextValue,
113
+ tagIds: nextTags.map(function (tag) {
114
+ return tag.id;
115
+ }).join("|")
116
+ };
117
+ onChange(nextValue);
118
+ onTagsChange(nextTags);
102
119
  }, [getOrderedTags, getPlainText, onChange, onTagsChange]);
103
120
  var removeTextRange = useCallback(function (node, start, end) {
104
121
  var text = node.textContent || "";
@@ -184,6 +201,17 @@ var InlineTagInput = /*#__PURE__*/forwardRef(function (_ref, ref) {
184
201
  range.collapse(true);
185
202
  selection === null || selection === void 0 || selection.removeAllRanges();
186
203
  selection === null || selection === void 0 || selection.addRange(range);
204
+ savedRangeRef.current = range.cloneRange();
205
+ }, []);
206
+ var saveSelectionRange = useCallback(function () {
207
+ var editor = editorRef.current;
208
+ var selection = window.getSelection();
209
+ if (!editor || !selection || selection.rangeCount === 0) return;
210
+ var range = selection.getRangeAt(0);
211
+ if (!editor.contains(range.startContainer) || !editor.contains(range.endContainer)) {
212
+ return;
213
+ }
214
+ savedRangeRef.current = range.cloneRange();
187
215
  }, []);
188
216
  var restoreCursorAfterInsert = useCallback(function (node) {
189
217
  var editor = editorRef.current;
@@ -341,7 +369,8 @@ var InlineTagInput = /*#__PURE__*/forwardRef(function (_ref, ref) {
341
369
  var tagNode = buildTagNode(tag);
342
370
  var caretNode = createTextNode(CARET_TEXT);
343
371
  var selection = window.getSelection();
344
- var range = insertRange || (selection !== null && selection !== void 0 && selection.rangeCount ? selection.getRangeAt(0) : null);
372
+ var savedRange = savedRangeRef.current;
373
+ var range = insertRange || (selection !== null && selection !== void 0 && selection.rangeCount && editor.contains(selection.getRangeAt(0).startContainer) ? selection.getRangeAt(0) : savedRange && editor.contains(savedRange.startContainer) ? savedRange : null);
345
374
  if (range && editor.contains(range.startContainer)) {
346
375
  // 用 DocumentFragment 一次性插入,避免连续 insertNode 导致 tag/caret 顺序被浏览器 Range 状态打乱。
347
376
  var fragment = document.createDocumentFragment();
@@ -363,6 +392,12 @@ var InlineTagInput = /*#__PURE__*/forwardRef(function (_ref, ref) {
363
392
  }
364
393
  });
365
394
  }, [buildTagNode, cleanupCaretTextNodes, emitChange, replaceTextRange, restoreCursorAfterInsert, setCursorAtTextEnd]);
395
+ useEffect(function () {
396
+ document.addEventListener("selectionchange", saveSelectionRange);
397
+ return function () {
398
+ document.removeEventListener("selectionchange", saveSelectionRange);
399
+ };
400
+ }, [saveSelectionRange]);
366
401
  useImperativeHandle(ref, function () {
367
402
  return {
368
403
  focus: function focus() {
@@ -375,44 +410,40 @@ var InlineTagInput = /*#__PURE__*/forwardRef(function (_ref, ref) {
375
410
  insertTag: insertTag
376
411
  };
377
412
  }, [getOffsetInEditor, getParts, getPlainText, insertTag]);
378
- useEffect(function () {
379
- var editor = editorRef.current;
380
- if (!editor || editor.childNodes.length > 0) return;
381
- if (value) editor.appendChild(createTextNode(value));
382
- tags.forEach(function (tag) {
383
- return editor.append(buildTagNode(tag), createTextNode(CARET_TEXT));
384
- });
385
- }, []);
386
-
387
- // 外部受控 tags 变化时,同步补齐或删除 DOM 中的 tag 节点。
388
- useEffect(function () {
413
+ useIsomorphicLayoutEffect(function () {
389
414
  var editor = editorRef.current;
390
415
  if (!editor) return;
391
- var existingNodes = Array.from(editor.querySelectorAll("[".concat(TAG_ATTR, "]")));
392
- var nextTagMap = new Map(tags.map(function (tag) {
393
- return [tag.id, tag];
394
- }));
395
- var existingIds = new Set(existingNodes.map(function (node) {
396
- return node.dataset.xadkInlineTagId || "";
397
- }));
398
- existingNodes.forEach(function (node) {
399
- var tagId = node.dataset.xadkInlineTagId || "";
400
- if (!nextTagMap.has(tagId)) {
401
- removeTagNode(node);
402
- }
416
+ var incomingTagIds = tags.map(function (tag) {
417
+ return tag.id;
418
+ }).join("|");
419
+ var lastEmittedState = lastEmittedStateRef.current;
420
+ var isInternalControlledEcho = value === lastEmittedState.value && incomingTagIds === lastEmittedState.tagIds;
421
+ if (isInternalControlledEcho && editor.childNodes.length > 0) return;
422
+ editor.querySelectorAll("[".concat(TAG_ATTR, "]")).forEach(function (node) {
423
+ var _tagRootMapRef$curren2;
424
+ (_tagRootMapRef$curren2 = tagRootMapRef.current.get(node)) === null || _tagRootMapRef$curren2 === void 0 || _tagRootMapRef$curren2.unmount();
403
425
  });
426
+ editor.innerHTML = "";
427
+ if (value) editor.appendChild(createTextNode(value));
404
428
  tags.forEach(function (tag) {
405
- if (existingIds.has(tag.id)) return;
406
429
  editor.append(buildTagNode(tag), createTextNode(CARET_TEXT));
407
430
  });
408
- }, [buildTagNode, removeTagNode, tags]);
409
- useEffect(function () {
431
+
432
+ // 外部主动写入 value/tags 后,需要在首帧绘制前同步 DOM;若输入区已有焦点,则把光标放在内容末尾。
433
+ var lastTextNode = Array.from(editor.childNodes).reverse().find(function (node) {
434
+ return node.nodeType === Node.TEXT_NODE;
435
+ });
436
+ if (document.activeElement === editor && lastTextNode) {
437
+ setCursorAtTextEnd(lastTextNode);
438
+ }
439
+ }, [buildTagNode, setCursorAtTextEnd, tags, value]);
440
+ useIsomorphicLayoutEffect(function () {
410
441
  var editor = editorRef.current;
411
442
  if (!editor) return;
412
443
  if (!value && tags.length === 0 && editor.childNodes.length > 0) {
413
444
  editor.querySelectorAll("[".concat(TAG_ATTR, "]")).forEach(function (node) {
414
- var _tagRootMapRef$curren2;
415
- (_tagRootMapRef$curren2 = tagRootMapRef.current.get(node)) === null || _tagRootMapRef$curren2 === void 0 || _tagRootMapRef$curren2.unmount();
445
+ var _tagRootMapRef$curren3;
446
+ (_tagRootMapRef$curren3 = tagRootMapRef.current.get(node)) === null || _tagRootMapRef$curren3 === void 0 || _tagRootMapRef$curren3.unmount();
416
447
  });
417
448
  editor.innerHTML = "";
418
449
  }
@@ -437,19 +468,29 @@ var InlineTagInput = /*#__PURE__*/forwardRef(function (_ref, ref) {
437
468
  }
438
469
  onKeyDown === null || onKeyDown === void 0 || onKeyDown(event);
439
470
  };
440
- return /*#__PURE__*/_jsx("div", {
471
+
472
+ // placeholder 只由受控 value/tags 派生,避免从 contenteditable DOM 读取导致外部插入 tag 后状态滞后一帧。
473
+ var showPlaceholder = !value && tags.length === 0;
474
+ return /*#__PURE__*/_jsxs("div", {
441
475
  className: styles.inlineInputWrapper,
442
- children: /*#__PURE__*/_jsx("div", {
476
+ children: [showPlaceholder && placeholder && /*#__PURE__*/_jsx("div", {
477
+ className: styles.inlinePlaceholder,
478
+ children: placeholder
479
+ }), /*#__PURE__*/_jsx("div", {
443
480
  ref: editorRef,
444
481
  className: styles.inlineInput,
445
- "data-placeholder": placeholder,
446
482
  contentEditable: !disabled,
447
483
  suppressContentEditableWarning: true,
448
484
  role: "textbox",
449
485
  "aria-multiline": "true",
450
486
  onInput: handleInput,
451
487
  onKeyDown: handleKeyDown,
452
- onKeyUp: onKeyUp,
488
+ onKeyUp: function onKeyUp(event) {
489
+ saveSelectionRange();
490
+ _onKeyUp === null || _onKeyUp === void 0 || _onKeyUp(event);
491
+ },
492
+ onMouseUp: saveSelectionRange,
493
+ onFocus: saveSelectionRange,
453
494
  onCompositionStart: function onCompositionStart() {
454
495
  composingRef.current = true;
455
496
  },
@@ -457,9 +498,8 @@ var InlineTagInput = /*#__PURE__*/forwardRef(function (_ref, ref) {
457
498
  composingRef.current = false;
458
499
  emitChange();
459
500
  },
460
- "data-empty": !getPlainText() && getOrderedTags().length === 0,
461
501
  "data-cursor-offset": getOffsetInEditor()
462
- })
502
+ })]
463
503
  });
464
504
  });
465
505
  InlineTagInput.displayName = "InlineTagInput";
@@ -1 +1 @@
1
- {"version":3,"names":["React","forwardRef","useCallback","useEffect","useImperativeHandle","useRef","createRoot","useStyles","Fragment","_Fragment","jsx","_jsx","TAG_ATTR","CARET_TEXT","createTextNode","text","document","normalizeText","replace","getPlainLength","length","toRawOffset","plainOffset","current","i","InlineTagInput","_ref","ref","value","tags","placeholder","disabled","onChange","onTagsChange","onKeyDown","onKeyUp","renderTag","styles","editorRef","latestTagsRef","tagRootMapRef","WeakMap","composingRef","lastInsertedCaretRef","getOrderedTags","editor","tagMap","Map","map","tag","id","Array","from","querySelectorAll","concat","node","get","dataset","xadkInlineTagId","filter","Boolean","getPlainText","childNodes","forEach","nodeType","Node","TEXT_NODE","textContent","getParts","parts","push","type","HTMLElement","hasAttribute","tagId","emitChange","removeTextRange","start","end","slice","remove","removeTagNode","_tagRootMapRef$curren","previous","previousSibling","next","nextSibling","unmount","_text$match","caretLength","match","_text$match2","spaceLength","removeTagById","find","item","focus","buildTagNode","span","createElement","setAttribute","className","inlineTag","root","set","render","children","onRemove","label","close","innerHTML","onclick","event","preventDefault","stopPropagation","append","setCursorAtTextEnd","_node$textContent","range","createRange","selection","window","getSelection","setStart","collapse","removeAllRanges","addRange","restoreCursorAfterInsert","contains","isTagNode","isOnlyCaretText","getTagBeforeRange","container","startContainer","beforeCursor","startOffset","getTagAfterRange","afterCursor","getOffsetInEditor","rangeCount","getRangeAt","offset","found","visit","getNodeIndex","index","replaceTextRange","insertRange","nodes","nodeStart","plainLength","nodeEnd","rawStart","Math","max","rawEnd","keepLeft","keepRight","parent","parentNode","nodeIndex","cleanupCaretTextNodes","insertTag","_toConsumableArray","tagNode","caretNode","fragment","createDocumentFragment","insertNode","requestAnimationFrame","_editorRef$current","getText","getCursorOffset","appendChild","existingNodes","nextTagMap","existingIds","Set","has","_tagRootMapRef$curren2","handleInput","handleKeyDown","key","collapsed","targetTag","inlineInputWrapper","inlineInput","contentEditable","suppressContentEditableWarning","role","onInput","onCompositionStart","onCompositionEnd","displayName"],"sources":["../../../../src/components/XAdkSender/InlineTagInput.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useCallback,\n useEffect,\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 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\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 onChange(getPlainText());\n onTagsChange(getOrderedTags());\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 }, []);\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 range =\n insertRange || (selection?.rangeCount ? selection.getRangeAt(0) : 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 useImperativeHandle(ref, () => ({\n focus: () => editorRef.current?.focus(),\n getText: getPlainText,\n getParts,\n getCursorOffset: getOffsetInEditor,\n insertTag,\n }), [getOffsetInEditor, getParts, getPlainText, insertTag]);\n\n useEffect(() => {\n const editor = editorRef.current;\n if (!editor || editor.childNodes.length > 0) return;\n if (value) editor.appendChild(createTextNode(value));\n tags.forEach((tag) => editor.append(buildTagNode(tag), createTextNode(CARET_TEXT)));\n }, []);\n\n // 外部受控 tags 变化时,同步补齐或删除 DOM 中的 tag 节点。\n useEffect(() => {\n const editor = editorRef.current;\n if (!editor) return;\n const existingNodes = Array.from(editor.querySelectorAll(`[${TAG_ATTR}]`));\n const nextTagMap = new Map(tags.map((tag) => [tag.id, tag]));\n const existingIds = new Set(\n existingNodes.map((node) => (node as HTMLElement).dataset.xadkInlineTagId || \"\"),\n );\n\n existingNodes.forEach((node) => {\n const tagId = (node as HTMLElement).dataset.xadkInlineTagId || \"\";\n if (!nextTagMap.has(tagId)) {\n removeTagNode(node);\n }\n });\n\n tags.forEach((tag) => {\n if (existingIds.has(tag.id)) return;\n editor.append(buildTagNode(tag), createTextNode(CARET_TEXT));\n });\n }, [buildTagNode, removeTagNode, tags]);\n\n useEffect(() => {\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 return (\n <div className={styles.inlineInputWrapper}>\n <div\n ref={editorRef}\n className={styles.inlineInput}\n data-placeholder={placeholder}\n contentEditable={!disabled}\n suppressContentEditableWarning\n role=\"textbox\"\n aria-multiline=\"true\"\n onInput={handleInput}\n onKeyDown={handleKeyDown}\n onKeyUp={onKeyUp}\n onCompositionStart={() => {\n composingRef.current = true;\n }}\n onCompositionEnd={() => {\n composingRef.current = false;\n emitChange();\n }}\n data-empty={!getPlainText() && getOrderedTags().length === 0}\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","createRoot","useStyles","Fragment","_Fragment","jsx","_jsx","jsxs","_jsxs","TAG_ATTR","CARET_TEXT","createTextNode","text","document","useIsomorphicLayoutEffect","window","normalizeText","replace","getPlainLength","length","toRawOffset","plainOffset","current","i","InlineTagInput","_ref","ref","value","tags","placeholder","disabled","onChange","onTagsChange","onKeyDown","onKeyUp","renderTag","styles","editorRef","latestTagsRef","tagRootMapRef","WeakMap","composingRef","lastInsertedCaretRef","savedRangeRef","lastEmittedStateRef","tagIds","map","tag","id","join","getOrderedTags","editor","tagMap","Map","Array","from","querySelectorAll","concat","node","get","dataset","xadkInlineTagId","filter","Boolean","getPlainText","childNodes","forEach","nodeType","Node","TEXT_NODE","textContent","getParts","parts","push","type","HTMLElement","hasAttribute","tagId","emitChange","nextValue","nextTags","removeTextRange","start","end","slice","remove","removeTagNode","_tagRootMapRef$curren","previous","previousSibling","next","nextSibling","unmount","_text$match","caretLength","match","_text$match2","spaceLength","removeTagById","find","item","focus","buildTagNode","span","createElement","setAttribute","className","inlineTag","root","set","render","children","onRemove","label","close","innerHTML","onclick","event","preventDefault","stopPropagation","append","setCursorAtTextEnd","_node$textContent","range","createRange","selection","getSelection","setStart","collapse","removeAllRanges","addRange","cloneRange","saveSelectionRange","rangeCount","getRangeAt","contains","startContainer","endContainer","restoreCursorAfterInsert","isTagNode","isOnlyCaretText","getTagBeforeRange","container","beforeCursor","startOffset","getTagAfterRange","afterCursor","getOffsetInEditor","offset","found","visit","getNodeIndex","index","replaceTextRange","insertRange","nodes","nodeStart","plainLength","nodeEnd","rawStart","Math","max","rawEnd","keepLeft","keepRight","parent","parentNode","nodeIndex","cleanupCaretTextNodes","insertTag","_toConsumableArray","tagNode","caretNode","savedRange","fragment","createDocumentFragment","insertNode","requestAnimationFrame","addEventListener","removeEventListener","_editorRef$current","getText","getCursorOffset","incomingTagIds","lastEmittedState","isInternalControlledEcho","_tagRootMapRef$curren2","appendChild","lastTextNode","reverse","activeElement","_tagRootMapRef$curren3","handleInput","handleKeyDown","key","collapsed","targetTag","showPlaceholder","inlineInputWrapper","inlinePlaceholder","inlineInput","contentEditable","suppressContentEditableWarning","role","onInput","onMouseUp","onFocus","onCompositionStart","onCompositionEnd","displayName"],"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 { 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"],"mappings":";AAAA,OAAOA,KAAK,IACVC,UAAU,EACVC,WAAW,EACXC,SAAS,EACTC,eAAe,EACfC,mBAAmB,EACnBC,MAAM,QACD,OAAO;AACd,SAASC,UAAU,QAAmB,kBAAkB;AAExD,SAASC,SAAS;AAAmB,SAAAC,QAAA,IAAAC,SAAA;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAAA,SAAAC,IAAA,IAAAC,KAAA;AAsBrC,IAAMC,QAAQ,GAAG,yBAAyB;AAC1C;AACA,IAAMC,UAAU,GAAG,QAAQ;AAE3B,IAAMC,cAAc,GAAG,SAAjBA,cAAcA,CAAIC,IAAY;EAAA,OAAKC,QAAQ,CAACF,cAAc,CAACC,IAAI,CAAC;AAAA;AACtE,IAAME,yBAAyB,GAC7B,OAAOC,MAAM,KAAK,WAAW,GAAGlB,SAAS,GAAGC,eAAe;AAC7D,IAAMkB,aAAa,GAAG,SAAhBA,aAAaA,CAAIJ,IAAY;EAAA,OACjCA,IAAI,CAACK,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAACA,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;AAAA;AACrD,IAAMC,cAAc,GAAG,SAAjBA,cAAcA,CAAIN,IAAY;EAAA,OAAKI,aAAa,CAACJ,IAAI,CAAC,CAACO,MAAM;AAAA;AACnE;AACA,IAAMC,WAAW,GAAG,SAAdA,WAAWA,CAAIR,IAAY,EAAES,WAAmB,EAAK;EACzD,IAAIC,OAAO,GAAG,CAAC;EACf,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGX,IAAI,CAACO,MAAM,EAAEI,CAAC,EAAE,EAAE;IACpC,IAAID,OAAO,IAAID,WAAW,EAAE,OAAOE,CAAC;IACpC,IAAIX,IAAI,CAACW,CAAC,CAAC,KAAKb,UAAU,EAAEY,OAAO,IAAI,CAAC;EAC1C;EACA,OAAOV,IAAI,CAACO,MAAM;AACpB,CAAC;AAED,IAAMK,cAAc,gBAAG7B,UAAU,CAC/B,UAAA8B,IAAA,EAYEC,GAAG,EACA;EAAA,IAXDC,KAAK,GAAAF,IAAA,CAALE,KAAK;IACLC,IAAI,GAAAH,IAAA,CAAJG,IAAI;IACJC,WAAW,GAAAJ,IAAA,CAAXI,WAAW;IACXC,QAAQ,GAAAL,IAAA,CAARK,QAAQ;IACRC,QAAQ,GAAAN,IAAA,CAARM,QAAQ;IACRC,YAAY,GAAAP,IAAA,CAAZO,YAAY;IACZC,SAAS,GAAAR,IAAA,CAATQ,SAAS;IACTC,QAAO,GAAAT,IAAA,CAAPS,OAAO;IACPC,SAAS,GAAAV,IAAA,CAATU,SAAS;EAIX,IAAMC,MAAM,GAAGlC,SAAS,CAAC,CAAC;EAC1B,IAAMmC,SAAS,GAAGrC,MAAM,CAAiB,IAAI,CAAC;EAC9C,IAAMsC,aAAa,GAAGtC,MAAM,CAAa4B,IAAI,CAAC;EAC9C,IAAMW,aAAa,GAAGvC,MAAM,CAAyB,IAAIwC,OAAO,CAAC,CAAC,CAAC;EACnE,IAAMC,YAAY,GAAGzC,MAAM,CAAC,KAAK,CAAC;EAClC,IAAM0C,oBAAoB,GAAG1C,MAAM,CAAc,IAAI,CAAC;EACtD,IAAM2C,aAAa,GAAG3C,MAAM,CAAe,IAAI,CAAC;EAChD,IAAM4C,mBAAmB,GAAG5C,MAAM,CAAC;IACjC2B,KAAK,EAALA,KAAK;IACLkB,MAAM,EAAEjB,IAAI,CAACkB,GAAG,CAAC,UAACC,GAAG;MAAA,OAAKA,GAAG,CAACC,EAAE;IAAA,EAAC,CAACC,IAAI,CAAC,GAAG;EAC5C,CAAC,CAAC;EAEFpD,SAAS,CAAC,YAAM;IACdyC,aAAa,CAAChB,OAAO,GAAGM,IAAI;EAC9B,CAAC,EAAE,CAACA,IAAI,CAAC,CAAC;EAEV,IAAMsB,cAAc,GAAGtD,WAAW,CAAC,YAAM;IACvC,IAAMuD,MAAM,GAAGd,SAAS,CAACf,OAAO;IAChC,IAAI,CAAC6B,MAAM,EAAE,OAAO,EAAE;IACtB,IAAMC,MAAM,GAAG,IAAIC,GAAG,CAACf,aAAa,CAAChB,OAAO,CAACwB,GAAG,CAAC,UAACC,GAAG;MAAA,OAAK,CAACA,GAAG,CAACC,EAAE,EAAED,GAAG,CAAC;IAAA,EAAC,CAAC;IACzE,OAAOO,KAAK,CAACC,IAAI,CAACJ,MAAM,CAACK,gBAAgB,KAAAC,MAAA,CAAKhD,QAAQ,MAAG,CAAC,CAAC,CACxDqC,GAAG,CAAC,UAACY,IAAI;MAAA,OAAKN,MAAM,CAACO,GAAG,CAAED,IAAI,CAAiBE,OAAO,CAACC,eAAe,IAAI,EAAE,CAAC;IAAA,EAAC,CAC9EC,MAAM,CAACC,OAAO,CAAC;EACpB,CAAC,EAAE,EAAE,CAAC;;EAEN;EACA,IAAMC,YAAY,GAAGpE,WAAW,CAAC,YAAM;IACrC,IAAMuD,MAAM,GAAGd,SAAS,CAACf,OAAO;IAChC,IAAI,CAAC6B,MAAM,EAAE,OAAO,EAAE;IACtB,IAAIvC,IAAI,GAAG,EAAE;IACbuC,MAAM,CAACc,UAAU,CAACC,OAAO,CAAC,UAACR,IAAI,EAAK;MAClC,IAAIA,IAAI,CAACS,QAAQ,KAAKC,IAAI,CAACC,SAAS,EAAE;QACpCzD,IAAI,IAAI8C,IAAI,CAACY,WAAW,IAAI,EAAE;MAChC;IACF,CAAC,CAAC;IACF,OAAOtD,aAAa,CAACJ,IAAI,CAAC;EAC5B,CAAC,EAAE,EAAE,CAAC;;EAEN;EACA,IAAM2D,QAAQ,GAAG3E,WAAW,CAAC,YAA8B;IACzD,IAAMuD,MAAM,GAAGd,SAAS,CAACf,OAAO;IAChC,IAAI,CAAC6B,MAAM,EAAE,OAAO,EAAE;IACtB,IAAMC,MAAM,GAAG,IAAIC,GAAG,CAACf,aAAa,CAAChB,OAAO,CAACwB,GAAG,CAAC,UAACC,GAAG;MAAA,OAAK,CAACA,GAAG,CAACC,EAAE,EAAED,GAAG,CAAC;IAAA,EAAC,CAAC;IACzE,IAAMyB,KAA6B,GAAG,EAAE;IAExCrB,MAAM,CAACc,UAAU,CAACC,OAAO,CAAC,UAACR,IAAI,EAAK;MAClC,IAAIA,IAAI,CAACS,QAAQ,KAAKC,IAAI,CAACC,SAAS,EAAE;QACpC,IAAMzD,IAAI,GAAGI,aAAa,CAAC0C,IAAI,CAACY,WAAW,IAAI,EAAE,CAAC;QAClD,IAAI1D,IAAI,EAAE4D,KAAK,CAACC,IAAI,CAAC;UAAEC,IAAI,EAAE,MAAM;UAAE9D,IAAI,EAAJA;QAAK,CAAC,CAAC;QAC5C;MACF;MAEA,IAAI8C,IAAI,YAAYiB,WAAW,IAAIjB,IAAI,CAACkB,YAAY,CAACnE,QAAQ,CAAC,EAAE;QAC9D,IAAMoE,KAAK,GAAGnB,IAAI,CAACE,OAAO,CAACC,eAAe,IAAI,EAAE;QAChD,IAAMd,IAAG,GAAGK,MAAM,CAACO,GAAG,CAACkB,KAAK,CAAC;QAC7B,IAAI9B,IAAG,EAAEyB,KAAK,CAACC,IAAI,CAAC;UAAEC,IAAI,EAAE,KAAK;UAAE3B,GAAG,EAAHA;QAAI,CAAC,CAAC;MAC3C;IACF,CAAC,CAAC;IAEF,OAAOyB,KAAK;EACd,CAAC,EAAE,EAAE,CAAC;EAEN,IAAMM,UAAU,GAAGlF,WAAW,CAAC,YAAM;IACnC,IAAMmF,SAAS,GAAGf,YAAY,CAAC,CAAC;IAChC,IAAMgB,QAAQ,GAAG9B,cAAc,CAAC,CAAC;IACjCN,mBAAmB,CAACtB,OAAO,GAAG;MAC5BK,KAAK,EAAEoD,SAAS;MAChBlC,MAAM,EAAEmC,QAAQ,CAAClC,GAAG,CAAC,UAACC,GAAG;QAAA,OAAKA,GAAG,CAACC,EAAE;MAAA,EAAC,CAACC,IAAI,CAAC,GAAG;IAChD,CAAC;IACDlB,QAAQ,CAACgD,SAAS,CAAC;IACnB/C,YAAY,CAACgD,QAAQ,CAAC;EACxB,CAAC,EAAE,CAAC9B,cAAc,EAAEc,YAAY,EAAEjC,QAAQ,EAAEC,YAAY,CAAC,CAAC;EAE1D,IAAMiD,eAAe,GAAGrF,WAAW,CAAC,UAAC8D,IAAU,EAAEwB,KAAa,EAAEC,GAAW,EAAK;IAC9E,IAAMvE,IAAI,GAAG8C,IAAI,CAACY,WAAW,IAAI,EAAE;IACnCZ,IAAI,CAACY,WAAW,MAAAb,MAAA,CAAM7C,IAAI,CAACwE,KAAK,CAAC,CAAC,EAAEF,KAAK,CAAC,EAAAzB,MAAA,CAAG7C,IAAI,CAACwE,KAAK,CAACD,GAAG,CAAC,CAAE;IAC9D,IAAI,CAACzB,IAAI,CAACY,WAAW,EAAEZ,IAAI,CAAC2B,MAAM,CAAC,CAAC;EACtC,CAAC,EAAE,EAAE,CAAC;EAEN,IAAMC,aAAa,GAAG1F,WAAW,CAC/B,UAAC8D,IAAa,EAAK;IAAA,IAAA6B,qBAAA;IACjB,IAAMC,QAAQ,GAAG9B,IAAI,CAAC+B,eAAe;IACrC,IAAMC,IAAI,GAAGhC,IAAI,CAACiC,WAAW;IAE7B,CAAAJ,qBAAA,GAAAhD,aAAa,CAACjB,OAAO,CAACqC,GAAG,CAACD,IAAI,CAAC,cAAA6B,qBAAA,eAA/BA,qBAAA,CAAiCK,OAAO,CAAC,CAAC;IAC1ClC,IAAI,CAAC2B,MAAM,CAAC,CAAC;;IAEb;IACA,IAAI,CAAAK,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEvB,QAAQ,MAAKC,IAAI,CAACC,SAAS,EAAE;MAAA,IAAAwB,WAAA;MACrC,IAAMjF,IAAI,GAAG8E,IAAI,CAACpB,WAAW,IAAI,EAAE;MACnC,IAAMwB,WAAW,GAAG,EAAAD,WAAA,GAAAjF,IAAI,CAACmF,KAAK,CAAC,UAAU,CAAC,cAAAF,WAAA,uBAAtBA,WAAA,CAAyB,CAAC,CAAC,CAAC1E,MAAM,KAAI,CAAC;MAC3D,IAAI2E,WAAW,GAAG,CAAC,EAAE;QACnBb,eAAe,CAACS,IAAI,EAAU,CAAC,EAAEI,WAAW,CAAC;QAC7C;MACF;IACF;IAEA,IAAI,CAAAN,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAErB,QAAQ,MAAKC,IAAI,CAACC,SAAS,EAAE;MAAA,IAAA2B,YAAA;MACzC,IAAMpF,KAAI,GAAG4E,QAAQ,CAAClB,WAAW,IAAI,EAAE;MACvC,IAAM2B,WAAW,GAAG,EAAAD,YAAA,GAAApF,KAAI,CAACmF,KAAK,CAAC,MAAM,CAAC,cAAAC,YAAA,uBAAlBA,YAAA,CAAqB,CAAC,CAAC,CAAC7E,MAAM,KAAI,CAAC;MACvD,IAAI8E,WAAW,GAAG,CAAC,EAAE;QACnBhB,eAAe,CAACO,QAAQ,EAAU5E,KAAI,CAACO,MAAM,GAAG8E,WAAW,EAAErF,KAAI,CAACO,MAAM,CAAC;MAC3E;IACF;EACF,CAAC,EACD,CAAC8D,eAAe,CAClB,CAAC;EAED,IAAMiB,aAAa,GAAGtG,WAAW,CAC/B,UAACoD,EAAU,EAAK;IACd,IAAMG,MAAM,GAAGd,SAAS,CAACf,OAAO;IAChC,IAAMoC,IAAI,GAAGJ,KAAK,CAACC,IAAI,CAAC,CAAAJ,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAEK,gBAAgB,KAAAC,MAAA,CAAKhD,QAAQ,MAAG,CAAC,KAAI,EAAE,CAAC,CAAC0F,IAAI,CAC3E,UAACC,IAAI;MAAA,OAAMA,IAAI,CAAiBxC,OAAO,CAACC,eAAe,KAAKb,EAAE;IAAA,CAChE,CAAC;IACD,IAAIU,IAAI,EAAE;MACR4B,aAAa,CAAC5B,IAAI,CAAC;IACrB;IACAoB,UAAU,CAAC,CAAC;IACZ3B,MAAM,aAANA,MAAM,eAANA,MAAM,CAAEkD,KAAK,CAAC,CAAC;EACjB,CAAC,EACD,CAACvB,UAAU,EAAEQ,aAAa,CAC5B,CAAC;;EAED;EACA,IAAMgB,YAAY,GAAG1G,WAAW,CAC9B,UAACmD,GAAa,EAAK;IACjB,IAAMwD,IAAI,GAAG1F,QAAQ,CAAC2F,aAAa,CAAC,MAAM,CAAC;IAC3CD,IAAI,CAACE,YAAY,CAAC,iBAAiB,EAAE,OAAO,CAAC;IAC7CF,IAAI,CAACE,YAAY,CAAChG,QAAQ,EAAEsC,GAAG,CAACC,EAAE,CAAC;IACnCuD,IAAI,CAAC3C,OAAO,CAACC,eAAe,GAAGd,GAAG,CAACC,EAAE;IACrCuD,IAAI,CAACG,SAAS,GAAGtE,MAAM,CAACuE,SAAS;IAEjC,IAAIxE,SAAS,EAAE;MACb,IAAMyE,IAAI,GAAG3G,UAAU,CAACsG,IAAI,CAAC;MAC7BhE,aAAa,CAACjB,OAAO,CAACuF,GAAG,CAACN,IAAI,EAAEK,IAAI,CAAC;MACrCA,IAAI,CAACE,MAAM,eACTxG,IAAA,CAAAF,SAAA;QAAA2G,QAAA,EAAG5E,SAAS,CAACY,GAAG,EAAE;UAAEiE,QAAQ,EAAE,SAAAA,SAAA;YAAA,OAAMd,aAAa,CAACnD,GAAG,CAACC,EAAE,CAAC;UAAA;QAAC,CAAC;MAAC,CAAG,CACjE,CAAC;IACH,CAAC,MAAM;MACL,IAAMiE,KAAK,GAAGpG,QAAQ,CAAC2F,aAAa,CAAC,MAAM,CAAC;MAC5CS,KAAK,CAACP,SAAS,GAAG,uBAAuB;MACzCO,KAAK,CAAC3C,WAAW,GAAGvB,GAAG,CAACkE,KAAK;MAC7B,IAAMC,KAAK,GAAGrG,QAAQ,CAAC2F,aAAa,CAAC,MAAM,CAAC;MAC5CU,KAAK,CAACR,SAAS,GAAG,uBAAuB;MACzCQ,KAAK,CAACC,SAAS,GAAG,GAAG;MACrBD,KAAK,CAACE,OAAO,GAAG,UAACC,KAAK,EAAK;QACzBA,KAAK,CAACC,cAAc,CAAC,CAAC;QACtBD,KAAK,CAACE,eAAe,CAAC,CAAC;QACvBrB,aAAa,CAACnD,GAAG,CAACC,EAAE,CAAC;MACvB,CAAC;MACDuD,IAAI,CAACiB,MAAM,CAACP,KAAK,EAAEC,KAAK,CAAC;IAC3B;IACA,OAAOX,IAAI;EACb,CAAC,EACD,CAACL,aAAa,EAAE/D,SAAS,EAAEC,MAAM,CAACuE,SAAS,CAC7C,CAAC;EAED,IAAMc,kBAAkB,GAAG7H,WAAW,CAAC,UAAC8D,IAAU,EAAK;IAAA,IAAAgE,iBAAA;IACrD,IAAMC,KAAK,GAAG9G,QAAQ,CAAC+G,WAAW,CAAC,CAAC;IACpC,IAAMC,SAAS,GAAG9G,MAAM,CAAC+G,YAAY,CAAC,CAAC;IACvCH,KAAK,CAACI,QAAQ,CAACrE,IAAI,EAAE,EAAAgE,iBAAA,GAAAhE,IAAI,CAACY,WAAW,cAAAoD,iBAAA,uBAAhBA,iBAAA,CAAkBvG,MAAM,KAAI,CAAC,CAAC;IACnDwG,KAAK,CAACK,QAAQ,CAAC,IAAI,CAAC;IACpBH,SAAS,aAATA,SAAS,eAATA,SAAS,CAAEI,eAAe,CAAC,CAAC;IAC5BJ,SAAS,aAATA,SAAS,eAATA,SAAS,CAAEK,QAAQ,CAACP,KAAK,CAAC;IAC1BhF,aAAa,CAACrB,OAAO,GAAGqG,KAAK,CAACQ,UAAU,CAAC,CAAC;EAC5C,CAAC,EAAE,EAAE,CAAC;EAEN,IAAMC,kBAAkB,GAAGxI,WAAW,CAAC,YAAM;IAC3C,IAAMuD,MAAM,GAAGd,SAAS,CAACf,OAAO;IAChC,IAAMuG,SAAS,GAAG9G,MAAM,CAAC+G,YAAY,CAAC,CAAC;IACvC,IAAI,CAAC3E,MAAM,IAAI,CAAC0E,SAAS,IAAIA,SAAS,CAACQ,UAAU,KAAK,CAAC,EAAE;IACzD,IAAMV,KAAK,GAAGE,SAAS,CAACS,UAAU,CAAC,CAAC,CAAC;IACrC,IAAI,CAACnF,MAAM,CAACoF,QAAQ,CAACZ,KAAK,CAACa,cAAc,CAAC,IAAI,CAACrF,MAAM,CAACoF,QAAQ,CAACZ,KAAK,CAACc,YAAY,CAAC,EAAE;MAClF;IACF;IACA9F,aAAa,CAACrB,OAAO,GAAGqG,KAAK,CAACQ,UAAU,CAAC,CAAC;EAC5C,CAAC,EAAE,EAAE,CAAC;EAEN,IAAMO,wBAAwB,GAAG9I,WAAW,CAC1C,UAAC8D,IAAU,EAAK;IACd,IAAMP,MAAM,GAAGd,SAAS,CAACf,OAAO;IAChC,IAAI,CAAC6B,MAAM,IAAI,CAACA,MAAM,CAACoF,QAAQ,CAAC7E,IAAI,CAAC,EAAE;IACvCP,MAAM,CAACkD,KAAK,CAAC,CAAC;IACdoB,kBAAkB,CAAC/D,IAAI,CAAC;EAC1B,CAAC,EACD,CAAC+D,kBAAkB,CACrB,CAAC;EAED,IAAMkB,SAAS,GAAG,SAAZA,SAASA,CAAIjF,IAAiB;IAAA,OAClCA,IAAI,YAAYiB,WAAW,IAAIjB,IAAI,CAACkB,YAAY,CAACnE,QAAQ,CAAC;EAAA;EAE5D,IAAMmI,eAAe,GAAG,SAAlBA,eAAeA,CAAIhI,IAAY;IAAA,OAAKI,aAAa,CAACJ,IAAI,CAAC,KAAK,EAAE;EAAA;;EAEpE;EACA,IAAMiI,iBAAiB,GAAG,SAApBA,iBAAiBA,CAAIlB,KAAY,EAAK;IAC1C,IAAMmB,SAAS,GAAGnB,KAAK,CAACa,cAAc;IACtC,IAAIM,SAAS,CAAC3E,QAAQ,KAAKC,IAAI,CAACC,SAAS,EAAE;MACzC,IAAMzD,IAAI,GAAGkI,SAAS,CAACxE,WAAW,IAAI,EAAE;MACxC,IAAMyE,YAAY,GAAGnI,IAAI,CAACwE,KAAK,CAAC,CAAC,EAAEuC,KAAK,CAACqB,WAAW,CAAC;MACrD,IAAIJ,eAAe,CAACG,YAAY,CAAC,IAAIJ,SAAS,CAACG,SAAS,CAACrD,eAAe,CAAC,EAAE;QACzE,OAAOqD,SAAS,CAACrD,eAAe;MAClC;IACF;IAEA,IAAIqD,SAAS,YAAYnE,WAAW,EAAE;MACpC,IAAMa,QAAQ,GAAGsD,SAAS,CAAC7E,UAAU,CAAC0D,KAAK,CAACqB,WAAW,GAAG,CAAC,CAAC;MAC5D,IAAIL,SAAS,CAACnD,QAAQ,CAAC,EAAE,OAAOA,QAAQ;MACxC,IACE,CAAAA,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAErB,QAAQ,MAAKC,IAAI,CAACC,SAAS,IACrCuE,eAAe,CAACpD,QAAQ,CAAClB,WAAW,IAAI,EAAE,CAAC,IAC3CqE,SAAS,CAACnD,QAAQ,CAACC,eAAe,CAAC,EACnC;QACA,OAAOD,QAAQ,CAACC,eAAe;MACjC;IACF;IAEA,OAAO,IAAI;EACb,CAAC;EAED,IAAMwD,gBAAgB,GAAG,SAAnBA,gBAAgBA,CAAItB,KAAY,EAAK;IACzC,IAAMmB,SAAS,GAAGnB,KAAK,CAACa,cAAc;IACtC,IAAIM,SAAS,CAAC3E,QAAQ,KAAKC,IAAI,CAACC,SAAS,EAAE;MACzC,IAAMzD,IAAI,GAAGkI,SAAS,CAACxE,WAAW,IAAI,EAAE;MACxC,IAAM4E,WAAW,GAAGtI,IAAI,CAACwE,KAAK,CAACuC,KAAK,CAACqB,WAAW,CAAC;MACjD,IAAIJ,eAAe,CAACM,WAAW,CAAC,IAAIP,SAAS,CAACG,SAAS,CAACnD,WAAW,CAAC,EAAE;QACpE,OAAOmD,SAAS,CAACnD,WAAW;MAC9B;IACF;IAEA,IAAImD,SAAS,YAAYnE,WAAW,EAAE;MACpC,IAAMe,IAAI,GAAGoD,SAAS,CAAC7E,UAAU,CAAC0D,KAAK,CAACqB,WAAW,CAAC;MACpD,IAAIL,SAAS,CAACjD,IAAI,CAAC,EAAE,OAAOA,IAAI;MAChC,IACE,CAAAA,IAAI,aAAJA,IAAI,uBAAJA,IAAI,CAAEvB,QAAQ,MAAKC,IAAI,CAACC,SAAS,IACjCuE,eAAe,CAAClD,IAAI,CAACpB,WAAW,IAAI,EAAE,CAAC,IACvCqE,SAAS,CAACjD,IAAI,CAACC,WAAW,CAAC,EAC3B;QACA,OAAOD,IAAI,CAACC,WAAW;MACzB;IACF;IAEA,OAAO,IAAI;EACb,CAAC;;EAED;EACA,IAAMwD,iBAAiB,GAAGvJ,WAAW,CAAC,YAAM;IAC1C,IAAMuD,MAAM,GAAGd,SAAS,CAACf,OAAO;IAChC,IAAMuG,SAAS,GAAG9G,MAAM,CAAC+G,YAAY,CAAC,CAAC;IACvC,IAAI,CAAC3E,MAAM,IAAI,CAAC0E,SAAS,IAAIA,SAAS,CAACQ,UAAU,KAAK,CAAC,EAAE,OAAO,CAAC;IACjE,IAAMV,KAAK,GAAGE,SAAS,CAACS,UAAU,CAAC,CAAC,CAAC;IACrC,IAAIc,MAAM,GAAG,CAAC;IACd,IAAIC,KAAK,GAAG,KAAK;IAEjB,IAAMC,KAAK,GAAG,SAARA,KAAKA,CAAI5F,IAAU,EAAK;MAC5B,IAAI2F,KAAK,EAAE;MACX,IAAI3F,IAAI,KAAKiE,KAAK,CAACa,cAAc,EAAE;QACjC,IAAI9E,IAAI,CAACS,QAAQ,KAAKC,IAAI,CAACC,SAAS,EAAE;UACpC+E,MAAM,IAAIlI,cAAc,CACtB,CAACwC,IAAI,CAACY,WAAW,IAAI,EAAE,EAAEc,KAAK,CAAC,CAAC,EAAEuC,KAAK,CAACqB,WAAW,CACrD,CAAC;QACH;QACAK,KAAK,GAAG,IAAI;QACZ;MACF;MACA,IAAI3F,IAAI,YAAYiB,WAAW,IAAIjB,IAAI,CAACkB,YAAY,CAACnE,QAAQ,CAAC,EAAE;MAChE,IAAIiD,IAAI,CAACS,QAAQ,KAAKC,IAAI,CAACC,SAAS,EAAE;QACpC+E,MAAM,IAAIlI,cAAc,CAACwC,IAAI,CAACY,WAAW,IAAI,EAAE,CAAC;QAChD;MACF;MACAZ,IAAI,CAACO,UAAU,CAACC,OAAO,CAACoF,KAAK,CAAC;IAChC,CAAC;IAEDnG,MAAM,CAACc,UAAU,CAACC,OAAO,CAACoF,KAAK,CAAC;IAChC,OAAOF,MAAM;EACf,CAAC,EAAE,EAAE,CAAC;EAEN,IAAMG,YAAY,GAAG,SAAfA,YAAYA,CAAI7F,IAAU,EAAK;IACnC,IAAI8F,KAAK,GAAG,CAAC;IACb,IAAIlI,OAAO,GAAGoC,IAAI;IAClB,OAAOpC,OAAO,CAACmE,eAAe,EAAE;MAC9B+D,KAAK,IAAI,CAAC;MACVlI,OAAO,GAAGA,OAAO,CAACmE,eAAe;IACnC;IACA,OAAO+D,KAAK;EACd,CAAC;;EAED;EACA;EACA,IAAMC,gBAAgB,GAAG7J,WAAW,CAAC,UAACsF,KAAa,EAAEC,GAAW,EAAK;IACnE,IAAMhC,MAAM,GAAGd,SAAS,CAACf,OAAO;IAChC,IAAI,CAAC6B,MAAM,EAAE,OAAO,IAAI;IACxB,IAAIiG,MAAM,GAAG,CAAC;IACd,IAAIM,WAAyB,GAAG,IAAI;IACpC,IAAMC,KAAK,GAAGrG,KAAK,CAACC,IAAI,CAACJ,MAAM,CAACc,UAAU,CAAC;IAC3C0F,KAAK,CAACzF,OAAO,CAAC,UAACR,IAAI,EAAK;MACtB,IAAIA,IAAI,CAACS,QAAQ,KAAKC,IAAI,CAACC,SAAS,EAAE;MACtC,IAAMzD,IAAI,GAAG8C,IAAI,CAACY,WAAW,IAAI,EAAE;MACnC,IAAMsF,SAAS,GAAGR,MAAM;MACxB,IAAMS,WAAW,GAAG3I,cAAc,CAACN,IAAI,CAAC;MACxC,IAAMkJ,OAAO,GAAGV,MAAM,GAAGS,WAAW;MACpCT,MAAM,GAAGU,OAAO;MAChB,IAAIA,OAAO,IAAI5E,KAAK,IAAI0E,SAAS,IAAIzE,GAAG,EAAE;MAC1C,IAAM4E,QAAQ,GAAG3I,WAAW,CAACR,IAAI,EAAEoJ,IAAI,CAACC,GAAG,CAAC,CAAC,EAAE/E,KAAK,GAAG0E,SAAS,CAAC,CAAC;MAClE,IAAMM,MAAM,GAAG9I,WAAW,CAACR,IAAI,EAAEoJ,IAAI,CAACC,GAAG,CAAC,CAAC,EAAE9E,GAAG,GAAGyE,SAAS,CAAC,CAAC;MAC9D,IAAMO,QAAQ,GAAGvJ,IAAI,CAACwE,KAAK,CAAC,CAAC,EAAE2E,QAAQ,CAAC;MACxC,IAAMK,SAAS,GAAGxJ,IAAI,CAACwE,KAAK,CAAC8E,MAAM,CAAC;MACpC,IAAMG,MAAM,GAAG3G,IAAI,CAAC4G,UAAU;MAC9B,IAAMC,SAAS,GAAGhB,YAAY,CAAC7F,IAAI,CAAC;MAEpCA,IAAI,CAACY,WAAW,MAAAb,MAAA,CAAM0G,QAAQ,EAAA1G,MAAA,CAAG2G,SAAS,CAAE;MAC5C,IAAI,CAACV,WAAW,EAAE;QAChBA,WAAW,GAAG7I,QAAQ,CAAC+G,WAAW,CAAC,CAAC;QACpC,IAAIlE,IAAI,CAACY,WAAW,EAAE;UACpBoF,WAAW,CAAC3B,QAAQ,CAACrE,IAAI,EAAEqG,QAAQ,CAAC;QACtC,CAAC,MAAM,IAAIM,MAAM,EAAE;UACjBX,WAAW,CAAC3B,QAAQ,CAACsC,MAAM,EAAEE,SAAS,CAAC;QACzC;QACAb,WAAW,CAAC1B,QAAQ,CAAC,IAAI,CAAC;MAC5B;MACA,IAAI,CAACtE,IAAI,CAACY,WAAW,EAAEZ,IAAI,CAAC2B,MAAM,CAAC,CAAC;IACtC,CAAC,CAAC;IAEF,OAAOqE,WAAW;EACpB,CAAC,EAAE,EAAE,CAAC;;EAEN;EACA,IAAMc,qBAAqB,GAAG5K,WAAW,CAAC,YAAM;IAC9C,IAAMuD,MAAM,GAAGd,SAAS,CAACf,OAAO;IAChC,IAAI,CAAC6B,MAAM,EAAE;IACbG,KAAK,CAACC,IAAI,CAACJ,MAAM,CAACc,UAAU,CAAC,CAACC,OAAO,CAAC,UAACR,IAAI,EAAK;MAC9C,IAAIA,IAAI,CAACS,QAAQ,KAAKC,IAAI,CAACC,SAAS,EAAE;MACtC,IAAMzD,IAAI,GAAG8C,IAAI,CAACY,WAAW,IAAI,EAAE;MACnC,IAAI,CAAC1D,IAAI,EAAE;QACT8C,IAAI,CAAC2B,MAAM,CAAC,CAAC;QACb;MACF;MACA,IAAIzE,IAAI,IAAII,aAAa,CAACJ,IAAI,CAAC,KAAK,EAAE,EAAE;QACtC8C,IAAI,CAACY,WAAW,GAAG5D,UAAU;MAC/B;IACF,CAAC,CAAC;EACJ,CAAC,EAAE,EAAE,CAAC;EAEN,IAAM+J,SAAS,GAAG7K,WAAW,CAC3B,UAACmD,GAAa,EAAE9B,OAAwC,EAAK;IAC3D,IAAMkC,MAAM,GAAGd,SAAS,CAACf,OAAO;IAChC,IAAI,CAAC6B,MAAM,EAAE;IACbA,MAAM,CAACkD,KAAK,CAAC,CAAC;IACd/D,aAAa,CAAChB,OAAO,MAAAmC,MAAA,CAAAiH,kBAAA,CAChBpI,aAAa,CAAChB,OAAO,CAACwC,MAAM,CAAC,UAACsC,IAAI;MAAA,OAAKA,IAAI,CAACpD,EAAE,KAAKD,GAAG,CAACC,EAAE;IAAA,EAAC,IAC7DD,GAAG,EACJ;IACD,IAAI2G,WAAyB,GAAG,IAAI;IACpC,IAAIzI,OAAO,EAAE;MACXyI,WAAW,GAAGD,gBAAgB,CAACxI,OAAO,CAACiE,KAAK,EAAEjE,OAAO,CAACkE,GAAG,CAAC;MAC1DqF,qBAAqB,CAAC,CAAC;IACzB;IACA,IAAMG,OAAO,GAAGrE,YAAY,CAACvD,GAAG,CAAC;IACjC,IAAM6H,SAAS,GAAGjK,cAAc,CAACD,UAAU,CAAC;IAC5C,IAAMmH,SAAS,GAAG9G,MAAM,CAAC+G,YAAY,CAAC,CAAC;IACvC,IAAM+C,UAAU,GAAGlI,aAAa,CAACrB,OAAO;IACxC,IAAMqG,KAAK,GACT+B,WAAW,KACV7B,SAAS,aAATA,SAAS,eAATA,SAAS,CAAEQ,UAAU,IACtBlF,MAAM,CAACoF,QAAQ,CAACV,SAAS,CAACS,UAAU,CAAC,CAAC,CAAC,CAACE,cAAc,CAAC,GACnDX,SAAS,CAACS,UAAU,CAAC,CAAC,CAAC,GACvBuC,UAAU,IAAI1H,MAAM,CAACoF,QAAQ,CAACsC,UAAU,CAACrC,cAAc,CAAC,GACtDqC,UAAU,GACV,IAAI,CAAC;IACb,IAAIlD,KAAK,IAAIxE,MAAM,CAACoF,QAAQ,CAACZ,KAAK,CAACa,cAAc,CAAC,EAAE;MAClD;MACA,IAAMsC,QAAQ,GAAGjK,QAAQ,CAACkK,sBAAsB,CAAC,CAAC;MAClDD,QAAQ,CAACtD,MAAM,CAACmD,OAAO,EAAEC,SAAS,CAAC;MACnCjD,KAAK,CAACqD,UAAU,CAACF,QAAQ,CAAC;IAC5B,CAAC,MAAM;MACL3H,MAAM,CAACqE,MAAM,CAACmD,OAAO,EAAEC,SAAS,CAAC;IACnC;IACAJ,qBAAqB,CAAC,CAAC;IACvB9H,oBAAoB,CAACpB,OAAO,GAAGsJ,SAAS;IACxCnD,kBAAkB,CAACmD,SAAS,CAAC;IAC7B9F,UAAU,CAAC,CAAC;;IAEZ;IACA;IACA/D,MAAM,CAACkK,qBAAqB,CAAC,YAAM;MACjC,IAAIvI,oBAAoB,CAACpB,OAAO,KAAKsJ,SAAS,EAAE;QAC9ClC,wBAAwB,CAACkC,SAAS,CAAC;MACrC;IACF,CAAC,CAAC;EACJ,CAAC,EACD,CACEtE,YAAY,EACZkE,qBAAqB,EACrB1F,UAAU,EACV2E,gBAAgB,EAChBf,wBAAwB,EACxBjB,kBAAkB,CAEtB,CAAC;EAED5H,SAAS,CAAC,YAAM;IACdgB,QAAQ,CAACqK,gBAAgB,CAAC,iBAAiB,EAAE9C,kBAAkB,CAAC;IAChE,OAAO,YAAM;MACXvH,QAAQ,CAACsK,mBAAmB,CAAC,iBAAiB,EAAE/C,kBAAkB,CAAC;IACrE,CAAC;EACH,CAAC,EAAE,CAACA,kBAAkB,CAAC,CAAC;EAExBrI,mBAAmB,CAAC2B,GAAG,EAAE;IAAA,OAAO;MAC9B2E,KAAK,EAAE,SAAAA,MAAA;QAAA,IAAA+E,kBAAA;QAAA,QAAAA,kBAAA,GAAM/I,SAAS,CAACf,OAAO,cAAA8J,kBAAA,uBAAjBA,kBAAA,CAAmB/E,KAAK,CAAC,CAAC;MAAA;MACvCgF,OAAO,EAAErH,YAAY;MACrBO,QAAQ,EAARA,QAAQ;MACR+G,eAAe,EAAEnC,iBAAiB;MAClCsB,SAAS,EAATA;IACF,CAAC;EAAA,CAAC,EAAE,CAACtB,iBAAiB,EAAE5E,QAAQ,EAAEP,YAAY,EAAEyG,SAAS,CAAC,CAAC;EAE3D3J,yBAAyB,CAAC,YAAM;IAC9B,IAAMqC,MAAM,GAAGd,SAAS,CAACf,OAAO;IAChC,IAAI,CAAC6B,MAAM,EAAE;IAEb,IAAMoI,cAAc,GAAG3J,IAAI,CAACkB,GAAG,CAAC,UAACC,GAAG;MAAA,OAAKA,GAAG,CAACC,EAAE;IAAA,EAAC,CAACC,IAAI,CAAC,GAAG,CAAC;IAC1D,IAAMuI,gBAAgB,GAAG5I,mBAAmB,CAACtB,OAAO;IACpD,IAAMmK,wBAAwB,GAC5B9J,KAAK,KAAK6J,gBAAgB,CAAC7J,KAAK,IAChC4J,cAAc,KAAKC,gBAAgB,CAAC3I,MAAM;IAE5C,IAAI4I,wBAAwB,IAAItI,MAAM,CAACc,UAAU,CAAC9C,MAAM,GAAG,CAAC,EAAE;IAE9DgC,MAAM,CAACK,gBAAgB,KAAAC,MAAA,CAAKhD,QAAQ,MAAG,CAAC,CAACyD,OAAO,CAAC,UAACR,IAAI,EAAK;MAAA,IAAAgI,sBAAA;MACzD,CAAAA,sBAAA,GAAAnJ,aAAa,CAACjB,OAAO,CAACqC,GAAG,CAACD,IAAI,CAAC,cAAAgI,sBAAA,eAA/BA,sBAAA,CAAiC9F,OAAO,CAAC,CAAC;IAC5C,CAAC,CAAC;IACFzC,MAAM,CAACgE,SAAS,GAAG,EAAE;IAErB,IAAIxF,KAAK,EAAEwB,MAAM,CAACwI,WAAW,CAAChL,cAAc,CAACgB,KAAK,CAAC,CAAC;IACpDC,IAAI,CAACsC,OAAO,CAAC,UAACnB,GAAG,EAAK;MACpBI,MAAM,CAACqE,MAAM,CAAClB,YAAY,CAACvD,GAAG,CAAC,EAAEpC,cAAc,CAACD,UAAU,CAAC,CAAC;IAC9D,CAAC,CAAC;;IAEF;IACA,IAAMkL,YAAY,GAAGtI,KAAK,CAACC,IAAI,CAACJ,MAAM,CAACc,UAAU,CAAC,CAC/C4H,OAAO,CAAC,CAAC,CACT1F,IAAI,CAAC,UAACzC,IAAI;MAAA,OAAmBA,IAAI,CAACS,QAAQ,KAAKC,IAAI,CAACC,SAAS;IAAA,EAAC;IACjE,IAAIxD,QAAQ,CAACiL,aAAa,KAAK3I,MAAM,IAAIyI,YAAY,EAAE;MACrDnE,kBAAkB,CAACmE,YAAY,CAAC;IAClC;EACF,CAAC,EAAE,CAACtF,YAAY,EAAEmB,kBAAkB,EAAE7F,IAAI,EAAED,KAAK,CAAC,CAAC;EAEnDb,yBAAyB,CAAC,YAAM;IAC9B,IAAMqC,MAAM,GAAGd,SAAS,CAACf,OAAO;IAChC,IAAI,CAAC6B,MAAM,EAAE;IACb,IAAI,CAACxB,KAAK,IAAIC,IAAI,CAACT,MAAM,KAAK,CAAC,IAAIgC,MAAM,CAACc,UAAU,CAAC9C,MAAM,GAAG,CAAC,EAAE;MAC/DgC,MAAM,CAACK,gBAAgB,KAAAC,MAAA,CAAKhD,QAAQ,MAAG,CAAC,CAACyD,OAAO,CAAC,UAACR,IAAI,EAAK;QAAA,IAAAqI,sBAAA;QACzD,CAAAA,sBAAA,GAAAxJ,aAAa,CAACjB,OAAO,CAACqC,GAAG,CAACD,IAAI,CAAC,cAAAqI,sBAAA,eAA/BA,sBAAA,CAAiCnG,OAAO,CAAC,CAAC;MAC5C,CAAC,CAAC;MACFzC,MAAM,CAACgE,SAAS,GAAG,EAAE;IACvB;EACF,CAAC,EAAE,CAACvF,IAAI,CAACT,MAAM,EAAEQ,KAAK,CAAC,CAAC;EAExB,IAAMqK,WAAW,GAAG,SAAdA,WAAWA,CAAA,EAAS;IACxB,IAAI,CAACvJ,YAAY,CAACnB,OAAO,EAAEwD,UAAU,CAAC,CAAC;EACzC,CAAC;EAED,IAAMmH,aAAyD,GAAG,SAA5DA,aAAyDA,CAAI5E,KAAK,EAAK;IAC3E,IAAIA,KAAK,CAAC6E,GAAG,KAAK,WAAW,IAAI7E,KAAK,CAAC6E,GAAG,KAAK,QAAQ,EAAE;MACvD,IAAMrE,SAAS,GAAG9G,MAAM,CAAC+G,YAAY,CAAC,CAAC;MACvC,IAAID,SAAS,aAATA,SAAS,eAATA,SAAS,CAAEQ,UAAU,EAAE;QACzB,IAAMV,KAAK,GAAGE,SAAS,CAACS,UAAU,CAAC,CAAC,CAAC;QACrC,IAAIX,KAAK,CAACwE,SAAS,EAAE;UACnB,IAAMC,SAAS,GACb/E,KAAK,CAAC6E,GAAG,KAAK,WAAW,GACrBrD,iBAAiB,CAAClB,KAAK,CAAC,GACxBsB,gBAAgB,CAACtB,KAAK,CAAC;UAE7B,IAAIyE,SAAS,EAAE;YACb/E,KAAK,CAACC,cAAc,CAAC,CAAC;YACtBpB,aAAa,CAACkG,SAAS,CAACxI,OAAO,CAACC,eAAe,IAAI,EAAE,CAAC;YACtD;UACF;QACF;MACF;IACF;IACA5B,SAAS,aAATA,SAAS,eAATA,SAAS,CAAGoF,KAAK,CAAC;EACpB,CAAC;;EAED;EACA,IAAMgF,eAAe,GAAG,CAAC1K,KAAK,IAAIC,IAAI,CAACT,MAAM,KAAK,CAAC;EAEnD,oBACEX,KAAA;IAAKkG,SAAS,EAAEtE,MAAM,CAACkK,kBAAmB;IAAAvF,QAAA,GACvCsF,eAAe,IAAIxK,WAAW,iBAC7BvB,IAAA;MAAKoG,SAAS,EAAEtE,MAAM,CAACmK,iBAAkB;MAAAxF,QAAA,EAAElF;IAAW,CAAM,CAC7D,eACDvB,IAAA;MACEoB,GAAG,EAAEW,SAAU;MACfqE,SAAS,EAAEtE,MAAM,CAACoK,WAAY;MAC9BC,eAAe,EAAE,CAAC3K,QAAS;MAC3B4K,8BAA8B;MAC9BC,IAAI,EAAC,SAAS;MACd,kBAAe,MAAM;MACrBC,OAAO,EAAEZ,WAAY;MACrB/J,SAAS,EAAEgK,aAAc;MACzB/J,OAAO,EAAE,SAAAA,QAACmF,KAAK,EAAK;QAClBe,kBAAkB,CAAC,CAAC;QACpBlG,QAAO,aAAPA,QAAO,eAAPA,QAAO,CAAGmF,KAAK,CAAC;MAClB,CAAE;MACFwF,SAAS,EAAEzE,kBAAmB;MAC9B0E,OAAO,EAAE1E,kBAAmB;MAC5B2E,kBAAkB,EAAE,SAAAA,mBAAA,EAAM;QACxBtK,YAAY,CAACnB,OAAO,GAAG,IAAI;MAC7B,CAAE;MACF0L,gBAAgB,EAAE,SAAAA,iBAAA,EAAM;QACtBvK,YAAY,CAACnB,OAAO,GAAG,KAAK;QAC5BwD,UAAU,CAAC,CAAC;MACd,CAAE;MACF,sBAAoBqE,iBAAiB,CAAC;IAAE,CACzC,CAAC;EAAA,CACC,CAAC;AAEV,CACF,CAAC;AAED3H,cAAc,CAACyL,WAAW,GAAG,gBAAgB;AAE7C,eAAezL,cAAc"}
@@ -1,7 +1,7 @@
1
1
  import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
2
- import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
3
2
  import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
4
3
  import _createForOfIteratorHelper from "@babel/runtime/helpers/esm/createForOfIteratorHelper";
4
+ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
5
5
  import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
6
6
  import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
7
7
  import React, { useState, useRef, useCallback, forwardRef, useImperativeHandle, useMemo, useEffect } from "react";
@@ -67,7 +67,8 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
67
67
  onQuickKeyTrigger = _ref.onQuickKeyTrigger,
68
68
  _ref$submitFormat = _ref.submitFormat,
69
69
  submitFormat = _ref$submitFormat === void 0 ? "text" : _ref$submitFormat,
70
- formatTag = _ref.formatTag;
70
+ formatTag = _ref.formatTag,
71
+ transformSubmitData = _ref.transformSubmitData;
71
72
  var styles = useStyles();
72
73
  var isControlled = controlledValue !== undefined;
73
74
  var _useState = useState(defaultValue),
@@ -200,7 +201,7 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
200
201
  var rawText = parts.reduce(function (content, part) {
201
202
  return content + (part.type === "text" ? part.text : "");
202
203
  }, "");
203
- return {
204
+ var standardData = {
204
205
  text: serializeParts(parts, submitFormat),
205
206
  rawText: rawText,
206
207
  format: submitFormat,
@@ -208,6 +209,9 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
208
209
  files: formattedFiles,
209
210
  tags: tags
210
211
  };
212
+ return _objectSpread(_objectSpread({}, standardData), {}, {
213
+ payload: transformSubmitData === null || transformSubmitData === void 0 ? void 0 : transformSubmitData(standardData)
214
+ });
211
215
  };
212
216
 
213
217
  // 检查文件类型
@@ -327,14 +331,26 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
327
331
  }
328
332
  }, [files, maxFiles, maxFileSize, allowedFileTypes]);
329
333
 
330
- // 暴露 addFiles 方法
334
+ // 暴露给业务工具栏调用的命令式能力;外部 Popover 选择标签时可插入到当前光标位置。
331
335
  useImperativeHandle(ref, function () {
332
336
  return {
333
337
  addFiles: function addFiles(rawFiles) {
334
338
  handleFileSelect(rawFiles);
339
+ },
340
+ insertTag: function insertTag(tag) {
341
+ if (inlineTags) {
342
+ var _inlineInputRef$curre2;
343
+ (_inlineInputRef$curre2 = inlineInputRef.current) === null || _inlineInputRef$curre2 === void 0 || _inlineInputRef$curre2.insertTag(tag);
344
+ return;
345
+ }
346
+ setTags([].concat(_toConsumableArray(tags), [tag]));
347
+ },
348
+ focus: function focus() {
349
+ var _inlineInputRef$curre3, _textareaRef$current;
350
+ inlineTags ? (_inlineInputRef$curre3 = inlineInputRef.current) === null || _inlineInputRef$curre3 === void 0 ? void 0 : _inlineInputRef$curre3.focus() : (_textareaRef$current = textareaRef.current) === null || _textareaRef$current === void 0 ? void 0 : _textareaRef$current.focus();
335
351
  }
336
352
  };
337
- }, [handleFileSelect]);
353
+ }, [handleFileSelect, inlineTags, setTags, tags]);
338
354
 
339
355
  // 触发文件选择
340
356
  var triggerFileSelect = function triggerFileSelect() {
@@ -572,11 +588,12 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
572
588
 
573
589
  // 选择快捷项后转成结构化 tag;inline 模式会替换掉触发字符和关键词。
574
590
  var handleQuickKeySelect = useCallback(function (option) {
575
- var _ref9, _option$value, _activeQuickKeyConfig, _inlineInputRef$curre3, _textareaRef$current;
591
+ var _ref9, _option$value, _activeQuickKeyConfig, _inlineInputRef$curre5, _textareaRef$current2;
592
+ var tagType = (activeQuickKeyConfig === null || activeQuickKeyConfig === void 0 ? void 0 : activeQuickKeyConfig.tagType) || activeQuickKey || "unknown";
576
593
  var newTag = {
577
594
  id: generateId(),
578
595
  label: option.label,
579
- type: activeQuickKey || "unknown",
596
+ type: tagType,
580
597
  value: (_ref9 = (_option$value = option.value) !== null && _option$value !== void 0 ? _option$value : option.name) !== null && _ref9 !== void 0 ? _ref9 : option.label,
581
598
  trigger: activeQuickKey || undefined,
582
599
  icon: option.icon,
@@ -584,8 +601,8 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
584
601
  };
585
602
  activeQuickKeyConfig === null || activeQuickKeyConfig === void 0 || (_activeQuickKeyConfig = activeQuickKeyConfig.onSelect) === null || _activeQuickKeyConfig === void 0 || _activeQuickKeyConfig.call(activeQuickKeyConfig, option);
586
603
  if (inlineTags) {
587
- var _inlineInputRef$curre2;
588
- (_inlineInputRef$curre2 = inlineInputRef.current) === null || _inlineInputRef$curre2 === void 0 || _inlineInputRef$curre2.insertTag(newTag, {
604
+ var _inlineInputRef$curre4;
605
+ (_inlineInputRef$curre4 = inlineInputRef.current) === null || _inlineInputRef$curre4 === void 0 || _inlineInputRef$curre4.insertTag(newTag, {
589
606
  start: quickKeyTriggerIdx,
590
607
  end: quickKeyTriggerIdx + 1 + quickKeyKeyword.length
591
608
  });
@@ -602,7 +619,7 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
602
619
  setQuickKeyKeyword("");
603
620
  setQuickKeyTriggerIdx(-1);
604
621
  setQuickKeyActiveIndex(0);
605
- inlineTags ? (_inlineInputRef$curre3 = inlineInputRef.current) === null || _inlineInputRef$curre3 === void 0 ? void 0 : _inlineInputRef$curre3.focus() : (_textareaRef$current = textareaRef.current) === null || _textareaRef$current === void 0 ? void 0 : _textareaRef$current.focus();
622
+ inlineTags ? (_inlineInputRef$curre5 = inlineInputRef.current) === null || _inlineInputRef$curre5 === void 0 ? void 0 : _inlineInputRef$curre5.focus() : (_textareaRef$current2 = textareaRef.current) === null || _textareaRef$current2 === void 0 ? void 0 : _textareaRef$current2.focus();
606
623
  }, [activeQuickKey, activeQuickKeyConfig, inlineTags, tags, setTags, value, quickKeyTriggerIdx, quickKeyKeyword, setValue]);
607
624
 
608
625
  // 处理输入框变化(含快捷键检测)
@@ -614,10 +631,10 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
614
631
  detectQuickKey(newValue, e.target.selectionStart || 0);
615
632
  };
616
633
  var handleInlineInputChange = function handleInlineInputChange(newValue) {
617
- var _inlineInputRef$curre4;
634
+ var _inlineInputRef$curre6;
618
635
  setValue(newValue);
619
636
  // contenteditable 的 selection 不一定和 React state 同步,需实时读取内部光标 offset。
620
- detectQuickKey(newValue, ((_inlineInputRef$curre4 = inlineInputRef.current) === null || _inlineInputRef$curre4 === void 0 ? void 0 : _inlineInputRef$curre4.getCursorOffset()) || newValue.length);
637
+ detectQuickKey(newValue, ((_inlineInputRef$curre6 = inlineInputRef.current) === null || _inlineInputRef$curre6 === void 0 ? void 0 : _inlineInputRef$curre6.getCursorOffset()) || newValue.length);
621
638
  };
622
639
  var handleQuickKeyByText = function handleQuickKeyByText(text, cursorPos) {
623
640
  var quickKeyChars = quickKeys.map(function (qk) {
@@ -652,11 +669,11 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
652
669
  handleQuickKeyByText(target.value || "", target.selectionStart || 0);
653
670
  };
654
671
  var handleInlineKeyUp = function handleInlineKeyUp(e) {
655
- var _inlineInputRef$curre5, _inlineInputRef$curre6;
672
+ var _inlineInputRef$curre7, _inlineInputRef$curre8;
656
673
  if (activeQuickKey && isQuickListControlKey(e.key)) return;
657
674
  // inline 输入区不是 textarea,不能读 event.target.value,只能从 ref 取纯文本。
658
- var text = ((_inlineInputRef$curre5 = inlineInputRef.current) === null || _inlineInputRef$curre5 === void 0 ? void 0 : _inlineInputRef$curre5.getText()) || "";
659
- var cursorPos = ((_inlineInputRef$curre6 = inlineInputRef.current) === null || _inlineInputRef$curre6 === void 0 ? void 0 : _inlineInputRef$curre6.getCursorOffset()) || text.length;
675
+ var text = ((_inlineInputRef$curre7 = inlineInputRef.current) === null || _inlineInputRef$curre7 === void 0 ? void 0 : _inlineInputRef$curre7.getText()) || "";
676
+ var cursorPos = ((_inlineInputRef$curre8 = inlineInputRef.current) === null || _inlineInputRef$curre8 === void 0 ? void 0 : _inlineInputRef$curre8.getCursorOffset()) || text.length;
660
677
  handleQuickKeyByText(text, cursorPos);
661
678
  };
662
679
 
@@ -770,15 +787,11 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
770
787
  var renderFileList = function renderFileList() {
771
788
  if (files.length === 0) return null;
772
789
  return /*#__PURE__*/_jsx("div", {
773
- style: {
774
- display: "flex",
775
- flexWrap: "wrap",
776
- gap: "8px",
777
- padding: "12px 0"
778
- },
790
+ className: styles.contextFiles,
779
791
  children: files.map(function (file) {
780
792
  return /*#__PURE__*/_jsx(FileGallery, {
781
793
  file: file,
794
+ size: "small",
782
795
  removable: true,
783
796
  onRemove: handleRemoveFile
784
797
  }, file.id);
@@ -872,6 +885,8 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
872
885
  }
873
886
  return slot;
874
887
  };
888
+ var headerNode = renderSlot(header, false);
889
+ var fileListNode = allowUpload && files.length > 0 ? renderFileList() : null;
875
890
 
876
891
  // 默认后缀仅保留发送/停止按钮;上传与清空统一放到底部 actionBar,方便业务扩展左侧按钮组。
877
892
  var defaultSuffix = /*#__PURE__*/_jsx("div", {
@@ -911,7 +926,7 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
911
926
  onDragOver: allowUpload && draggable ? handleDragOver : undefined,
912
927
  onDragLeave: allowUpload && draggable ? handleDragLeave : undefined,
913
928
  onDrop: allowUpload && draggable ? handleDrop : undefined,
914
- children: [renderSlot(header, false), allowUpload && files.length > 0 && renderFileList(), allowUpload && /*#__PURE__*/_jsx("input", {
929
+ children: [allowUpload && /*#__PURE__*/_jsx("input", {
915
930
  ref: fileInputRef,
916
931
  type: "file",
917
932
  multiple: true,
@@ -929,7 +944,13 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
929
944
  className: styles.mainArea,
930
945
  children: /*#__PURE__*/_jsxs("div", {
931
946
  className: styles.senderWrap,
932
- children: [!inlineTags && /*#__PURE__*/_jsx(InputTags, {
947
+ children: [(headerNode || fileListNode) && /*#__PURE__*/_jsxs("div", {
948
+ className: styles.contextBar,
949
+ children: [headerNode && /*#__PURE__*/_jsx("div", {
950
+ className: styles.contextHeader,
951
+ children: headerNode
952
+ }), fileListNode]
953
+ }), !inlineTags && /*#__PURE__*/_jsx(InputTags, {
933
954
  tags: tags,
934
955
  onRemove: handleRemoveTag
935
956
  }), /*#__PURE__*/_jsxs("div", {