@ai-group/chat-sdk 3.7.1-alpha1 → 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.
- package/dist/cjs/components/FileGallery/index.js +59 -40
- package/dist/cjs/components/FileGallery/index.js.map +2 -2
- package/dist/cjs/components/FileGallery/styles.d.ts +7 -0
- package/dist/cjs/components/FileGallery/styles.js +58 -0
- package/dist/cjs/components/FileGallery/styles.js.map +2 -2
- package/dist/cjs/components/Sources/components/CarouselCard.d.ts +12 -0
- package/dist/cjs/components/Sources/components/CarouselCard.js +130 -0
- package/dist/cjs/components/Sources/components/CarouselCard.js.map +7 -0
- package/dist/cjs/components/Sources/index.d.ts +5 -0
- package/dist/cjs/components/Sources/index.js +162 -0
- package/dist/cjs/components/Sources/index.js.map +7 -0
- package/dist/cjs/components/Sources/styles.d.ts +59 -0
- package/dist/cjs/components/Sources/styles.js +179 -0
- package/dist/cjs/components/Sources/styles.js.map +7 -0
- package/dist/cjs/components/XAdkSender/InlineTagInput.d.ts +2 -1
- package/dist/cjs/components/XAdkSender/InlineTagInput.js +107 -50
- package/dist/cjs/components/XAdkSender/InlineTagInput.js.map +2 -2
- package/dist/cjs/components/XAdkSender/index.js +101 -34
- package/dist/cjs/components/XAdkSender/index.js.map +3 -3
- package/dist/cjs/components/XAdkSender/styles.d.ts +4 -0
- package/dist/cjs/components/XAdkSender/styles.js +34 -6
- package/dist/cjs/components/XAdkSender/styles.js.map +2 -2
- package/dist/cjs/index.d.ts +3 -0
- package/dist/cjs/index.js +3 -0
- package/dist/cjs/index.js.map +3 -3
- package/dist/cjs/types/FileGallery.d.ts +3 -0
- package/dist/cjs/types/FileGallery.js.map +1 -1
- package/dist/cjs/types/Sources.d.ts +30 -0
- package/dist/cjs/types/Sources.js +18 -0
- package/dist/cjs/types/Sources.js.map +7 -0
- package/dist/cjs/types/XAdkSender.d.ts +52 -6
- package/dist/cjs/types/XAdkSender.js.map +1 -1
- package/dist/cjs/types/index.d.ts +1 -0
- package/dist/cjs/types/index.js +3 -1
- package/dist/cjs/types/index.js.map +2 -2
- package/dist/esm/components/FileGallery/index.js +22 -16
- package/dist/esm/components/FileGallery/index.js.map +1 -1
- package/dist/esm/components/FileGallery/styles.d.ts +7 -0
- package/dist/esm/components/FileGallery/styles.js +24 -17
- package/dist/esm/components/FileGallery/styles.js.map +1 -1
- package/dist/esm/components/Sources/components/CarouselCard.d.ts +12 -0
- package/dist/esm/components/Sources/components/CarouselCard.js +107 -0
- package/dist/esm/components/Sources/components/CarouselCard.js.map +1 -0
- package/dist/esm/components/Sources/index.d.ts +5 -0
- package/dist/esm/components/Sources/index.js +127 -0
- package/dist/esm/components/Sources/index.js.map +1 -0
- package/dist/esm/components/Sources/styles.d.ts +59 -0
- package/dist/esm/components/Sources/styles.js +34 -0
- package/dist/esm/components/Sources/styles.js.map +1 -0
- package/dist/esm/components/XAdkSender/InlineTagInput.d.ts +2 -1
- package/dist/esm/components/XAdkSender/InlineTagInput.js +110 -40
- package/dist/esm/components/XAdkSender/InlineTagInput.js.map +1 -1
- package/dist/esm/components/XAdkSender/index.js +129 -38
- package/dist/esm/components/XAdkSender/index.js.map +1 -1
- package/dist/esm/components/XAdkSender/styles.d.ts +4 -0
- package/dist/esm/components/XAdkSender/styles.js +29 -25
- package/dist/esm/components/XAdkSender/styles.js.map +1 -1
- package/dist/esm/index.d.ts +3 -0
- package/dist/esm/index.js +3 -0
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/FileGallery.d.ts +3 -0
- package/dist/esm/types/FileGallery.js.map +1 -1
- package/dist/esm/types/Sources.d.ts +30 -0
- package/dist/esm/types/Sources.js +2 -0
- package/dist/esm/types/Sources.js.map +1 -0
- package/dist/esm/types/XAdkSender.d.ts +52 -6
- package/dist/esm/types/XAdkSender.js.map +1 -1
- package/dist/esm/types/index.d.ts +1 -0
- package/dist/esm/types/index.js +1 -0
- package/dist/esm/types/index.js.map +1 -1
- package/dist/umd/chat-sdk.min.js +1 -1
- 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
|
-
|
|
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]);
|
|
@@ -67,9 +76,46 @@ var InlineTagInput = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
67
76
|
});
|
|
68
77
|
return normalizeText(text);
|
|
69
78
|
}, []);
|
|
79
|
+
|
|
80
|
+
// 提交时需要保留文本与 tag 的真实顺序;仅靠 value + tags 无法区分 tag 在句首、句中还是句尾。
|
|
81
|
+
var getParts = useCallback(function () {
|
|
82
|
+
var editor = editorRef.current;
|
|
83
|
+
if (!editor) return [];
|
|
84
|
+
var tagMap = new Map(latestTagsRef.current.map(function (tag) {
|
|
85
|
+
return [tag.id, tag];
|
|
86
|
+
}));
|
|
87
|
+
var parts = [];
|
|
88
|
+
editor.childNodes.forEach(function (node) {
|
|
89
|
+
if (node.nodeType === Node.TEXT_NODE) {
|
|
90
|
+
var text = normalizeText(node.textContent || "");
|
|
91
|
+
if (text) parts.push({
|
|
92
|
+
type: "text",
|
|
93
|
+
text: text
|
|
94
|
+
});
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
if (node instanceof HTMLElement && node.hasAttribute(TAG_ATTR)) {
|
|
98
|
+
var tagId = node.dataset.xadkInlineTagId || "";
|
|
99
|
+
var _tag = tagMap.get(tagId);
|
|
100
|
+
if (_tag) parts.push({
|
|
101
|
+
type: "tag",
|
|
102
|
+
tag: _tag
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
return parts;
|
|
107
|
+
}, []);
|
|
70
108
|
var emitChange = useCallback(function () {
|
|
71
|
-
|
|
72
|
-
|
|
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);
|
|
73
119
|
}, [getOrderedTags, getPlainText, onChange, onTagsChange]);
|
|
74
120
|
var removeTextRange = useCallback(function (node, start, end) {
|
|
75
121
|
var text = node.textContent || "";
|
|
@@ -155,6 +201,17 @@ var InlineTagInput = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
155
201
|
range.collapse(true);
|
|
156
202
|
selection === null || selection === void 0 || selection.removeAllRanges();
|
|
157
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();
|
|
158
215
|
}, []);
|
|
159
216
|
var restoreCursorAfterInsert = useCallback(function (node) {
|
|
160
217
|
var editor = editorRef.current;
|
|
@@ -312,7 +369,8 @@ var InlineTagInput = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
312
369
|
var tagNode = buildTagNode(tag);
|
|
313
370
|
var caretNode = createTextNode(CARET_TEXT);
|
|
314
371
|
var selection = window.getSelection();
|
|
315
|
-
var
|
|
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);
|
|
316
374
|
if (range && editor.contains(range.startContainer)) {
|
|
317
375
|
// 用 DocumentFragment 一次性插入,避免连续 insertNode 导致 tag/caret 顺序被浏览器 Range 状态打乱。
|
|
318
376
|
var fragment = document.createDocumentFragment();
|
|
@@ -334,6 +392,12 @@ var InlineTagInput = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
334
392
|
}
|
|
335
393
|
});
|
|
336
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]);
|
|
337
401
|
useImperativeHandle(ref, function () {
|
|
338
402
|
return {
|
|
339
403
|
focus: function focus() {
|
|
@@ -341,48 +405,45 @@ var InlineTagInput = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
341
405
|
return (_editorRef$current = editorRef.current) === null || _editorRef$current === void 0 ? void 0 : _editorRef$current.focus();
|
|
342
406
|
},
|
|
343
407
|
getText: getPlainText,
|
|
408
|
+
getParts: getParts,
|
|
344
409
|
getCursorOffset: getOffsetInEditor,
|
|
345
410
|
insertTag: insertTag
|
|
346
411
|
};
|
|
347
|
-
}, [getOffsetInEditor, getPlainText, insertTag]);
|
|
348
|
-
|
|
349
|
-
var editor = editorRef.current;
|
|
350
|
-
if (!editor || editor.childNodes.length > 0) return;
|
|
351
|
-
if (value) editor.appendChild(createTextNode(value));
|
|
352
|
-
tags.forEach(function (tag) {
|
|
353
|
-
return editor.append(buildTagNode(tag), createTextNode(CARET_TEXT));
|
|
354
|
-
});
|
|
355
|
-
}, []);
|
|
356
|
-
|
|
357
|
-
// 外部受控 tags 变化时,同步补齐或删除 DOM 中的 tag 节点。
|
|
358
|
-
useEffect(function () {
|
|
412
|
+
}, [getOffsetInEditor, getParts, getPlainText, insertTag]);
|
|
413
|
+
useIsomorphicLayoutEffect(function () {
|
|
359
414
|
var editor = editorRef.current;
|
|
360
415
|
if (!editor) return;
|
|
361
|
-
var
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
var
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
if (!nextTagMap.has(tagId)) {
|
|
371
|
-
removeTagNode(node);
|
|
372
|
-
}
|
|
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();
|
|
373
425
|
});
|
|
426
|
+
editor.innerHTML = "";
|
|
427
|
+
if (value) editor.appendChild(createTextNode(value));
|
|
374
428
|
tags.forEach(function (tag) {
|
|
375
|
-
if (existingIds.has(tag.id)) return;
|
|
376
429
|
editor.append(buildTagNode(tag), createTextNode(CARET_TEXT));
|
|
377
430
|
});
|
|
378
|
-
|
|
379
|
-
|
|
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 () {
|
|
380
441
|
var editor = editorRef.current;
|
|
381
442
|
if (!editor) return;
|
|
382
443
|
if (!value && tags.length === 0 && editor.childNodes.length > 0) {
|
|
383
444
|
editor.querySelectorAll("[".concat(TAG_ATTR, "]")).forEach(function (node) {
|
|
384
|
-
var _tagRootMapRef$
|
|
385
|
-
(_tagRootMapRef$
|
|
445
|
+
var _tagRootMapRef$curren3;
|
|
446
|
+
(_tagRootMapRef$curren3 = tagRootMapRef.current.get(node)) === null || _tagRootMapRef$curren3 === void 0 || _tagRootMapRef$curren3.unmount();
|
|
386
447
|
});
|
|
387
448
|
editor.innerHTML = "";
|
|
388
449
|
}
|
|
@@ -407,10 +468,15 @@ var InlineTagInput = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
407
468
|
}
|
|
408
469
|
onKeyDown === null || onKeyDown === void 0 || onKeyDown(event);
|
|
409
470
|
};
|
|
410
|
-
|
|
471
|
+
|
|
472
|
+
// placeholder 只由受控 value/tags 派生,避免从 contenteditable DOM 读取导致外部插入 tag 后状态滞后一帧。
|
|
473
|
+
var showPlaceholder = !value && tags.length === 0;
|
|
474
|
+
return /*#__PURE__*/_jsxs("div", {
|
|
411
475
|
className: styles.inlineInputWrapper,
|
|
412
|
-
|
|
413
|
-
|
|
476
|
+
children: [showPlaceholder && placeholder && /*#__PURE__*/_jsx("div", {
|
|
477
|
+
className: styles.inlinePlaceholder,
|
|
478
|
+
children: placeholder
|
|
479
|
+
}), /*#__PURE__*/_jsx("div", {
|
|
414
480
|
ref: editorRef,
|
|
415
481
|
className: styles.inlineInput,
|
|
416
482
|
contentEditable: !disabled,
|
|
@@ -419,7 +485,12 @@ var InlineTagInput = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
419
485
|
"aria-multiline": "true",
|
|
420
486
|
onInput: handleInput,
|
|
421
487
|
onKeyDown: handleKeyDown,
|
|
422
|
-
onKeyUp: onKeyUp
|
|
488
|
+
onKeyUp: function onKeyUp(event) {
|
|
489
|
+
saveSelectionRange();
|
|
490
|
+
_onKeyUp === null || _onKeyUp === void 0 || _onKeyUp(event);
|
|
491
|
+
},
|
|
492
|
+
onMouseUp: saveSelectionRange,
|
|
493
|
+
onFocus: saveSelectionRange,
|
|
423
494
|
onCompositionStart: function onCompositionStart() {
|
|
424
495
|
composingRef.current = true;
|
|
425
496
|
},
|
|
@@ -427,9 +498,8 @@ var InlineTagInput = /*#__PURE__*/forwardRef(function (_ref, ref) {
|
|
|
427
498
|
composingRef.current = false;
|
|
428
499
|
emitChange();
|
|
429
500
|
},
|
|
430
|
-
"data-empty": !getPlainText() && getOrderedTags().length === 0,
|
|
431
501
|
"data-cursor-offset": getOffsetInEditor()
|
|
432
|
-
})
|
|
502
|
+
})]
|
|
433
503
|
});
|
|
434
504
|
});
|
|
435
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","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","HTMLElement","hasAttribute","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","tagId","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 } from \"@/types\";\nimport { useStyles } from \"./styles\";\n\nexport interface InlineTagInputRef {\n focus: () => void;\n getText: () => string;\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 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 getCursorOffset: getOffsetInEditor,\n insertTag,\n }), [getOffsetInEditor, 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} data-placeholder={placeholder}>\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={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":"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"}
|