diff --git a/apps/sim/app/workspace/[workspaceId]/home/components/user-input/user-input.tsx b/apps/sim/app/workspace/[workspaceId]/home/components/user-input/user-input.tsx index 809c157945b..3fb58aceb18 100644 --- a/apps/sim/app/workspace/[workspaceId]/home/components/user-input/user-input.tsx +++ b/apps/sim/app/workspace/[workspaceId]/home/components/user-input/user-input.tsx @@ -522,6 +522,28 @@ export function UserInput({ [isInitialView] ) + const handlePaste = useCallback((e: React.ClipboardEvent) => { + 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) => { 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} diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/components/user-input/hooks/use-file-attachments.ts b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/components/user-input/hooks/use-file-attachments.ts index 24d21ea5173..499b62d1a51 100644 --- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/components/user-input/hooks/use-file-attachments.ts +++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/copilot/components/user-input/hooks/use-file-attachments.ts @@ -320,5 +320,6 @@ export function useFileAttachments(props: UseFileAttachmentsProps) { handleDragOver, handleDrop, clearAttachedFiles, + processFiles, } } diff --git a/apps/sim/lib/auth/hybrid.ts b/apps/sim/lib/auth/hybrid.ts index 3f2311e7927..67fc19a36af 100644 --- a/apps/sim/lib/auth/hybrid.ts +++ b/apps/sim/lib/auth/hybrid.ts @@ -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 {