summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/components
diff options
context:
space:
mode:
authorAdam <[email protected]>2025-12-27 19:49:35 -0600
committerAdam <[email protected]>2025-12-27 19:49:35 -0600
commitfc082a0f14852ff23ecac3c07d3a4a407b42e625 (patch)
treece196c30f33391732a84bf78b2e9b5a3043faad6 /packages/app/src/components
parent953e4e9446bee016ddbc531f4738cee079a3f34f (diff)
downloadopencode-fc082a0f14852ff23ecac3c07d3a4a407b42e625.tar.gz
opencode-fc082a0f14852ff23ecac3c07d3a4a407b42e625.zip
fix(desktop): drag file over entire body to attach
Diffstat (limited to 'packages/app/src/components')
-rw-r--r--packages/app/src/components/prompt-input.tsx20
1 files changed, 11 insertions, 9 deletions
diff --git a/packages/app/src/components/prompt-input.tsx b/packages/app/src/components/prompt-input.tsx
index f1bb9132a..612001501 100644
--- a/packages/app/src/components/prompt-input.tsx
+++ b/packages/app/src/components/prompt-input.tsx
@@ -270,7 +270,7 @@ export const PromptInput: Component<PromptInputProps> = (props) => {
addPart({ type: "text", content: plainText, start: 0, end: 0 })
}
- const handleDragOver = (event: DragEvent) => {
+ const handleGlobalDragOver = (event: DragEvent) => {
event.preventDefault()
const hasFiles = event.dataTransfer?.types.includes("Files")
if (hasFiles) {
@@ -278,15 +278,14 @@ export const PromptInput: Component<PromptInputProps> = (props) => {
}
}
- const handleDragLeave = (event: DragEvent) => {
- const related = event.relatedTarget as Node | null
- const form = event.currentTarget as HTMLElement
- if (!related || !form.contains(related)) {
+ const handleGlobalDragLeave = (event: DragEvent) => {
+ // relatedTarget is null when leaving the document window
+ if (!event.relatedTarget) {
setStore("dragging", false)
}
}
- const handleDrop = async (event: DragEvent) => {
+ const handleGlobalDrop = async (event: DragEvent) => {
event.preventDefault()
setStore("dragging", false)
@@ -302,9 +301,15 @@ export const PromptInput: Component<PromptInputProps> = (props) => {
onMount(() => {
editorRef.addEventListener("paste", handlePaste)
+ document.addEventListener("dragover", handleGlobalDragOver)
+ document.addEventListener("dragleave", handleGlobalDragLeave)
+ document.addEventListener("drop", handleGlobalDrop)
})
onCleanup(() => {
editorRef.removeEventListener("paste", handlePaste)
+ document.removeEventListener("dragover", handleGlobalDragOver)
+ document.removeEventListener("dragleave", handleGlobalDragLeave)
+ document.removeEventListener("drop", handleGlobalDrop)
})
createEffect(() => {
@@ -1024,9 +1029,6 @@ export const PromptInput: Component<PromptInputProps> = (props) => {
</Show>
<form
onSubmit={handleSubmit}
- onDragOver={handleDragOver}
- onDragLeave={handleDragLeave}
- onDrop={handleDrop}
classList={{
"bg-surface-raised-stronger-non-alpha shadow-xs-border relative": true,
"rounded-md overflow-clip focus-within:shadow-xs-border": true,