feat(ui): handle image paste (#3826)

* feat(ui): handle image paste

* Fix lint

* Fix type error

---------

Co-authored-by: Theodore Li <theo@sim.ai>
This commit is contained in:
Theodore Li
2026-03-28 14:15:33 -07:00
committed by GitHub
parent edc502384b
commit 0ea73263df
3 changed files with 25 additions and 1 deletions
@@ -522,6 +522,28 @@ export function UserInput({
[isInitialView]
)
const handlePaste = useCallback((e: React.ClipboardEvent<HTMLTextAreaElement>) => {
const items = e.clipboardData?.items
if (!items) return
const imageFiles: File[] = []
for (const item of Array.from(items)) {
if (item.kind === 'file' && item.type.startsWith('image/')) {
const file = item.getAsFile()
if (file) imageFiles.push(file)
}
}
if (imageFiles.length === 0) return
e.preventDefault()
const dt = new DataTransfer()
for (const file of imageFiles) {
dt.items.add(file)
}
filesRef.current.processFiles(dt.files)
}, [])
const handleScroll = useCallback((e: React.UIEvent<HTMLTextAreaElement>) => {
if (overlayRef.current) {
overlayRef.current.scrollTop = e.currentTarget.scrollTop
@@ -661,6 +683,7 @@ export function UserInput({
onChange={handleInputChange}
onKeyDown={handleKeyDown}
onInput={handleInput}
onPaste={handlePaste}
onCut={mentionTokensWithContext.handleCut}
onSelect={handleSelectAdjust}
onMouseUp={handleSelectAdjust}
@@ -320,5 +320,6 @@ export function useFileAttachments(props: UseFileAttachmentsProps) {
handleDragOver,
handleDrop,
clearAttachedFiles,
processFiles,
}
}
+1 -1
View File
@@ -25,7 +25,7 @@ const BEARER_PREFIX = 'Bearer '
export function hasExternalApiCredentials(headers: Headers): boolean {
if (headers.has(API_KEY_HEADER)) return true
const auth = headers.get('authorization')
return auth !== null && auth.startsWith(BEARER_PREFIX)
return auth?.startsWith(BEARER_PREFIX) ?? false
}
export interface AuthResult {