Skip to content
Merged
Prev Previous commit
Next Next commit
feat(ui): handle image paste (#3826)
* feat(ui): handle image paste

* Fix lint

* Fix type error

---------

Co-authored-by: Theodore Li <theo@sim.ai>
  • Loading branch information
2 people authored and Theodore Li committed Mar 28, 2026
commit 223e2d831e6c3342c0ad901b1191005e9958ce4b
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -661,6 +683,7 @@ export function UserInput({
onChange={handleInputChange}
onKeyDown={handleKeyDown}
onInput={handleInput}
onPaste={handlePaste}
onCut={mentionTokensWithContext.handleCut}
onSelect={handleSelectAdjust}
onMouseUp={handleSelectAdjust}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -320,5 +320,6 @@ export function useFileAttachments(props: UseFileAttachmentsProps) {
handleDragOver,
handleDrop,
clearAttachedFiles,
processFiles,
}
}
2 changes: 1 addition & 1 deletion apps/sim/lib/auth/hybrid.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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?.startsWith(BEARER_PREFIX)
return auth?.startsWith(BEARER_PREFIX) ?? false
}

export interface AuthResult {
Expand Down