summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/components
diff options
context:
space:
mode:
authorAbdul Rahman ArM <[email protected]>2026-02-08 16:54:09 +0530
committerGitHub <[email protected]>2026-02-08 11:24:09 +0000
commitd5036cf01f673a2d0069e0daf811f396a9eeb582 (patch)
tree22d932530276c7094d73aaa561890eb5945b78d2 /packages/app/src/components
parentd1ebe0767c264d395c8bc504c0957ccc3af90103 (diff)
downloadopencode-d5036cf01f673a2d0069e0daf811f396a9eeb582.tar.gz
opencode-d5036cf01f673a2d0069e0daf811f396a9eeb582.zip
fix(desktop): add native clipboard image paste and fix text paste (#12682)
Diffstat (limited to 'packages/app/src/components')
-rw-r--r--packages/app/src/components/prompt-input.tsx3
-rw-r--r--packages/app/src/components/prompt-input/attachments.ts11
2 files changed, 14 insertions, 0 deletions
diff --git a/packages/app/src/components/prompt-input.tsx b/packages/app/src/components/prompt-input.tsx
index 0b303cf55..7f21a36de 100644
--- a/packages/app/src/components/prompt-input.tsx
+++ b/packages/app/src/components/prompt-input.tsx
@@ -35,6 +35,7 @@ import { Persist, persisted } from "@/utils/persist"
import { SessionContextUsage } from "@/components/session-context-usage"
import { usePermission } from "@/context/permission"
import { useLanguage } from "@/context/language"
+import { usePlatform } from "@/context/platform"
import { createTextFragment, getCursorPosition, setCursorPosition, setRangeEdge } from "./prompt-input/editor-dom"
import { createPromptAttachments, ACCEPTED_FILE_TYPES } from "./prompt-input/attachments"
import { navigatePromptHistory, prependHistoryEntry, promptLength } from "./prompt-input/history"
@@ -97,6 +98,7 @@ export const PromptInput: Component<PromptInputProps> = (props) => {
const command = useCommand()
const permission = usePermission()
const language = useLanguage()
+ const platform = usePlatform()
let editorRef!: HTMLDivElement
let fileInputRef!: HTMLInputElement
let scrollRef!: HTMLDivElement
@@ -766,6 +768,7 @@ export const PromptInput: Component<PromptInputProps> = (props) => {
setCursorPosition(editorRef, promptLength(prompt.current()))
},
addPart,
+ readClipboardImage: platform.readClipboardImage,
})
const { abort, handleSubmit } = createPromptSubmit({
diff --git a/packages/app/src/components/prompt-input/attachments.ts b/packages/app/src/components/prompt-input/attachments.ts
index 48eda3742..b384bf7d8 100644
--- a/packages/app/src/components/prompt-input/attachments.ts
+++ b/packages/app/src/components/prompt-input/attachments.ts
@@ -14,6 +14,7 @@ type PromptAttachmentsInput = {
setDraggingType: (type: "image" | "@mention" | null) => void
focusEditor: () => void
addPart: (part: ContentPart) => void
+ readClipboardImage?: () => Promise<File | null>
}
export function createPromptAttachments(input: PromptAttachmentsInput) {
@@ -76,6 +77,16 @@ export function createPromptAttachments(input: PromptAttachmentsInput) {
}
const plainText = clipboardData.getData("text/plain") ?? ""
+
+ // Desktop: Browser clipboard has no images and no text, try platform's native clipboard for images
+ if (input.readClipboardImage && !plainText) {
+ const file = await input.readClipboardImage()
+ if (file) {
+ await addImageAttachment(file)
+ return
+ }
+ }
+
if (!plainText) return
input.addPart({ type: "text", content: plainText, start: 0, end: 0 })
}