라이브 콜아웃 줄바꿈 보존 보강

This commit is contained in:
2026-06-05 11:33:48 +09:00
parent 16a12d304d
commit 4c0875446b
7 changed files with 86 additions and 7 deletions

View File

@@ -391,6 +391,40 @@ const hasNonCollapsedSelection = () => {
return !range.collapsed
}
/**
* 현재 선택 영역에 순수 텍스트를 삽입한다.
* @param {string} text - 삽입할 텍스트
* @returns {boolean} 삽입 여부
*/
const insertTextAtSelection = (text) => {
if (!import.meta.client || !rootRef.value) {
return false
}
const selection = window.getSelection()
if (!selection || selection.rangeCount === 0) {
return false
}
const range = selection.getRangeAt(0)
if (!rootRef.value.contains(range.commonAncestorContainer)) {
return false
}
range.deleteContents()
const textNode = document.createTextNode(text)
range.insertNode(textNode)
range.setStartAfter(textNode)
range.collapse(true)
selection.removeAllRanges()
selection.addRange(range)
return true
}
/**
* 커서가 줄의 논리적 맨 앞인지 확인한다(원문 접두사 직후 포함).
* @returns {boolean}
@@ -1000,6 +1034,22 @@ const onKeydown = (event) => {
return
}
if (event.key === 'Enter' && enterMode === 'multiline') {
event.preventDefault()
event.stopPropagation()
if (event.isComposing || event.keyCode === 229) {
return
}
if (!insertTextAtSelection('\n')) {
return
}
nextTick(onEditorInput)
return
}
if (event.key === 'Enter' && enterMode === 'focus-next') {
event.preventDefault()
event.stopPropagation()