diff --git a/apps/sim/app/chat/components/message/message.tsx b/apps/sim/app/chat/components/message/message.tsx
index a22bad3bbd..5339dcd0af 100644
--- a/apps/sim/app/chat/components/message/message.tsx
+++ b/apps/sim/app/chat/components/message/message.tsx
@@ -83,20 +83,44 @@ export const ClientChatMessage = memo(
{
- if (attachment.dataUrl?.trim()) {
+ const validDataUrl = attachment.dataUrl?.trim()
+ if (validDataUrl?.startsWith('data:')) {
e.preventDefault()
- window.open(attachment.dataUrl, '_blank')
+ e.stopPropagation()
+ const newWindow = window.open('', '_blank')
+ if (newWindow) {
+ newWindow.document.write(`
+
+
+
+
${attachment.name}
+
+
+
+

+
+
+ `)
+ newWindow.document.close()
+ }
}
}}
>
- {isImage ? (
+ {isImage &&
+ attachment.dataUrl?.trim() &&
+ attachment.dataUrl.startsWith('data:') ? (

)}
-
-
- {/* Render text content if present and not just file count message */}
- {message.content && !String(message.content).startsWith('Sent') && (
+ {/* Only render message bubble if there's actual text content (not just file count message) */}
+ {message.content && !String(message.content).startsWith('Sent') && (
+
+
{isJsonObject ? (
{JSON.stringify(message.content, null, 2)}
@@ -137,9 +161,9 @@ export const ClientChatMessage = memo(
{message.content as string}
)}
- )}
+
-
+ )}
)
diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/chat/chat.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/chat/chat.tsx
index aec9495f3c..5ec720eae7 100644
--- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/chat/chat.tsx
+++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/chat/chat.tsx
@@ -476,6 +476,8 @@ export function Chat({ chatMessage, setChatMessage }: ChatProps) {
focusInput(100)
}, [
chatMessage,
+ chatFiles,
+ isUploadingFiles,
activeWorkflowId,
isExecuting,
promptHistory,
@@ -487,6 +489,9 @@ export function Chat({ chatMessage, setChatMessage }: ChatProps) {
appendMessageContent,
finalizeMessageStream,
focusInput,
+ setChatMessage,
+ setChatFiles,
+ setUploadErrors,
])
// Handle key press
diff --git a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/chat/components/chat-message/chat-message.tsx b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/chat/components/chat-message/chat-message.tsx
index 28c07c2e6d..816dae5a00 100644
--- a/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/chat/components/chat-message/chat-message.tsx
+++ b/apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/chat/components/chat-message/chat-message.tsx
@@ -95,16 +95,40 @@ export function ChatMessage({ message }: ChatMessageProps) {
{
- if (attachment.dataUrl?.trim()) {
+ const validDataUrl = attachment.dataUrl?.trim()
+ if (validDataUrl?.startsWith('data:')) {
e.preventDefault()
- window.open(attachment.dataUrl, '_blank')
+ e.stopPropagation()
+ const newWindow = window.open('', '_blank')
+ if (newWindow) {
+ newWindow.document.write(`
+
+
+
+
${attachment.name}
+
+
+
+

+
+
+ `)
+ newWindow.document.close()
+ }
}
}}
>
- {isImage && attachment.dataUrl ? (
+ {isImage &&
+ attachment.dataUrl?.trim() &&
+ attachment.dataUrl.startsWith('data:') ? (

)}
-
-
-
- {/* Render text content if present and not just file count message */}
- {formattedContent && !formattedContent.startsWith('Uploaded') && (
+ {/* Only render message bubble if there's actual text content (not just file count message) */}
+ {formattedContent && !formattedContent.startsWith('Uploaded') && (
+
-
+ )}
)
}