diff --git a/frontend/src/viewer/ParagraphEditor.tsx b/frontend/src/viewer/ParagraphEditor.tsx index fb34082..4eba4d0 100644 --- a/frontend/src/viewer/ParagraphEditor.tsx +++ b/frontend/src/viewer/ParagraphEditor.tsx @@ -497,7 +497,8 @@ export const ParagraphEditor: React.FC = ({ if (!hasPreview) setHasPreview(true); if (!initialCaretApplied.current) { initialCaretApplied.current = true; - if (caretClick && lay) setGlobalCaretOffset(el, globalFromPoint(caretClick.x, caretClick.y, lay, el.textContent ?? '')); + const fullLen = (el.textContent ?? '').length; + setGlobalCaretOffset(el, fullLen); } positionCaret(); }; diff --git a/frontend/src/viewer/TextEditLayer.tsx b/frontend/src/viewer/TextEditLayer.tsx index 80f10f4..b267a96 100644 --- a/frontend/src/viewer/TextEditLayer.tsx +++ b/frontend/src/viewer/TextEditLayer.tsx @@ -379,7 +379,6 @@ export const TextEditLayer: React.FC = ({ const [fontFamily, setFontFamily] = useState('inherit'); const committedRef = useRef(false); const inputRef = useRef(null); - const caretIdxRef = useRef(null); const modelRef = useRef(null); const [paraEdit, setParaEdit] = useState<{ para: any; pushColumnLeft?: number; leading?: number; align?: ReflowAlign; columnLeft?: number; columnRight?: number; @@ -511,7 +510,6 @@ export const TextEditLayer: React.FC = ({ } committedRef.current = false; const fb = fallbackFamily(run.fontName); - caretIdxRef.current = caretIndexFromX(run.text, `${displayFontSize(run) * zoom}px ${fb}`, clickX); setEditing(i); setValue(run.text); setFontFamily(fb); @@ -702,11 +700,8 @@ export const TextEditLayer: React.FC = ({ value={value} onChange={(e) => setValue(e.target.value)} onFocus={(e) => { - const idx = caretIdxRef.current; - if (idx != null) { - e.currentTarget.setSelectionRange(idx, idx); - caretIdxRef.current = null; - } + const end = e.currentTarget.value.length; + e.currentTarget.setSelectionRange(end, end); }} onBlur={commit} onKeyDown={(e) => {