mirror of
https://github.com/anomalyco/opencode.git
synced 2026-07-21 02:06:00 +00:00
fix(session-ui): preserve prompt editing behavior (#37483)
This commit is contained in:
@@ -45,6 +45,10 @@ export function PromptInputV2(props: PromptInputV2Props) {
|
||||
const view = props.controller.view
|
||||
let editor: HTMLDivElement | undefined
|
||||
let localInput = false
|
||||
const updateCursor = () => {
|
||||
if (!editor || !window.getSelection()?.isCollapsed) return
|
||||
props.controller.onCursor(promptInputV2Cursor(editor))
|
||||
}
|
||||
const mode = createMemo(() => state.mode)
|
||||
const buttons = createMemo(() => ({
|
||||
opacity: mode() === "normal" ? 1 : 0,
|
||||
@@ -162,8 +166,8 @@ export function PromptInputV2(props: PromptInputV2Props) {
|
||||
props.controller.submit()
|
||||
}
|
||||
}}
|
||||
onKeyUp={(event) => props.controller.onCursor(promptInputV2Cursor(event.currentTarget))}
|
||||
onPointerUp={(event) => props.controller.onCursor(promptInputV2Cursor(event.currentTarget))}
|
||||
onKeyUp={updateCursor}
|
||||
onPointerUp={updateCursor}
|
||||
onPaste={props.controller.onPaste}
|
||||
onFocus={() => props.controller.dispatch({ type: "focus.editor" })}
|
||||
/>
|
||||
|
||||
@@ -379,6 +379,23 @@ export function createPromptInputV2Controller(input: {
|
||||
return
|
||||
}
|
||||
input.view.onPaste?.(event)
|
||||
if (event.defaultPrevented) return
|
||||
const text = clipboard?.getData("text/plain")
|
||||
if (!text) return
|
||||
event.preventDefault()
|
||||
if (typeof document.execCommand === "function" && document.execCommand("insertText", false, text)) return
|
||||
const target = event.currentTarget
|
||||
const selection = window.getSelection()
|
||||
if (!(target instanceof HTMLElement) || !selection?.rangeCount || !target.contains(selection.anchorNode)) return
|
||||
const range = selection.getRangeAt(0)
|
||||
range.deleteContents()
|
||||
const node = document.createTextNode(text)
|
||||
range.insertNode(node)
|
||||
range.setStartAfter(node)
|
||||
range.collapse(true)
|
||||
selection.removeAllRanges()
|
||||
selection.addRange(range)
|
||||
target.dispatchEvent(new InputEvent("input", { bubbles: true, inputType: "insertFromPaste", data: text }))
|
||||
},
|
||||
onDragEnter(event: DragEvent) {
|
||||
event.preventDefault()
|
||||
|
||||
Reference in New Issue
Block a user